From 794e1ff601ed8aa1f261ec9cec3a2e1c5a65c39e Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Wed, 6 Mar 2024 22:00:16 +0100 Subject: [PATCH 001/177] fix for #2802 --- test/features/export.feature | 1 + ...ter with other contributors #2802.biblatex | 16 ++++ ...twriter with other contributors #2802.json | 75 +++++++++++++++++++ translators/bibtex/biblatex.ts | 10 +++ 4 files changed, 102 insertions(+) create mode 100644 test/fixtures/export/Exporting item type film merges scriptwriter with other contributors #2802.biblatex create mode 100644 test/fixtures/export/Exporting item type film merges scriptwriter with other contributors #2802.json diff --git a/test/features/export.feature b/test/features/export.feature index 89e70bead8..d436457a21 100644 --- a/test/features/export.feature +++ b/test/features/export.feature @@ -13,6 +13,7 @@ Feature: Export Examples: | file | references | + | Exporting item type film merges scriptwriter with other contributors #2802 | 1 | | en-dash and i-circumflex translation error #2796 | 3 | | Exporting # in hashtags. #2795 | 1 | | My citation key formula suddenly includes editors for book sections even when there is a declared author #2794 | 2 | diff --git a/test/fixtures/export/Exporting item type film merges scriptwriter with other contributors #2802.biblatex b/test/fixtures/export/Exporting item type film merges scriptwriter with other contributors #2802.biblatex new file mode 100644 index 0000000000..b0a2168557 --- /dev/null +++ b/test/fixtures/export/Exporting item type film merges scriptwriter with other contributors #2802.biblatex @@ -0,0 +1,16 @@ +@video{Loach:DanielBlake2017, + type = {Drama}, + entrysubtype = {film}, + title = {I, {{Daniel Blake}}}, + editor = {Loach, Ken}, + editortype = {director}, + editora = {Laverty, Paul}, + editoratype = {scriptwriter}, + editorb = {Johns, Dave and Squires, Hayley and Percy, Sharon}, + editorbtype = {none}, + date = {2017-06-09}, + publisher = {Sixteen Films, Why Not Productions, Wild Bunch}, + abstract = {After surviving a heart-attack, a 59-year-old carpenter must fight bureaucratic forces to receive Employment and Support Allowance.}, + keywords = {bureaucracy,psychological violence,United Kingdom}, + annotation = {IMDb ID: tt5168192 event-location: United Kingdom, France, Belgium} +} diff --git a/test/fixtures/export/Exporting item type film merges scriptwriter with other contributors #2802.json b/test/fixtures/export/Exporting item type film merges scriptwriter with other contributors #2802.json new file mode 100644 index 0000000000..10d24f0546 --- /dev/null +++ b/test/fixtures/export/Exporting item type film merges scriptwriter with other contributors #2802.json @@ -0,0 +1,75 @@ +{ + "config": { + "id": "36a3b0b5-bad0-4a04-b79b-441c7cef77db", + "label": "BetterBibTeX JSON", + "options": { + "Items": true, + "Preferences": true, + "exportNotes": true, + "worker": true + }, + "preferences": { + "autoExport": "idle", + "citeCommand": "autocite", + "citekeyFormat": "auth + ':' + shorttitle(3,3) + year" + } + }, + "items": [ + { + "abstractNote": "After surviving a heart-attack, a 59-year-old carpenter must fight bureaucratic forces to receive Employment and Support Allowance.", + "citationKey": "Loach:DanielBlake2017", + "creators": [ + { + "creatorType": "director", + "firstName": "Ken", + "lastName": "Loach" + }, + { + "creatorType": "scriptwriter", + "firstName": "Paul", + "lastName": "Laverty" + }, + { + "creatorType": "contributor", + "firstName": "Dave", + "lastName": "Johns" + }, + { + "creatorType": "contributor", + "firstName": "Hayley", + "lastName": "Squires" + }, + { + "creatorType": "contributor", + "firstName": "Sharon", + "lastName": "Percy" + } + ], + "date": "2017-06-09", + "extra": [ + "IMDb ID: tt5168192", + "event-location: United Kingdom, France, Belgium" + ], + "itemID": 1, + "itemType": "film", + "libraryCatalog": "IMDb", + "publisher": "Sixteen Films, Why Not Productions, Wild Bunch", + "runningTime": "1h40m", + "tags": [ + { + "tag": "bureaucracy", + "type": 1 + }, + { + "tag": "psychological violence", + "type": 1 + }, + { + "tag": "United Kingdom" + } + ], + "title": "I, Daniel Blake", + "type": "Drama" + } + ] +} \ No newline at end of file diff --git a/translators/bibtex/biblatex.ts b/translators/bibtex/biblatex.ts index 90e534204e..1a0cf76570 100644 --- a/translators/bibtex/biblatex.ts +++ b/translators/bibtex/biblatex.ts @@ -201,6 +201,16 @@ class Entry extends BaseEntry { } break + case 'contributor': + if (['video', 'movie'].includes(this.entrytype)) { + creators.editorb.push(creator) + creators.editorb.type = 'none' + } + else { + creators.editora.push(creator) + } + break + default: creators.editora.push(creator) } From 7a0c4beb001ac1146bfb31cae7c4e29d9e40af75 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Sat, 6 Apr 2024 05:41:29 +0200 Subject: [PATCH 002/177] upgrades --- package-lock.json | 1962 +++++++++++++++++++++++++++++---------------- package.json | 20 +- 2 files changed, 1291 insertions(+), 691 deletions(-) diff --git a/package-lock.json b/package-lock.json index e8c7bc120c..71a37a07e3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,7 +32,7 @@ "emittery": "^1.0.3", "fast-safe-stringify": "^2.1.1", "fold-to-ascii": "^5.0.1", - "fracturedjsonjs": "^3.1.1", + "fracturedjsonjs": "^4.0.0", "html-to-md": "^0.8.5", "i": "^0.3.7", "jieba-zh-cn": "^1.0.12", @@ -46,7 +46,7 @@ "pinyin": "^3.1.0", "punycode2": "^1.0.1", "puqeue": "^1.1.4", - "remeda": "^1.48.0", + "remeda": "^1.57.2", "sprintf-js": "^1.1.3", "tar-js": "^0.3.0", "text-title-case": "^1.0.2", @@ -58,11 +58,11 @@ "zotero-plugin": "2.0.14" }, "devDependencies": { - "@retorquere/bibtex-parser": "^7.0.16", + "@retorquere/bibtex-parser": "^8.0.0", "@retorquere/zotero-sync": "^1.0.27", "@types/bluebird": "^3.5.42", "@types/lokijs": "^1.5.14", - "@types/node": "^20.11.27", + "@types/node": "^20.12.5", "@xmldom/xmldom": "^0.8.10", "ajv-keywords": "^5.1.0", "archiver": "^7.0.1", @@ -79,10 +79,10 @@ "dom-parser": "^1.1.5", "dotenv": "^16.4.5", "ejs": "^3.1.9", - "esbuild": "^0.20.1", - "eslint": "^8.57.0", + "esbuild": "^0.20.2", + "eslint": "^9.0.0", "estrace": "^5.0.1", - "eta": "^3.2.0", + "eta": "^3.4.0", "fast-json-patch": "^3.1.1", "file-path-filter": "^3.0.2", "find-up": "^7.0.0", @@ -113,7 +113,7 @@ "process": "^0.11.10", "properties-reader": "^2.3.0", "pug": "^3.0.2", - "putout": "^35.7.3", + "putout": "^35.7.6", "recast": "^0.23.6", "regenerate": "^1.4.2", "rimraf": "^5.0.5", @@ -122,9 +122,9 @@ "string-template": "^1.0.0", "ts-node": "^10.9.2", "tslib": "^2.6.2", - "typescript": "^5.4.2", + "typescript": "^5.4.4", "unicode-11.0.0": "^0.7.8", - "unicode2latex": "^5.0.16", + "unicode2latex": "^6.0.4", "uri-templates": "^0.2.0", "util": "^0.12.5", "xml-parser": "^1.2.1", @@ -487,9 +487,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.1.tgz", - "integrity": "sha512-m55cpeupQ2DbuRGQMMZDzbv9J9PgVelPjlcmM5kxHnrBdBx6REaEd7LamYV7Dm8N7rCyR/XwU6rVP8ploKtIkA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", + "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", "cpu": [ "ppc64" ], @@ -503,9 +503,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.1.tgz", - "integrity": "sha512-4j0+G27/2ZXGWR5okcJi7pQYhmkVgb4D7UKwxcqrjhvp5TKWx3cUjgB1CGj1mfdmJBQ9VnUGgUhign+FPF2Zgw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", "cpu": [ "arm" ], @@ -519,9 +519,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.1.tgz", - "integrity": "sha512-hCnXNF0HM6AjowP+Zou0ZJMWWa1VkD77BXe959zERgGJBBxB+sV+J9f/rcjeg2c5bsukD/n17RKWXGFCO5dD5A==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", "cpu": [ "arm64" ], @@ -535,9 +535,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.1.tgz", - "integrity": "sha512-MSfZMBoAsnhpS+2yMFYIQUPs8Z19ajwfuaSZx+tSl09xrHZCjbeXXMsUF/0oq7ojxYEpsSo4c0SfjxOYXRbpaA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", "cpu": [ "x64" ], @@ -551,9 +551,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.1.tgz", - "integrity": "sha512-Ylk6rzgMD8klUklGPzS414UQLa5NPXZD5tf8JmQU8GQrj6BrFA/Ic9tb2zRe1kOZyCbGl+e8VMbDRazCEBqPvA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", "cpu": [ "arm64" ], @@ -567,9 +567,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.1.tgz", - "integrity": "sha512-pFIfj7U2w5sMp52wTY1XVOdoxw+GDwy9FsK3OFz4BpMAjvZVs0dT1VXs8aQm22nhwoIWUmIRaE+4xow8xfIDZA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", "cpu": [ "x64" ], @@ -583,9 +583,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.1.tgz", - "integrity": "sha512-UyW1WZvHDuM4xDz0jWun4qtQFauNdXjXOtIy7SYdf7pbxSWWVlqhnR/T2TpX6LX5NI62spt0a3ldIIEkPM6RHw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", "cpu": [ "arm64" ], @@ -599,9 +599,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.1.tgz", - "integrity": "sha512-itPwCw5C+Jh/c624vcDd9kRCCZVpzpQn8dtwoYIt2TJF3S9xJLiRohnnNrKwREvcZYx0n8sCSbvGH349XkcQeg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", "cpu": [ "x64" ], @@ -615,9 +615,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.1.tgz", - "integrity": "sha512-LojC28v3+IhIbfQ+Vu4Ut5n3wKcgTu6POKIHN9Wpt0HnfgUGlBuyDDQR4jWZUZFyYLiz4RBBBmfU6sNfn6RhLw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", "cpu": [ "arm" ], @@ -631,9 +631,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.1.tgz", - "integrity": "sha512-cX8WdlF6Cnvw/DO9/X7XLH2J6CkBnz7Twjpk56cshk9sjYVcuh4sXQBy5bmTwzBjNVZze2yaV1vtcJS04LbN8w==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", "cpu": [ "arm64" ], @@ -647,9 +647,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.1.tgz", - "integrity": "sha512-4H/sQCy1mnnGkUt/xszaLlYJVTz3W9ep52xEefGtd6yXDQbz/5fZE5dFLUgsPdbUOQANcVUa5iO6g3nyy5BJiw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", "cpu": [ "ia32" ], @@ -663,9 +663,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.1.tgz", - "integrity": "sha512-c0jgtB+sRHCciVXlyjDcWb2FUuzlGVRwGXgI+3WqKOIuoo8AmZAddzeOHeYLtD+dmtHw3B4Xo9wAUdjlfW5yYA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", "cpu": [ "loong64" ], @@ -679,9 +679,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.1.tgz", - "integrity": "sha512-TgFyCfIxSujyuqdZKDZ3yTwWiGv+KnlOeXXitCQ+trDODJ+ZtGOzLkSWngynP0HZnTsDyBbPy7GWVXWaEl6lhA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", "cpu": [ "mips64el" ], @@ -695,9 +695,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.1.tgz", - "integrity": "sha512-b+yuD1IUeL+Y93PmFZDZFIElwbmFfIKLKlYI8M6tRyzE6u7oEP7onGk0vZRh8wfVGC2dZoy0EqX1V8qok4qHaw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", "cpu": [ "ppc64" ], @@ -711,9 +711,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.1.tgz", - "integrity": "sha512-wpDlpE0oRKZwX+GfomcALcouqjjV8MIX8DyTrxfyCfXxoKQSDm45CZr9fanJ4F6ckD4yDEPT98SrjvLwIqUCgg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", "cpu": [ "riscv64" ], @@ -727,9 +727,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.1.tgz", - "integrity": "sha512-5BepC2Au80EohQ2dBpyTquqGCES7++p7G+7lXe1bAIvMdXm4YYcEfZtQrP4gaoZ96Wv1Ute61CEHFU7h4FMueQ==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", "cpu": [ "s390x" ], @@ -743,9 +743,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.1.tgz", - "integrity": "sha512-5gRPk7pKuaIB+tmH+yKd2aQTRpqlf1E4f/mC+tawIm/CGJemZcHZpp2ic8oD83nKgUPMEd0fNanrnFljiruuyA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", + "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", "cpu": [ "x64" ], @@ -759,9 +759,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.1.tgz", - "integrity": "sha512-4fL68JdrLV2nVW2AaWZBv3XEm3Ae3NZn/7qy2KGAt3dexAgSVT+Hc97JKSZnqezgMlv9x6KV0ZkZY7UO5cNLCg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", "cpu": [ "x64" ], @@ -775,9 +775,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.1.tgz", - "integrity": "sha512-GhRuXlvRE+twf2ES+8REbeCb/zeikNqwD3+6S5y5/x+DYbAQUNl0HNBs4RQJqrechS4v4MruEr8ZtAin/hK5iw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", "cpu": [ "x64" ], @@ -791,9 +791,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.1.tgz", - "integrity": "sha512-ZnWEyCM0G1Ex6JtsygvC3KUUrlDXqOihw8RicRuQAzw+c4f1D66YlPNNV3rkjVW90zXVsHwZYWbJh3v+oQFM9Q==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", "cpu": [ "x64" ], @@ -807,9 +807,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.1.tgz", - "integrity": "sha512-QZ6gXue0vVQY2Oon9WyLFCdSuYbXSoxaZrPuJ4c20j6ICedfsDilNPYfHLlMH7vGfU5DQR0czHLmJvH4Nzis/A==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", "cpu": [ "arm64" ], @@ -823,9 +823,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.1.tgz", - "integrity": "sha512-HzcJa1NcSWTAU0MJIxOho8JftNp9YALui3o+Ny7hCh0v5f90nprly1U3Sj1Ldj/CvKKdvvFsCRvDkpsEMp4DNw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", "cpu": [ "ia32" ], @@ -839,9 +839,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.1.tgz", - "integrity": "sha512-0MBh53o6XtI6ctDnRMeQ+xoCN8kD2qI1rY1KgF/xdWQwoFeKou7puvDfV8/Wv4Ctx2rRpET/gGdz3YlNtNACSA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", + "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", "cpu": [ "x64" ], @@ -877,14 +877,14 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.0.2.tgz", + "integrity": "sha512-wV19ZEGEMAC1eHgrS7UQPqsdEiCIbTKTasEfcXAigzoXICcqZSjBZEHlZwNVvKg6UBCjSlos84XiLqsRJnIcIg==", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -892,7 +892,7 @@ "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -919,19 +919,19 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.0.0.tgz", + "integrity": "sha512-RThY/MnKrhubF6+s1JflwUjPEsnCEmYCWwqa/aRISKWNXGZ9epUwft4bUMM35SdKF9xvBrLydAM1RDHd1Z//ZQ==", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.12.3.tgz", + "integrity": "sha512-jsNnTBlMWuTpDkeE3on7+dWJi0D6fdDfeANj/w7MpS8ztROCoLvIO2nG0CcFj+E4k8j4QrSTh4Oryi3i2G669g==", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", + "@humanwhocodes/object-schema": "^2.0.3", "debug": "^4.3.1", "minimatch": "^3.0.5" }, @@ -960,9 +960,9 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", - "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==" }, "node_modules/@isaacs/cliui": { "version": "8.0.2", @@ -1648,32 +1648,6 @@ "node": ">=18" } }, - "node_modules/@putout/cli-cache/node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@putout/cli-cache/node_modules/flat-cache": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.0.tgz", - "integrity": "sha512-EryKbCE/wxpxKniQlyas6PY1I9vwtF3uCBweX+N8KYTCn3Y12RTGtQAJ/bd5pl7kxUAc8v/R3Ake/N17OZiFqA==", - "dev": true, - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4", - "rimraf": "^5.0.5" - }, - "engines": { - "node": ">=16" - } - }, "node_modules/@putout/cli-choose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@putout/cli-choose/-/cli-choose-2.0.0.tgz", @@ -2310,15 +2284,15 @@ } }, "node_modules/@putout/plugin-apply-dot-notation": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@putout/plugin-apply-dot-notation/-/plugin-apply-dot-notation-1.1.0.tgz", - "integrity": "sha512-TEKrxwMk4eACIGoO8c3eW0fVnOJJPjdWmwVCGvPwXesvMS4m+SVlyBztslDFW9tBbnmenB81Ok2e8GZuWDkIwQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@putout/plugin-apply-dot-notation/-/plugin-apply-dot-notation-2.0.0.tgz", + "integrity": "sha512-Bo7MqwyFzH5FisSGsOP0rWjcebziKoaJkQhQXug27EmdCkEuuhacHgjv4k4j3E9/VuZMcJdsSM92i+vX2kR3Ag==", "dev": true, "engines": { - "node": ">=16" + "node": ">=18" }, "peerDependencies": { - "putout": ">=32" + "putout": ">=35" } }, "node_modules/@putout/plugin-apply-early-return": { @@ -2701,15 +2675,15 @@ } }, "node_modules/@putout/plugin-gitignore": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@putout/plugin-gitignore/-/plugin-gitignore-4.0.0.tgz", - "integrity": "sha512-AXzm21gzlh9Iw2cpIS9VRgMqc9ROOY1D6I9lD6X7Y+ToZ8MIeV2L9JNzqwP7mcz0/zn3oth95vOc95NDHCkuFg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@putout/plugin-gitignore/-/plugin-gitignore-5.0.0.tgz", + "integrity": "sha512-dQmAyR8P/VWxWdcJ7mSHrPDrsEDSnEcKvvQBSyutW8t73DFS9kZ5ehQ8o2uAvGhKjEW3HcoPK4F5+2DFB8+McA==", "dev": true, "engines": { - "node": ">=16" + "node": ">=18" }, "peerDependencies": { - "putout": ">=33" + "putout": ">=35" } }, "node_modules/@putout/plugin-logical-expressions": { @@ -2836,15 +2810,15 @@ } }, "node_modules/@putout/plugin-npmignore": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@putout/plugin-npmignore/-/plugin-npmignore-3.0.0.tgz", - "integrity": "sha512-r4Frs06vuHu9IFvUEQs1o5IHYL9hmTLAP2Y3Y2TT0GBk9NPICZZzVv+rBXXQ+W/LmFECU9stO4LgJcnxjXVBtQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@putout/plugin-npmignore/-/plugin-npmignore-4.0.0.tgz", + "integrity": "sha512-2lN6oXMnix3H/9pUf24Lc/00g7PkIaCofHYjVJSKUsJEjBXzdRp+wI3AGBP2PkL3BFLsuR8/yq6wdA0jWQvHmg==", "dev": true, "engines": { - "node": ">=16" + "node": ">=18" }, "peerDependencies": { - "putout": ">=33" + "putout": ">=35" } }, "node_modules/@putout/plugin-package-json": { @@ -3251,15 +3225,15 @@ } }, "node_modules/@putout/plugin-remove-useless-spread": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@putout/plugin-remove-useless-spread/-/plugin-remove-useless-spread-10.0.1.tgz", - "integrity": "sha512-VD83xGpNYQ3eih9Tb2TCH541PQHujwrzEzwZpmJ37SDeE9CK90HLIybowBa3sHojqX2ANF4rByq2V904V5+Qww==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@putout/plugin-remove-useless-spread/-/plugin-remove-useless-spread-11.0.0.tgz", + "integrity": "sha512-vMJBaer8ILjap1ao6kTviLi3nRSuRg9Yz7XDqmBQlRDM/cWz2v53aEzdOMqldezdewO4I/Mx0gOVOe9wjUyMlQ==", "dev": true, "engines": { "node": ">=18" }, "peerDependencies": { - "putout": ">=34" + "putout": ">=35" } }, "node_modules/@putout/plugin-remove-useless-template-expressions": { @@ -3371,15 +3345,15 @@ } }, "node_modules/@putout/plugin-tape": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/@putout/plugin-tape/-/plugin-tape-13.1.0.tgz", - "integrity": "sha512-5iXZEpO+25xYXzFyoaeobt8DmnmtAl/iqQ3RsoU3L+PhvybZIfr0ulvyZ+7+Alh07IeSntgQn9v+PTyBPCGyjA==", + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/@putout/plugin-tape/-/plugin-tape-14.2.0.tgz", + "integrity": "sha512-odoZS3Z+u1vO4jqpKCkOqRnBC/ZjzoEgSLJXSL1KWZAL6pBtnxnQnsNr5QPFdMmnpDyUu0iUQaV8ZpZ2UpJKxQ==", "dev": true, "engines": { "node": ">=18" }, "peerDependencies": { - "putout": ">=34" + "putout": ">=35" } }, "node_modules/@putout/plugin-try-catch": { @@ -3590,12 +3564,19 @@ } }, "node_modules/@retorquere/bibtex-parser": { - "version": "7.0.16", - "resolved": "https://registry.npmjs.org/@retorquere/bibtex-parser/-/bibtex-parser-7.0.16.tgz", - "integrity": "sha512-8FyAzZZDQR3uXXwANgDkYaJVwTboES9FcPb2VPZxwuCODc7GPLSVeJpzrY7OC3NFc9BtNU7x8g6XFtUwPfGetg==", - "dev": true, - "dependencies": { - "unicode2latex": "^5.0.13", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@retorquere/bibtex-parser/-/bibtex-parser-8.0.0.tgz", + "integrity": "sha512-/fQc/6K1QnXmt4fF6jK59nkdF9dlntFrH1vBP6YC3nl/gleZdIny20PRbI1fhBroBYQ0rJvxV9ZoaAI62eOqkg==", + "dev": true, + "dependencies": { + "@unified-latex/unified-latex-util-pegjs": "^1.7.1", + "@unified-latex/unified-latex-util-print-raw": "^1.7.1", + "@unified-latex/unified-latex-util-replace": "^1.7.1", + "@unified-latex/unified-latex-util-visit": "^1.7.1", + "compromise": "^14.13.0", + "unicode2latex": "^6.0.4", + "wink-eng-lite-web-model": "^1.6.0", + "wink-nlp": "^2.2.0", "xregexp": "^5.1.1" } }, @@ -4054,9 +4035,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.11.27", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.27.tgz", - "integrity": "sha512-qyUZfMnCg1KEz57r7pzFtSGt49f6RPkPBis3Vo4PbS7roQEDn22hiHzl/Lo1q4i4hDEgBJmBF/NTNg2XR0HbFg==", + "version": "20.12.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.5.tgz", + "integrity": "sha512-BD+BjQ9LS/D8ST9p5uqBxghlN+S42iuNxjsUGjeZobe/ciXzk2qb1B6IXc6AnRLS+yFJRpN2IPEHMzwspfDJNw==", "dependencies": { "undici-types": "~5.26.4" } @@ -4073,9 +4054,9 @@ "optional": true }, "node_modules/@types/semver": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.7.tgz", - "integrity": "sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg==" + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==" }, "node_modules/@types/tar-js": { "version": "0.3.5", @@ -4088,67 +4069,6 @@ "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", "dev": true }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", - "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", - "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/type-utils": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.4", - "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", - "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", - "dependencies": { - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, "node_modules/@typescript-eslint/scope-manager": { "version": "6.21.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", @@ -4165,32 +4085,6 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", - "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", - "dependencies": { - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, "node_modules/@typescript-eslint/types": { "version": "6.21.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", @@ -4252,30 +4146,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@typescript-eslint/utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", - "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "semver": "^7.5.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - } - }, "node_modules/@typescript-eslint/visitor-keys": { "version": "6.21.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", @@ -4297,73 +4167,204 @@ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" }, - "node_modules/@xmldom/xmldom": { - "version": "0.8.10", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", - "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "optional": true + "node_modules/@unified-latex/unified-latex-types": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-types/-/unified-latex-types-1.7.1.tgz", + "integrity": "sha512-WpwM9FxJi5gEvxYYWdbtcVutNgh52lHL3c1cU82pxRdJ4ltqdmDzLwZbqnWrQxOmsmVSeyaxAfOYQpv7B016CA==", + "dev": true }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "node_modules/@unified-latex/unified-latex-util-match": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-match/-/unified-latex-util-match-1.7.1.tgz", + "integrity": "sha512-UGZyuq3KQ8BPy+2W0Fm47/T2m6IzZ5AqdOPEzvAZrbanmAfUFfIcsXAFz7eZsxACQDebeIiBfyo/Mm5MKCw16Q==", "dev": true, "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" + "@unified-latex/unified-latex-types": "^1.7.1", + "@unified-latex/unified-latex-util-print-raw": "^1.7.1" } }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + "node_modules/@unified-latex/unified-latex-util-pegjs": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-pegjs/-/unified-latex-util-pegjs-1.7.1.tgz", + "integrity": "sha512-YTmUDUvcz5IdtuGgwyYXoIAmYB7hL1zwuCDifZnMn1mKSc6QNB1XcnpLm2J3msLp6PlBVM1ouPZ8JJJOzRktjw==", + "dev": true, + "dependencies": { + "@unified-latex/unified-latex-types": "^1.7.1", + "@unified-latex/unified-latex-util-match": "^1.7.1" } }, - "node_modules/acorn-walk": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", - "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", - "engines": { - "node": ">=0.4.0" + "node_modules/@unified-latex/unified-latex-util-print-raw": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-print-raw/-/unified-latex-util-print-raw-1.7.1.tgz", + "integrity": "sha512-63Tgz85Q4YUrnqoba5xIE23eeGErVZqaTk/kFCth/1Cc/fMulU6LJtineDcjQta1nA2X08Srog4ugfanZMgevQ==", + "dev": true, + "dependencies": { + "@unified-latex/unified-latex-types": "^1.7.1" } }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "optional": true, + "node_modules/@unified-latex/unified-latex-util-replace": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-replace/-/unified-latex-util-replace-1.7.1.tgz", + "integrity": "sha512-4hrQqBMxt1eUQGoaohzNhl9XrCwsXEBeGu9BTb6oEn1GcsNrLDUCToiPvqHX9KipM8eh9grUJjqaTDPDt7FiZg==", + "dev": true, "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" + "@unified-latex/unified-latex-types": "^1.7.1", + "@unified-latex/unified-latex-util-match": "^1.7.1", + "@unified-latex/unified-latex-util-split": "^1.7.1", + "@unified-latex/unified-latex-util-trim": "^1.7.1", + "@unified-latex/unified-latex-util-visit": "^1.7.1", + "unified": "^10.1.2" } }, - "node_modules/ajv": { - "version": "8.12.0", + "node_modules/@unified-latex/unified-latex-util-replace/node_modules/@types/unist": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", + "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", + "dev": true + }, + "node_modules/@unified-latex/unified-latex-util-replace/node_modules/unified": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@unified-latex/unified-latex-util-split": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-split/-/unified-latex-util-split-1.7.1.tgz", + "integrity": "sha512-nWRP3ZZIOO/iKEldw/+9j/7jlTsyU3YFCNJJ9jQ/g53GTEWz72vj5vAM41mXOhzy8G0tkDOLUzu0thYKg0m+Iw==", + "dev": true, + "dependencies": { + "@unified-latex/unified-latex-types": "^1.7.1", + "@unified-latex/unified-latex-util-match": "^1.7.1" + } + }, + "node_modules/@unified-latex/unified-latex-util-trim": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-trim/-/unified-latex-util-trim-1.7.1.tgz", + "integrity": "sha512-qFj8pG8jIGPXXl5gFKQ+J1crdQOm+1Q3qv6aF0rtaN9qZdiTKc3E8zptR0JHWVK1lo4kkt9yMP8f84nnpBsCMw==", + "dev": true, + "dependencies": { + "@unified-latex/unified-latex-types": "^1.7.1", + "@unified-latex/unified-latex-util-match": "^1.7.1", + "@unified-latex/unified-latex-util-visit": "^1.7.1", + "unified": "^10.1.2" + } + }, + "node_modules/@unified-latex/unified-latex-util-trim/node_modules/@types/unist": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", + "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", + "dev": true + }, + "node_modules/@unified-latex/unified-latex-util-trim/node_modules/unified": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@unified-latex/unified-latex-util-visit": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-visit/-/unified-latex-util-visit-1.7.1.tgz", + "integrity": "sha512-G9DWrGTs3ZDlTxAhtlACIU1Nnuy6W13guIahtNPrmUkO24EPqnw2auwWjGbeTnf03hwoEopibst+ExrswDwt1A==", + "dev": true, + "dependencies": { + "@unified-latex/unified-latex-types": "^1.7.1", + "@unified-latex/unified-latex-util-match": "^1.7.1" + } + }, + "node_modules/@xmldom/xmldom": { + "version": "0.8.10", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", + "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "optional": true + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dev": true, + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "optional": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "8.12.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dependencies": { @@ -4648,14 +4649,15 @@ } }, "node_modules/array-includes": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", - "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", "is-string": "^1.0.7" }, "engines": { @@ -4682,33 +4684,16 @@ "node": ">=0.10.0" } }, - "node_modules/array.prototype.filter": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz", - "integrity": "sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/array.prototype.findlastindex": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz", - "integrity": "sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", + "es-abstract": "^1.23.2", "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "es-shim-unscopables": "^1.0.2" }, "engines": { @@ -5702,6 +5687,20 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/compromise": { + "version": "14.13.0", + "resolved": "https://registry.npmjs.org/compromise/-/compromise-14.13.0.tgz", + "integrity": "sha512-NqGgcBTRF7Zs3kBWJjKWoYdYTu0tZRcR4yKIA6Ve3KxpD9tgkbDHiVnFrkNYMt26jScrfKPGfVVkGaW++gq4VQ==", + "dev": true, + "dependencies": { + "efrt": "2.7.0", + "grad-school": "0.0.5", + "suffix-thumb": "5.0.2" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -5909,6 +5908,54 @@ "node": ">= 12" } }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -6202,6 +6249,15 @@ "resolved": "https://registry.npmjs.org/edtfy/-/edtfy-0.0.8.tgz", "integrity": "sha512-qhABI7FiyElTqKNMv4ETT3T4gRIPal3TxvNfx8Ekwhb2HlrWIiyQJJKVTJkVmsG6H6ape6fnZQbaH69bH31a8Q==" }, + "node_modules/efrt": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/efrt/-/efrt-2.7.0.tgz", + "integrity": "sha512-/RInbCy1d4P6Zdfa+TMVsf/ufZVotat5hCw3QXmWtjU+3pFEOvOQ7ibo3aIxyCJw2leIeAMjmPj+1SLJiCpdrQ==", + "dev": true, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/ejs": { "version": "3.1.9", "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", @@ -6276,17 +6332,21 @@ } }, "node_modules/es-abstract": { - "version": "1.22.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.4.tgz", - "integrity": "sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg==", + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", "dependencies": { "array-buffer-byte-length": "^1.0.1", "arraybuffer.prototype.slice": "^1.0.3", - "available-typed-arrays": "^1.0.6", + "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", "es-define-property": "^1.0.0", "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.2", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", "get-intrinsic": "^1.2.4", @@ -6294,15 +6354,16 @@ "globalthis": "^1.0.3", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.1", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "hasown": "^2.0.1", + "hasown": "^2.0.2", "internal-slot": "^1.0.7", "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", + "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", @@ -6310,17 +6371,17 @@ "object-keys": "^1.1.1", "object.assign": "^4.1.5", "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.0", + "safe-array-concat": "^1.1.2", "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.1", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.14" + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -6329,11 +6390,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" - }, "node_modules/es-define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", @@ -6353,6 +6409,17 @@ "node": ">= 0.4" } }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-set-tostringtag": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", @@ -6391,9 +6458,9 @@ } }, "node_modules/esbuild": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.1.tgz", - "integrity": "sha512-OJwEgrpWm/PCMsLVWXKqvcjme3bHNpOgN7Tb6cQnR5n0TPbQx1/Xrn7rqM+wn17bYeT6MGB5sn1Bh5YiGi70nA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", + "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", "dev": true, "hasInstallScript": true, "bin": { @@ -6403,29 +6470,29 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.20.1", - "@esbuild/android-arm": "0.20.1", - "@esbuild/android-arm64": "0.20.1", - "@esbuild/android-x64": "0.20.1", - "@esbuild/darwin-arm64": "0.20.1", - "@esbuild/darwin-x64": "0.20.1", - "@esbuild/freebsd-arm64": "0.20.1", - "@esbuild/freebsd-x64": "0.20.1", - "@esbuild/linux-arm": "0.20.1", - "@esbuild/linux-arm64": "0.20.1", - "@esbuild/linux-ia32": "0.20.1", - "@esbuild/linux-loong64": "0.20.1", - "@esbuild/linux-mips64el": "0.20.1", - "@esbuild/linux-ppc64": "0.20.1", - "@esbuild/linux-riscv64": "0.20.1", - "@esbuild/linux-s390x": "0.20.1", - "@esbuild/linux-x64": "0.20.1", - "@esbuild/netbsd-x64": "0.20.1", - "@esbuild/openbsd-x64": "0.20.1", - "@esbuild/sunos-x64": "0.20.1", - "@esbuild/win32-arm64": "0.20.1", - "@esbuild/win32-ia32": "0.20.1", - "@esbuild/win32-x64": "0.20.1" + "@esbuild/aix-ppc64": "0.20.2", + "@esbuild/android-arm": "0.20.2", + "@esbuild/android-arm64": "0.20.2", + "@esbuild/android-x64": "0.20.2", + "@esbuild/darwin-arm64": "0.20.2", + "@esbuild/darwin-x64": "0.20.2", + "@esbuild/freebsd-arm64": "0.20.2", + "@esbuild/freebsd-x64": "0.20.2", + "@esbuild/linux-arm": "0.20.2", + "@esbuild/linux-arm64": "0.20.2", + "@esbuild/linux-ia32": "0.20.2", + "@esbuild/linux-loong64": "0.20.2", + "@esbuild/linux-mips64el": "0.20.2", + "@esbuild/linux-ppc64": "0.20.2", + "@esbuild/linux-riscv64": "0.20.2", + "@esbuild/linux-s390x": "0.20.2", + "@esbuild/linux-x64": "0.20.2", + "@esbuild/netbsd-x64": "0.20.2", + "@esbuild/openbsd-x64": "0.20.2", + "@esbuild/sunos-x64": "0.20.2", + "@esbuild/win32-arm64": "0.20.2", + "@esbuild/win32-ia32": "0.20.2", + "@esbuild/win32-x64": "0.20.2" } }, "node_modules/escalade": { @@ -6448,40 +6515,36 @@ } }, "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.0.0.tgz", + "integrity": "sha512-IMryZ5SudxzQvuod6rUdIUz29qFItWx281VhtFVc2Psy/ZhlCeD/5DT6lBIJ4H3G+iamGJoTln1v+QSuPw0p7Q==", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", + "@eslint/eslintrc": "^3.0.2", + "@eslint/js": "9.0.0", + "@humanwhocodes/config-array": "^0.12.3", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", + "eslint-scope": "^8.0.1", + "eslint-visitor-keys": "^4.0.0", + "espree": "^10.0.1", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.19.0", "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", @@ -6495,7 +6558,7 @@ "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -6520,9 +6583,9 @@ } }, "node_modules/eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", + "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", "dependencies": { "debug": "^3.2.7" }, @@ -6543,81 +6606,24 @@ "ms": "^2.1.1" } }, - "node_modules/eslint-plugin-import": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", - "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", - "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", - "semver": "^6.3.1", - "tsconfig-paths": "^3.15.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-prefer-arrow": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-prefer-arrow/-/eslint-plugin-prefer-arrow-1.2.3.tgz", - "integrity": "sha512-J9I5PKCOJretVuiZRGvPQxCbllxGAV/viI20JO3LYblAodofBxyMnZAJ+WGeClHgANnSJberTNoFWWjrWKBuXQ==", - "peerDependencies": { - "eslint": ">=2.0.0" - } - }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "node_modules/eslint-plugin-prefer-arrow": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-prefer-arrow/-/eslint-plugin-prefer-arrow-1.2.3.tgz", + "integrity": "sha512-J9I5PKCOJretVuiZRGvPQxCbllxGAV/viI20JO3LYblAodofBxyMnZAJ+WGeClHgANnSJberTNoFWWjrWKBuXQ==", + "peerDependencies": { + "eslint": ">=2.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.1.tgz", + "integrity": "sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -6649,6 +6655,17 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", + "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/eslint/node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -6731,16 +6748,27 @@ } }, "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.0.1.tgz", + "integrity": "sha512-MWkrWZbJsL2UwnjxTX3gG8FneachS/Mwg7tdGXce011sJd5b0JG54vat5KHnfSBODZ3Wvzd2WnjxyzsRoVv+ww==", "dependencies": { - "acorn": "^8.9.0", + "acorn": "^8.11.3", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "eslint-visitor-keys": "^4.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", + "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -6823,9 +6851,9 @@ } }, "node_modules/eta": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eta/-/eta-3.2.0.tgz", - "integrity": "sha512-Qzc3it7nLn49dbOb9+oHV9rwtt9qN8oShRztqkZ3gXPqQflF0VLin5qhWk0g/2ioibBwT4DU6OIMVft7tg/rVg==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/eta/-/eta-3.4.0.tgz", + "integrity": "sha512-tCsc7WXTjrTx4ZjYLplcqrI3o4mYJ+Z6YspeuGL8tbt/hHoMchwBwtKfwM09svEY86iRapY93vUqQttcNuIO5Q==", "dev": true, "engines": { "node": ">=6.0.0" @@ -7253,14 +7281,14 @@ } }, "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dependencies": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0" } }, "node_modules/file-path-filter": { @@ -7429,55 +7457,21 @@ } }, "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dependencies": { "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flat-cache/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "keyv": "^4.5.4" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/flat-cache/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=16" } }, "node_modules/flatted": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.0.tgz", - "integrity": "sha512-noqGuLw158+DuD9UPRKHpJ2hGxpFyDlYYrfM0mWt4XhT4n0lwzTLh70Tkdyy4kyTmyTT9Bv7bWAJqw7cgkEXDg==" + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==" }, "node_modules/fold-to-ascii": { "version": "5.0.1", @@ -7555,9 +7549,9 @@ } }, "node_modules/fracturedjsonjs": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fracturedjsonjs/-/fracturedjsonjs-3.1.1.tgz", - "integrity": "sha512-CjedDVndDnRjqgvrQtJ1wB3JsPTS07WtkJ0bHz47e3+acsmS9GKm0AatxFsLCaYWFXTszz2z7PeARFsBJcbiWA==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fracturedjsonjs/-/fracturedjsonjs-4.0.0.tgz", + "integrity": "sha512-IFRM3y41/Wo8/JvpG6SHGiKxQRzG250BPn178T6C9p60vKihpMUeM4nT+ism8w+9eGoYqgPw45oKtSLJldPf3g==" }, "node_modules/fragment-cache": { "version": "0.2.1", @@ -7913,14 +7907,11 @@ } }, "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dependencies": { - "type-fest": "^0.20.2" - }, + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -7981,6 +7972,15 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, + "node_modules/grad-school": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/grad-school/-/grad-school-0.0.5.tgz", + "integrity": "sha512-rXunEHF9M9EkMydTBux7+IryYXEZinRk6g8OBOGDBzo/qWJjhTxy86i5q7lQYpCLHN8Sqv1XX3OIOc7ka2gtvQ==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", @@ -8188,9 +8188,9 @@ } }, "node_modules/hasown": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", - "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dependencies": { "function-bind": "^1.1.2" }, @@ -8557,6 +8557,20 @@ "node": ">= 0.4" } }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", @@ -8824,11 +8838,14 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -11533,13 +11550,14 @@ } }, "node_modules/object.fromentries": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", - "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -11549,15 +11567,16 @@ } }, "node_modules/object.groupby": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.2.tgz", - "integrity": "sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dependencies": { - "array.prototype.filter": "^1.0.3", - "call-bind": "^1.0.5", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.0.0" + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/object.pick": { @@ -11573,13 +11592,13 @@ } }, "node_modules/object.values": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", - "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -12316,9 +12335,9 @@ "integrity": "sha512-EkCRMV2w15w+9wylcpabacKK9VvTRX3TvhVQJBwIk4ThvllI2M6RlvdEZvJLhxsxy4x8IEDZneQhlGU0Pk5keg==" }, "node_modules/putout": { - "version": "35.7.3", - "resolved": "https://registry.npmjs.org/putout/-/putout-35.7.3.tgz", - "integrity": "sha512-hd74dP9X4xhDaFEI4tnqXDw45x8bTLTUUfesUTDrTrqo1ZX4gZfcin3gdGI6E2YxV/MeB4gX+/XbZxszD37msQ==", + "version": "35.7.6", + "resolved": "https://registry.npmjs.org/putout/-/putout-35.7.6.tgz", + "integrity": "sha512-HiH0QxmvN2G1Sn1g2GJQrECrvwnsZjXU863gJ0T2GXD37ITS0r6biEsUEyH/6/Q5tYyyENzBuMzbtsDP8Vd/RQ==", "dev": true, "dependencies": { "@putout/babel": "^2.0.0", @@ -12355,7 +12374,7 @@ "@putout/operator-regexp": "^1.0.0", "@putout/plugin-apply-at": "^2.0.0", "@putout/plugin-apply-destructuring": "^7.0.0", - "@putout/plugin-apply-dot-notation": "^1.0.0", + "@putout/plugin-apply-dot-notation": "^2.0.0", "@putout/plugin-apply-early-return": "^3.0.0", "@putout/plugin-apply-flat-map": "^2.0.0", "@putout/plugin-apply-optional-chaining": "^5.0.0", @@ -12387,7 +12406,7 @@ "@putout/plugin-filesystem": "^4.0.0", "@putout/plugin-for-of": "^4.0.0", "@putout/plugin-github": "^12.0.0", - "@putout/plugin-gitignore": "^4.0.0", + "@putout/plugin-gitignore": "^5.0.0", "@putout/plugin-logical-expressions": "^5.0.0", "@putout/plugin-madrun": "^18.0.0", "@putout/plugin-math": "^2.0.0", @@ -12398,7 +12417,7 @@ "@putout/plugin-montag": "^2.0.0", "@putout/plugin-new": "^3.0.1", "@putout/plugin-nodejs": "^11.0.0", - "@putout/plugin-npmignore": "^3.0.0", + "@putout/plugin-npmignore": "^4.0.0", "@putout/plugin-package-json": "^7.0.0", "@putout/plugin-promises": "^14.0.0", "@putout/plugin-putout": "^18.0.0", @@ -12431,7 +12450,7 @@ "@putout/plugin-remove-useless-operand": "^2.0.0", "@putout/plugin-remove-useless-replace": "^1.0.1", "@putout/plugin-remove-useless-return": "^6.0.0", - "@putout/plugin-remove-useless-spread": "^10.0.0", + "@putout/plugin-remove-useless-spread": "^11.0.0", "@putout/plugin-remove-useless-template-expressions": "^2.0.0", "@putout/plugin-remove-useless-variables": "^10.0.0", "@putout/plugin-reuse-duplicate-init": "^5.0.0", @@ -12441,7 +12460,7 @@ "@putout/plugin-sort-imports-by-specifiers": "^1.0.0", "@putout/plugin-split-nested-destructuring": "^3.0.0", "@putout/plugin-split-variable-declarations": "^3.0.0", - "@putout/plugin-tape": "^13.0.0", + "@putout/plugin-tape": "^14.0.0", "@putout/plugin-try-catch": "^3.0.0", "@putout/plugin-types": "^3.0.0", "@putout/plugin-typescript": "^6.0.0", @@ -13896,9 +13915,9 @@ } }, "node_modules/remeda": { - "version": "1.48.0", - "resolved": "https://registry.npmjs.org/remeda/-/remeda-1.48.0.tgz", - "integrity": "sha512-u0XLpaNB/qNY1icmUcosmpGKObmGuJtw7UYN+bS+Hiq0b8KRWvq3gkuqy/VCLalGUrlPrMLbt079Gg5WTuTYQw==" + "version": "1.57.2", + "resolved": "https://registry.npmjs.org/remeda/-/remeda-1.57.2.tgz", + "integrity": "sha512-48srClA3Em1E+n+/L9iILVP4G80yG+CKDtrWFgsBbbWYC9/OmvI19Ag9I5baDMdgTTaWSOh8yXbUD3SzGunSnQ==" }, "node_modules/remove-blank-lines": { "version": "1.4.1", @@ -14130,12 +14149,12 @@ } }, "node_modules/safe-array-concat": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz", - "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dependencies": { - "call-bind": "^1.0.5", - "get-intrinsic": "^1.2.2", + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -14847,13 +14866,14 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -14863,26 +14883,29 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -15076,18 +15099,6 @@ "node": ">=8" } }, - "node_modules/stylelint/node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, "node_modules/stylelint/node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -15100,20 +15111,6 @@ "node": ">=8" } }, - "node_modules/stylelint/node_modules/flat-cache": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.0.tgz", - "integrity": "sha512-EryKbCE/wxpxKniQlyas6PY1I9vwtF3uCBweX+N8KYTCn3Y12RTGtQAJ/bd5pl7kxUAc8v/R3Ake/N17OZiFqA==", - "dev": true, - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4", - "rimraf": "^5.0.5" - }, - "engines": { - "node": ">=16" - } - }, "node_modules/stylelint/node_modules/global-modules": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", @@ -15228,6 +15225,12 @@ "which": "bin/which" } }, + "node_modules/suffix-thumb": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/suffix-thumb/-/suffix-thumb-5.0.2.tgz", + "integrity": "sha512-I5PWXAFKx3FYnI9a+dQMWNqTxoRt6vdBdb0O+BJ1sxXCWtSoQCusc13E58f+9p4MYx/qCnEMkD5jac6K2j3dgA==", + "dev": true + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -15700,14 +15703,15 @@ } }, "node_modules/typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -15736,9 +15740,9 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.5.tgz", - "integrity": "sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", @@ -15755,9 +15759,9 @@ } }, "node_modules/typescript": { - "version": "5.4.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.2.tgz", - "integrity": "sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==", + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.4.tgz", + "integrity": "sha512-dGE2Vv8cpVvw28v8HCPqyb08EzbBURxDpuhJvTrusShUfGnhHBafDsLdS1EhhxyL6BJQE+2cT3dDPAv+MQ6oLw==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -15814,9 +15818,9 @@ "dev": true }, "node_modules/unicode2latex": { - "version": "5.0.16", - "resolved": "https://registry.npmjs.org/unicode2latex/-/unicode2latex-5.0.16.tgz", - "integrity": "sha512-q2GDtUcl24esEErwwJUxWLC5rPSee12SjLO9KLGw3XIGB2cOn2KQ800FGz4MvQ19A7zsIG7bya9aDBeKcCyp1A==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/unicode2latex/-/unicode2latex-6.0.4.tgz", + "integrity": "sha512-P9xJAuUU3wtOPVq4fxitEZJSNI0W1ttj2Vudf4SX+RI1SM9j1lgAyjMLSumuksoADi0mg9CADz4af25XcwV8FA==", "dev": true }, "node_modules/unicorn-magic": { @@ -16441,15 +16445,15 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz", - "integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dependencies": { - "available-typed-arrays": "^1.0.6", - "call-bind": "^1.0.5", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.1" + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -16467,6 +16471,24 @@ "string-width": "^1.0.2 || 2 || 3 || 4" } }, + "node_modules/wink-eng-lite-web-model": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/wink-eng-lite-web-model/-/wink-eng-lite-web-model-1.6.0.tgz", + "integrity": "sha512-j4DaUTWnX3OzFFbTnY4v9RUeebghAd4mEWiJx9rZ29jfyW1OdK6H9UPbY8QrFb6sRIV1wJP2FGe2phA6MSEfwQ==", + "dev": true, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "wink-nlp": ">2.1.0" + } + }, + "node_modules/wink-nlp": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/wink-nlp/-/wink-nlp-2.2.0.tgz", + "integrity": "sha512-q2BFBauhMS/4f+grni6hL+a0RxHJzmWT7Vj4nbaz7Ihr7ro/fLfrW+qHy16LlP1Oqsv1TacThKNDXmSm6F+PnA==", + "dev": true + }, "node_modules/with": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", @@ -16759,14 +16781,112 @@ "zotero-start": "bin/start.py" } }, - "node_modules/zotero-plugin/node_modules/@octokit/auth-token": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", - "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", - "engines": { - "node": ">= 18" - } - }, + "node_modules/zotero-plugin/node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/zotero-plugin/node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/zotero-plugin/node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/zotero-plugin/node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/zotero-plugin/node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/zotero-plugin/node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/zotero-plugin/node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/zotero-plugin/node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/zotero-plugin/node_modules/@octokit/auth-token": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", + "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", + "engines": { + "node": ">= 18" + } + }, "node_modules/zotero-plugin/node_modules/@octokit/core": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.1.0.tgz", @@ -16902,6 +17022,117 @@ "@octokit/openapi-types": "^19.1.0" } }, + "node_modules/zotero-plugin/node_modules/@typescript-eslint/eslint-plugin": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", + "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", + "dependencies": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/type-utils": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/zotero-plugin/node_modules/@typescript-eslint/parser": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", + "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", + "dependencies": { + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/zotero-plugin/node_modules/@typescript-eslint/type-utils": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", + "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", + "dependencies": { + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/zotero-plugin/node_modules/@typescript-eslint/utils": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", + "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "semver": "^7.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, "node_modules/zotero-plugin/node_modules/archiver": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/archiver/-/archiver-6.0.2.tgz", @@ -17014,19 +17245,308 @@ "node": ">= 12.0.0" } }, - "node_modules/zotero-plugin/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "node_modules/zotero-plugin/node_modules/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" }, "bin": { - "glob": "dist/esm/bin.mjs" + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/zotero-plugin/node_modules/eslint-plugin-import": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "dependencies": { + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/zotero-plugin/node_modules/eslint-plugin-import/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/zotero-plugin/node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/zotero-plugin/node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/zotero-plugin/node_modules/eslint-plugin-import/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/zotero-plugin/node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/zotero-plugin/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/zotero-plugin/node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/zotero-plugin/node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/zotero-plugin/node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/zotero-plugin/node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/zotero-plugin/node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/zotero-plugin/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zotero-plugin/node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/zotero-plugin/node_modules/flat-cache/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/zotero-plugin/node_modules/flat-cache/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/zotero-plugin/node_modules/flat-cache/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/zotero-plugin/node_modules/flat-cache/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/zotero-plugin/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -17035,6 +17555,39 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/zotero-plugin/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zotero-plugin/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/zotero-plugin/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/zotero-plugin/node_modules/minimatch": { "version": "9.0.3", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", @@ -17049,6 +17602,42 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/zotero-plugin/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zotero-plugin/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zotero-plugin/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, "node_modules/zotero-plugin/node_modules/peggy": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/peggy/-/peggy-3.0.2.tgz", @@ -17064,6 +17653,17 @@ "node": ">=14" } }, + "node_modules/zotero-plugin/node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/zotero-plugin/node_modules/zip-stream": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-5.0.2.tgz", diff --git a/package.json b/package.json index 529c98ebe8..458bfe6641 100644 --- a/package.json +++ b/package.json @@ -86,7 +86,7 @@ "emittery": "^1.0.3", "fast-safe-stringify": "^2.1.1", "fold-to-ascii": "^5.0.1", - "fracturedjsonjs": "^3.1.1", + "fracturedjsonjs": "^4.0.0", "html-to-md": "^0.8.5", "i": "^0.3.7", "jieba-zh-cn": "^1.0.12", @@ -100,7 +100,7 @@ "pinyin": "^3.1.0", "punycode2": "^1.0.1", "puqeue": "^1.1.4", - "remeda": "^1.48.0", + "remeda": "^1.57.2", "sprintf-js": "^1.1.3", "tar-js": "^0.3.0", "text-title-case": "^1.0.2", @@ -112,11 +112,11 @@ "zotero-plugin": "2.0.14" }, "devDependencies": { - "@retorquere/bibtex-parser": "^7.0.16", + "@retorquere/bibtex-parser": "^8.0.0", "@retorquere/zotero-sync": "^1.0.27", "@types/bluebird": "^3.5.42", "@types/lokijs": "^1.5.14", - "@types/node": "^20.11.27", + "@types/node": "^20.12.5", "@xmldom/xmldom": "^0.8.10", "ajv-keywords": "^5.1.0", "archiver": "^7.0.1", @@ -133,10 +133,10 @@ "dom-parser": "^1.1.5", "dotenv": "^16.4.5", "ejs": "^3.1.9", - "esbuild": "^0.20.1", - "eslint": "^8.57.0", + "esbuild": "^0.20.2", + "eslint": "^9.0.0", "estrace": "^5.0.1", - "eta": "^3.2.0", + "eta": "^3.4.0", "fast-json-patch": "^3.1.1", "file-path-filter": "^3.0.2", "find-up": "^7.0.0", @@ -167,7 +167,7 @@ "process": "^0.11.10", "properties-reader": "^2.3.0", "pug": "^3.0.2", - "putout": "^35.7.3", + "putout": "^35.7.6", "recast": "^0.23.6", "regenerate": "^1.4.2", "rimraf": "^5.0.5", @@ -176,9 +176,9 @@ "string-template": "^1.0.0", "ts-node": "^10.9.2", "tslib": "^2.6.2", - "typescript": "^5.4.2", + "typescript": "^5.4.4", "unicode-11.0.0": "^0.7.8", - "unicode2latex": "^5.0.16", + "unicode2latex": "^6.0.4", "uri-templates": "^0.2.0", "util": "^0.12.5", "xml-parser": "^1.2.1", From fca3ad7565b27bd39050166d7d4fdda298a69230 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Sat, 6 Apr 2024 10:43:49 +0200 Subject: [PATCH 003/177] upgrades --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 71a37a07e3..4bca611bbe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -58,7 +58,7 @@ "zotero-plugin": "2.0.14" }, "devDependencies": { - "@retorquere/bibtex-parser": "^8.0.0", + "@retorquere/bibtex-parser": "^8.0.1", "@retorquere/zotero-sync": "^1.0.27", "@types/bluebird": "^3.5.42", "@types/lokijs": "^1.5.14", @@ -3564,9 +3564,9 @@ } }, "node_modules/@retorquere/bibtex-parser": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@retorquere/bibtex-parser/-/bibtex-parser-8.0.0.tgz", - "integrity": "sha512-/fQc/6K1QnXmt4fF6jK59nkdF9dlntFrH1vBP6YC3nl/gleZdIny20PRbI1fhBroBYQ0rJvxV9ZoaAI62eOqkg==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@retorquere/bibtex-parser/-/bibtex-parser-8.0.1.tgz", + "integrity": "sha512-AL8gQfQpC4jGBmtNMyuDgO/1nz0tN5zttXP0G9jJv9ZdTMHUXy/uLpzVRVUzLczKcLsvYr+cKfA3aa/Eg2qrnA==", "dev": true, "dependencies": { "@unified-latex/unified-latex-util-pegjs": "^1.7.1", diff --git a/package.json b/package.json index 458bfe6641..7c77d716ca 100644 --- a/package.json +++ b/package.json @@ -112,7 +112,7 @@ "zotero-plugin": "2.0.14" }, "devDependencies": { - "@retorquere/bibtex-parser": "^8.0.0", + "@retorquere/bibtex-parser": "^8.0.1", "@retorquere/zotero-sync": "^1.0.27", "@types/bluebird": "^3.5.42", "@types/lokijs": "^1.5.14", From c72f139c325b4dee56860f56efca401e07a77d14 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Sat, 6 Apr 2024 13:44:12 +0200 Subject: [PATCH 004/177] upgrades --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7c77d716ca..a53b9d79b6 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "xsubmodules": "git submodule update --init --recursive --remote && git submodule foreach git reset --hard && git submodule foreach git pull origin", "preupgrades": "npm-run-all -p --aggregate-output submodules ncu get-schema", "submodules": "./setup/submodules.py", - "ncu": "ncu -u && npm i", + "ncu": "ncu -u -x '*eslint*' && npm i", "get-schema": "./setup/item.py", "upgrades": "git add package.json package-lock.json submodules/* site/themes/relearn schema && git commit -m upgrades", "db": "npm run zipup-debug-bridge" From bbad60ab0d4cc4b4d34caf9fc3cc5ad8cef60ff5 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Sat, 6 Apr 2024 14:04:12 +0200 Subject: [PATCH 005/177] ncu --- package-lock.json | 2594 +++++++++++------------------ package.json | 2 +- site/content/exporting/unicode.md | 1216 +++++++------- 3 files changed, 1597 insertions(+), 2215 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4bca611bbe..3dc57970bc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -80,7 +80,7 @@ "dotenv": "^16.4.5", "ejs": "^3.1.9", "esbuild": "^0.20.2", - "eslint": "^9.0.0", + "eslint": "^8.57.0", "estrace": "^5.0.1", "eta": "^3.4.0", "fast-json-patch": "^3.1.1", @@ -150,85 +150,21 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", + "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" + "@babel/highlight": "^7.24.2", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/code-frame/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/code-frame/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/helper-string-parser": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", - "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", + "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", "engines": { "node": ">=6.9.0" } @@ -242,13 +178,14 @@ } }, "node_modules/@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", + "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" @@ -319,9 +256,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz", - "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.4.tgz", + "integrity": "sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==", "bin": { "parser": "bin/babel-parser.js" }, @@ -330,9 +267,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz", - "integrity": "sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.4.tgz", + "integrity": "sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==", "devOptional": true, "dependencies": { "regenerator-runtime": "^0.14.0" @@ -342,9 +279,9 @@ } }, "node_modules/@babel/runtime-corejs3": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.23.9.tgz", - "integrity": "sha512-oeOFTrYWdWXCvXGB5orvMTJ6gCZ9I6FBjR+M38iKNXCsPxr4xT0RTdg5uz1H7QP8pp74IzPtwritEr+JscqHXQ==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.24.4.tgz", + "integrity": "sha512-VOQOexSilscN24VEY810G/PqtpFvx/z6UqDIjIWbDe2368HhDLkYN5TYwaEz/+eRCUkhJ2WaNLLmQAlxzfWj4w==", "dependencies": { "core-js-pure": "^3.30.2", "regenerator-runtime": "^0.14.0" @@ -354,9 +291,9 @@ } }, "node_modules/@babel/types": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz", - "integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", + "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", "dependencies": { "@babel/helper-string-parser": "^7.23.4", "@babel/helper-validator-identifier": "^7.22.20", @@ -383,9 +320,9 @@ } }, "node_modules/@csstools/css-parser-algorithms": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.0.tgz", - "integrity": "sha512-YfEHq0eRH98ffb5/EsrrDspVWAuph6gDggAE74ZtjecsmyyWpW768hOyiONa8zwWGbIWYfa2Xp4tRTrpQQ00CQ==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.1.tgz", + "integrity": "sha512-ubEkAaTfVZa+WwGhs5jbo5Xfqpeaybr/RvWzvFxRs4jfq16wH8l8Ty/QEEpINxll4xhuGfdMbipRyz5QZh9+FA==", "dev": true, "funding": [ { @@ -401,13 +338,13 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-tokenizer": "^2.2.3" + "@csstools/css-tokenizer": "^2.2.4" } }, "node_modules/@csstools/css-tokenizer": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.3.tgz", - "integrity": "sha512-pp//EvZ9dUmGuGtG1p+n17gTHEOqu9jO+FiCUjNN3BDmyhdA2Jq9QsVeR7K8/2QCK17HSsioPlTW9ZkzoWb3Lg==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.4.tgz", + "integrity": "sha512-PuWRAewQLbDhGeTvFuq2oClaSCKPIBmHyIobCV39JHRYN0byDcUWJl5baPeNUcqrjtdMNqFooE0FGl31I3JOqw==", "dev": true, "funding": [ { @@ -424,9 +361,9 @@ } }, "node_modules/@csstools/media-query-list-parser": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.8.tgz", - "integrity": "sha512-DiD3vG5ciNzeuTEoh74S+JMjQDs50R3zlxHnBnfd04YYfA/kh2KiBCGhzqLxlJcNq+7yNQ3stuZZYLX6wK/U2g==", + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.9.tgz", + "integrity": "sha512-qqGuFfbn4rUmyOB0u8CVISIp5FfJ5GAR3mBrZ9/TKndHakdnm6pY0L/fbLcpPnrzwCyyTEZl1nUcXAYHEWneTA==", "dev": true, "funding": [ { @@ -442,14 +379,14 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.6.0", - "@csstools/css-tokenizer": "^2.2.3" + "@csstools/css-parser-algorithms": "^2.6.1", + "@csstools/css-tokenizer": "^2.2.4" } }, "node_modules/@csstools/selector-specificity": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.2.tgz", - "integrity": "sha512-RpHaZ1h9LE7aALeQXmXrJkRG84ZxIsctEN2biEUmFyKpzFM3zZ35eUMcIzZFsw/2olQE6v69+esEqU2f1MKycg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.3.tgz", + "integrity": "sha512-KEPNw4+WW5AVEIyzC80rTbWEUatTW2lXpN8+8ILC8PiPeWPjwUzrPZDIOZ2wwqDmeqOYTdSGyL3+vE5GC3FB3Q==", "dev": true, "funding": [ { @@ -468,19 +405,29 @@ "postcss-selector-parser": "^6.0.13" } }, + "node_modules/@dual-bundle/import-meta-resolve": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.0.0.tgz", + "integrity": "sha512-ZKXyJeFAzcpKM2kk8ipoGIPUqx9BX52omTGnfwjJvxOCaZTM2wtDK7zN0aIgPRbT9XYAlha0HtmZ+XKteuh0Gw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/@emnapi/core": { - "version": "0.45.0", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-0.45.0.tgz", - "integrity": "sha512-DPWjcUDQkCeEM4VnljEOEcXdAD7pp8zSZsgOujk/LGIwCXWbXJngin+MO4zbH429lzeC3WbYLGjE2MaUOwzpyw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.1.1.tgz", + "integrity": "sha512-eu4KjHfXg3I+UUR7vSuwZXpRo4c8h4Rtb5Lu2F7Z4JqJFl/eidquONEBiRs6viXKpWBC3BaJBy68xGJ2j56idw==", "optional": true, "dependencies": { "tslib": "^2.4.0" } }, "node_modules/@emnapi/runtime": { - "version": "0.45.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-0.45.0.tgz", - "integrity": "sha512-Txumi3td7J4A/xTTwlssKieHKTGl3j4A1tglBx72auZ49YK7ePY6XZricgIg9mnZT4xPfA+UPCUdnhRuEFDL+w==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.1.1.tgz", + "integrity": "sha512-3bfqkzuR1KLx57nZfjr2NLnFOobvyS0aTszaEGCGqmYMVDRaGvgIZbjGSV/MHSSmLgQ/b9JFHQ5xm5WRZYd+XQ==", "optional": true, "dependencies": { "tslib": "^2.4.0" @@ -877,14 +824,14 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.0.2.tgz", - "integrity": "sha512-wV19ZEGEMAC1eHgrS7UQPqsdEiCIbTKTasEfcXAigzoXICcqZSjBZEHlZwNVvKg6UBCjSlos84XiLqsRJnIcIg==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^10.0.1", - "globals": "^14.0.0", + "espree": "^9.6.0", + "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -892,7 +839,7 @@ "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -919,19 +866,19 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "node_modules/@eslint/js": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.0.0.tgz", - "integrity": "sha512-RThY/MnKrhubF6+s1JflwUjPEsnCEmYCWwqa/aRISKWNXGZ9epUwft4bUMM35SdKF9xvBrLydAM1RDHd1Z//ZQ==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.12.3.tgz", - "integrity": "sha512-jsNnTBlMWuTpDkeE3on7+dWJi0D6fdDfeANj/w7MpS8ztROCoLvIO2nG0CcFj+E4k8j4QrSTh4Oryi3i2G669g==", + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", + "@humanwhocodes/object-schema": "^2.0.2", "debug": "^4.3.1", "minimatch": "^3.0.5" }, @@ -1168,20 +1115,20 @@ } }, "node_modules/@napi-rs/wasm-runtime": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.1.1.tgz", - "integrity": "sha512-ATj9ua659JgrkICjJscaeZdmPr44cb/KFjNWuD0N6pux0SpzaM7+iOuuK11mAnQM2N9q0DT4REu6NkL8ZEhopw==", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.1.2.tgz", + "integrity": "sha512-8JuczewTFIZ/XIjHQ+YlQUydHvlKx2hkcxtuGwh+t/t5zWyZct6YG4+xjHcq8xyc/e7FmFwf42Zj2YgICwmlvA==", "optional": true, "dependencies": { - "@emnapi/core": "^0.45.0", - "@emnapi/runtime": "^0.45.0", + "@emnapi/core": "^1.1.0", + "@emnapi/runtime": "^1.1.0", "@tybys/wasm-util": "^0.8.1" } }, "node_modules/@node-rs/jieba": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@node-rs/jieba/-/jieba-1.9.2.tgz", - "integrity": "sha512-H7/Pv9RBEgzcxVAM4yg6L4G10ZoiqVnNcUCs01yV9XIRwLmShUkdthkTqG8heyx2dAMRua+kofd28JtDWBHMfA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@node-rs/jieba/-/jieba-1.10.0.tgz", + "integrity": "sha512-9oZMCvZVnrAMeWTSnEjJ0OSw7YcV4dJJKSioqq80oUNf3eYLGdEXsgYwCe1AYEMcfUfNVgvjznItJKrsoud0IA==", "optional": true, "engines": { "node": ">= 10" @@ -1191,26 +1138,26 @@ "url": "https://github.com/sponsors/Brooooooklyn" }, "optionalDependencies": { - "@node-rs/jieba-android-arm-eabi": "1.9.2", - "@node-rs/jieba-android-arm64": "1.9.2", - "@node-rs/jieba-darwin-arm64": "1.9.2", - "@node-rs/jieba-darwin-x64": "1.9.2", - "@node-rs/jieba-freebsd-x64": "1.9.2", - "@node-rs/jieba-linux-arm-gnueabihf": "1.9.2", - "@node-rs/jieba-linux-arm64-gnu": "1.9.2", - "@node-rs/jieba-linux-arm64-musl": "1.9.2", - "@node-rs/jieba-linux-x64-gnu": "1.9.2", - "@node-rs/jieba-linux-x64-musl": "1.9.2", - "@node-rs/jieba-wasm32-wasi": "1.9.2", - "@node-rs/jieba-win32-arm64-msvc": "1.9.2", - "@node-rs/jieba-win32-ia32-msvc": "1.9.2", - "@node-rs/jieba-win32-x64-msvc": "1.9.2" + "@node-rs/jieba-android-arm-eabi": "1.10.0", + "@node-rs/jieba-android-arm64": "1.10.0", + "@node-rs/jieba-darwin-arm64": "1.10.0", + "@node-rs/jieba-darwin-x64": "1.10.0", + "@node-rs/jieba-freebsd-x64": "1.10.0", + "@node-rs/jieba-linux-arm-gnueabihf": "1.10.0", + "@node-rs/jieba-linux-arm64-gnu": "1.10.0", + "@node-rs/jieba-linux-arm64-musl": "1.10.0", + "@node-rs/jieba-linux-x64-gnu": "1.10.0", + "@node-rs/jieba-linux-x64-musl": "1.10.0", + "@node-rs/jieba-wasm32-wasi": "1.10.0", + "@node-rs/jieba-win32-arm64-msvc": "1.10.0", + "@node-rs/jieba-win32-ia32-msvc": "1.10.0", + "@node-rs/jieba-win32-x64-msvc": "1.10.0" } }, "node_modules/@node-rs/jieba-android-arm-eabi": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@node-rs/jieba-android-arm-eabi/-/jieba-android-arm-eabi-1.9.2.tgz", - "integrity": "sha512-FbgUDCvek/KI4mJe5wqbbJi9kDE788YVvsA7DLTE0up+Tb/A7pNIJXq4Pg7zhsgHTVL7EfHHsyd89k+YoSU7Wg==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@node-rs/jieba-android-arm-eabi/-/jieba-android-arm-eabi-1.10.0.tgz", + "integrity": "sha512-bzusJSLHm7I0qL8aQXGLt7IQ51Px35yGGEcQ/Ps4SEt0AxRSJ2/rxNET/8mlwBpOCZ5xiKE3BOBRfQajiPiI3g==", "cpu": [ "arm" ], @@ -1223,9 +1170,9 @@ } }, "node_modules/@node-rs/jieba-android-arm64": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@node-rs/jieba-android-arm64/-/jieba-android-arm64-1.9.2.tgz", - "integrity": "sha512-o6cZz5APAUVBCTG9tNK3XEcLunjGo7Oon1N8+1EHOHPlx4Twzhn1msBtQ+VCgboHUOI+QgZzlY/sTXGfh8IuIA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@node-rs/jieba-android-arm64/-/jieba-android-arm64-1.10.0.tgz", + "integrity": "sha512-g89Oq5U2RPmtlvuQhjNj8YZc5Gq033ODb7Ot4Z/OdIHvg2WMxi2M1GQhcdKu60dO79/tazc53W6I8/y691DUfQ==", "cpu": [ "arm64" ], @@ -1238,9 +1185,9 @@ } }, "node_modules/@node-rs/jieba-darwin-arm64": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@node-rs/jieba-darwin-arm64/-/jieba-darwin-arm64-1.9.2.tgz", - "integrity": "sha512-68Pk5phmgn/k5w6nzZWYkDHwJ5wYagprVaSf/WgcPVucw9kAzVMZasGxXo2+Kqn2kMWhD7Dm2NT1TAromQq8Eg==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@node-rs/jieba-darwin-arm64/-/jieba-darwin-arm64-1.10.0.tgz", + "integrity": "sha512-IhR5r+XxFcfhVsF93zQ3uCJy8ndotRntXzoW/JCyKqOahUo/ITQRT6vTKHKMyD9xNmjl222OZonBSo2+mlI2fQ==", "cpu": [ "arm64" ], @@ -1253,9 +1200,9 @@ } }, "node_modules/@node-rs/jieba-darwin-x64": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@node-rs/jieba-darwin-x64/-/jieba-darwin-x64-1.9.2.tgz", - "integrity": "sha512-TXms+q4l7/0a7T+O9t5fQ0m6Qi+4XKgtaRmg089iYbvSp4JfX+XIg+ZLJG+9uc25oWpOgpt+z4bsz9rrHnW/6Q==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@node-rs/jieba-darwin-x64/-/jieba-darwin-x64-1.10.0.tgz", + "integrity": "sha512-MBIs8ixKY4FPnifdZ7eTx6ht85TXE4kFBK4c8A/VDAbnmzBzpEyuV7tHUA2wAdfR0muC9j7/5FB4kQGZgYfc8g==", "cpu": [ "x64" ], @@ -1268,9 +1215,9 @@ } }, "node_modules/@node-rs/jieba-freebsd-x64": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@node-rs/jieba-freebsd-x64/-/jieba-freebsd-x64-1.9.2.tgz", - "integrity": "sha512-U4p8PSm+1onheBJUKlEyP4VRE42UrH+gXDYMJlWiJDqriAjZLvA+MdF5xiqeppH0dWc/tQu/ECLoj1WXkJKfvg==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@node-rs/jieba-freebsd-x64/-/jieba-freebsd-x64-1.10.0.tgz", + "integrity": "sha512-MuY+1QEXONxo3I/uFLFju0/pSN5bzQORhJkIdP8CYv+jZaVB4Uz6rC7A5HrgjiAXOna6QsKlRgx2bYyHfaBUrA==", "cpu": [ "x64" ], @@ -1283,9 +1230,9 @@ } }, "node_modules/@node-rs/jieba-linux-arm-gnueabihf": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@node-rs/jieba-linux-arm-gnueabihf/-/jieba-linux-arm-gnueabihf-1.9.2.tgz", - "integrity": "sha512-pelyUy0uFzR7dsnleN8A+4yiNRIRQYFDufbOapP9qkgpEOSvJaD6zYOi3HDm4GdXD5jD0UFNEYMCbi2+Ed2zIg==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@node-rs/jieba-linux-arm-gnueabihf/-/jieba-linux-arm-gnueabihf-1.10.0.tgz", + "integrity": "sha512-QfSBnwISdVuTqsi4iThAO1LSbKRSqSsIWiIJgCduhYsTDDiG9+pHyfiZtcTwSf73SDXHZ400QuBNONWLQ/dSag==", "cpu": [ "arm" ], @@ -1298,9 +1245,9 @@ } }, "node_modules/@node-rs/jieba-linux-arm64-gnu": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@node-rs/jieba-linux-arm64-gnu/-/jieba-linux-arm64-gnu-1.9.2.tgz", - "integrity": "sha512-qgrEyYbzXyqoIcl2iLXMvIv4PC1Z84O5TGCGKwGibblHAOpWIVQzkquDhty/aE9Ju1OSJiNZGtE9ISlJXB/PJA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@node-rs/jieba-linux-arm64-gnu/-/jieba-linux-arm64-gnu-1.10.0.tgz", + "integrity": "sha512-vzA2tX/6dReEd/7tZ9927glWQmKDausM6R9S5CqZx4BA4NSaWAK0xFdWsz0K7np459FXqNavLdNB5FVFJb4zzA==", "cpu": [ "arm64" ], @@ -1313,9 +1260,9 @@ } }, "node_modules/@node-rs/jieba-linux-arm64-musl": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@node-rs/jieba-linux-arm64-musl/-/jieba-linux-arm64-musl-1.9.2.tgz", - "integrity": "sha512-FMl9EYCJSKCfJb8rrk+9mmi44SwDyNCMLvxMzG/va59D0BRItmm4EP9Zd2QoKnGawV6Bw4BAXIrNhSg9gWedxg==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@node-rs/jieba-linux-arm64-musl/-/jieba-linux-arm64-musl-1.10.0.tgz", + "integrity": "sha512-gxqoAVOQsn9sgYK6mFO9dsMZ/yOMvVecLZW5rGvLErjiugVvYUlESXIvCqxp2GSws8RtTqJj6p9u/lBmCCuvaw==", "cpu": [ "arm64" ], @@ -1328,9 +1275,9 @@ } }, "node_modules/@node-rs/jieba-linux-x64-gnu": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@node-rs/jieba-linux-x64-gnu/-/jieba-linux-x64-gnu-1.9.2.tgz", - "integrity": "sha512-+7wcz5+3HzOH8+PbNwOPuelTo6ik5jgrz8SFbd+JL6sZLap2pjpKWol5nJyNYNv90yRq1A6p8TrhFXCtVZujFA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@node-rs/jieba-linux-x64-gnu/-/jieba-linux-x64-gnu-1.10.0.tgz", + "integrity": "sha512-rS5Shs8JITxJjFIjoIZ5a9O+GO21TJgKu03g2qwFE3QaN5ZOvXtz+/AqqyfT4GmmMhCujD83AGqfOGXDmItF9w==", "cpu": [ "x64" ], @@ -1343,9 +1290,9 @@ } }, "node_modules/@node-rs/jieba-linux-x64-musl": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@node-rs/jieba-linux-x64-musl/-/jieba-linux-x64-musl-1.9.2.tgz", - "integrity": "sha512-ims1jOq99zTvcwcUXKuD+WT36KHHVNTq9Fm663YzMMBO+5sqLleQtQkZgbh0BHJI25jvW9IrBCvuS1ZwKZ6kOA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@node-rs/jieba-linux-x64-musl/-/jieba-linux-x64-musl-1.10.0.tgz", + "integrity": "sha512-BvSiF2rR8Birh2oEVHcYwq0WGC1cegkEdddWsPrrSmpKmukJE2zyjcxaOOggq2apb8fIRsjyeeUh6X3R5AgjvA==", "cpu": [ "x64" ], @@ -1358,9 +1305,9 @@ } }, "node_modules/@node-rs/jieba-wasm32-wasi": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@node-rs/jieba-wasm32-wasi/-/jieba-wasm32-wasi-1.9.2.tgz", - "integrity": "sha512-h/lWDJCYlsH3VUNWBCO2exite7VDPgjpOmaQgTQ6aNI5x8rR3NEkyXfmy/yWIev63tdMr9nD3sXw38QQp4ddIA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@node-rs/jieba-wasm32-wasi/-/jieba-wasm32-wasi-1.10.0.tgz", + "integrity": "sha512-EzeAAbRrFTdYw61rd8Mfwdp/fA21d58z9vLY06CDbI+dqANfMFn1IUdwzKWi8S5J/MRhvbzonbbh3yHlz6F43Q==", "cpu": [ "wasm32" ], @@ -1373,9 +1320,9 @@ } }, "node_modules/@node-rs/jieba-win32-arm64-msvc": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@node-rs/jieba-win32-arm64-msvc/-/jieba-win32-arm64-msvc-1.9.2.tgz", - "integrity": "sha512-a3BkMcvW9sedSA1XlYvGEQSNQQrK4kUMULKTXmqboLjFbwI9v6flpDCiJyw2pXYs+1WT6XjTHvEyVsoGCVMRlQ==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@node-rs/jieba-win32-arm64-msvc/-/jieba-win32-arm64-msvc-1.10.0.tgz", + "integrity": "sha512-eZjRLFUAvq1/E5+xXfJRqIB99Gu6BA+6+EXf/rCLuvEjXrDQuUunhmrSoOL5MjmUXTtazS+bXq9PXV5EFYyOPw==", "cpu": [ "arm64" ], @@ -1388,9 +1335,9 @@ } }, "node_modules/@node-rs/jieba-win32-ia32-msvc": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@node-rs/jieba-win32-ia32-msvc/-/jieba-win32-ia32-msvc-1.9.2.tgz", - "integrity": "sha512-k8xPkEOMJM3ic4UzvmvKELjPQsIFSo7mw1wx4tNrUN5mu5ANIhk1Fq0zXOcTbpIe7jHPsWaB5jYtBeeJ0h09iA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@node-rs/jieba-win32-ia32-msvc/-/jieba-win32-ia32-msvc-1.10.0.tgz", + "integrity": "sha512-DrfbeCN7UcLN+MiocZabWo74XZIjfpQsJ/WMOItZzVbU2gDcJSkSyAhML9+OqId66DhGCMFFlGinocElM8iIAw==", "cpu": [ "ia32" ], @@ -1403,9 +1350,9 @@ } }, "node_modules/@node-rs/jieba-win32-x64-msvc": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@node-rs/jieba-win32-x64-msvc/-/jieba-win32-x64-msvc-1.9.2.tgz", - "integrity": "sha512-wIseuWUK+WdikhMFPLvr80D0I4wQJSdFsRIljiUhKwnNQESG20zIxSYE1qy7BNBd7s8fAn1BC6PGeg7S/2KliQ==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@node-rs/jieba-win32-x64-msvc/-/jieba-win32-x64-msvc-1.10.0.tgz", + "integrity": "sha512-RjBkBmjjHmj+bofiq5/han8wzbCkDk24OAPJ+YX8PX20GFSHmdjCiWapv3AooN8/RiKqlBfgodjS1JUngNWo5g==", "cpu": [ "x64" ], @@ -1623,9 +1570,9 @@ } }, "node_modules/@putout/babel": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@putout/babel/-/babel-2.2.0.tgz", - "integrity": "sha512-SSZFFiWrszC6x5J4anX2IrMKSipIL2IwrZHmjXFAThTwrlVmx5H8jcQbKhhkMz9bXMFRtKIlmXp/Zy5VD9tEDg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@putout/babel/-/babel-2.4.0.tgz", + "integrity": "sha512-o2nsxmyOI206J4NdyCRg78pwhBRLGvBp/UktOG3XZyxGGOwKYS/+zl24004ZUPBF0xY+VwxyPrq4WN1kIhv42A==", "dev": true, "engines": { "node": ">=16" @@ -1648,6 +1595,31 @@ "node": ">=18" } }, + "node_modules/@putout/cli-cache/node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@putout/cli-cache/node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/@putout/cli-choose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@putout/cli-choose/-/cli-choose-2.0.0.tgz", @@ -1790,9 +1762,9 @@ } }, "node_modules/@putout/engine-parser": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/@putout/engine-parser/-/engine-parser-10.1.0.tgz", - "integrity": "sha512-5zyOJrbdFMwCJHd38nY4KV/Ttb5jVhDZZ+xedZROPLeJIRCY+KiZnt+qK4l0O6EugHnlhyKhe24VJOp48Xs9bA==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@putout/engine-parser/-/engine-parser-10.2.0.tgz", + "integrity": "sha512-Ysf7WPo0RrfaGzsfsDGWqhic2QtObv3j3u3KnBBrGLQEicc0sBRuCHoZgkrKTUAPy9ovlxB1wJQDPaH/4VHK6Q==", "dev": true, "dependencies": { "@putout/babel": "^2.0.0", @@ -1918,20 +1890,32 @@ } }, "node_modules/@putout/formatter-dump": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@putout/formatter-dump/-/formatter-dump-4.0.1.tgz", - "integrity": "sha512-jTuobQDleBZzfMIq0Ckrh++g7S6DOjHfK537uqgM/BhARtW1qH/SoLZfONRxxR6Rz4nVvRH6D/nsNnh4/EO00Q==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@putout/formatter-dump/-/formatter-dump-5.0.0.tgz", + "integrity": "sha512-txlOnphn2pfvbkyYmKbw+zAc+T/Q01958zy0e5jR+AQcWCGyCgjBAeVMh+pUBZ7+Zyl/CAnou0zG87t7hTYA9Q==", "dev": true, "dependencies": { "@putout/formatter-json": "^2.0.0", - "chalk": "^4.0.0", + "chalk": "^5.3.0", "table": "^6.0.1" }, "engines": { - "node": ">=16" + "node": ">=18" }, "peerDependencies": { - "putout": ">=25" + "putout": ">=35" + } + }, + "node_modules/@putout/formatter-dump/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/@putout/formatter-frame": { @@ -1974,12 +1958,12 @@ } }, "node_modules/@putout/formatter-memory": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@putout/formatter-memory/-/formatter-memory-4.0.0.tgz", - "integrity": "sha512-ldjb1cWyeMPbrf/NUnaOIioWTKJJBSwqpkY5UNWt8vdlWb+9BJYGnD/uqbsrML0uKlPEZ46mN/Fb2JGhDEEivw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@putout/formatter-memory/-/formatter-memory-4.0.1.tgz", + "integrity": "sha512-S3ctALHkGQRbr6zJ4kPoo7ZNBnfxXZi66XTMc/Md8k5enS0H1ATNKcwDNdA06CB0QrC5P866VX6wPRB1PHr4Mg==", "dev": true, "dependencies": { - "@putout/formatter-dump": "^4.0.0", + "@putout/formatter-dump": "^5.0.0", "chalk": "^5.3.0", "cli-progress": "^3.8.2", "format-io": "^2.0.0", @@ -2021,12 +2005,12 @@ } }, "node_modules/@putout/formatter-progress-bar": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@putout/formatter-progress-bar/-/formatter-progress-bar-4.0.0.tgz", - "integrity": "sha512-M2jsFJyXgef0ZAPc1KULAOFYB5Q0fqL06oGqRvCME2D/cimCyBG6kRUophXWscgqwUf/YQTSWjGEjfbAcNKccw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@putout/formatter-progress-bar/-/formatter-progress-bar-4.0.1.tgz", + "integrity": "sha512-sqnCwTPliKb4ln8Ss8h/KVx539u4qDc7cqCjSzQda2zQO+rfBAMhOS4Km4MUnbglOVw89JM5fbQ25x2tRjFpmQ==", "dev": true, "dependencies": { - "@putout/formatter-dump": "^4.0.0", + "@putout/formatter-dump": "^5.0.0", "chalk": "^5.3.0", "cli-progress": "^3.8.2", "once": "^1.4.0" @@ -2050,35 +2034,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@putout/formatter-progress/node_modules/@putout/formatter-dump": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@putout/formatter-dump/-/formatter-dump-5.0.0.tgz", - "integrity": "sha512-txlOnphn2pfvbkyYmKbw+zAc+T/Q01958zy0e5jR+AQcWCGyCgjBAeVMh+pUBZ7+Zyl/CAnou0zG87t7hTYA9Q==", - "dev": true, - "dependencies": { - "@putout/formatter-json": "^2.0.0", - "chalk": "^5.3.0", - "table": "^6.0.1" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "putout": ">=35" - } - }, - "node_modules/@putout/formatter-progress/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "dev": true, - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/@putout/formatter-stream": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/@putout/formatter-stream/-/formatter-stream-5.0.0.tgz", @@ -2108,12 +2063,12 @@ } }, "node_modules/@putout/formatter-time": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@putout/formatter-time/-/formatter-time-3.0.0.tgz", - "integrity": "sha512-zQ9/P9SzQJIyZ//+CUKGO5tST3iH0vn7wqpgq0DP/On4Ljw7fUrHuhofOE72MZQZOYbQRvYnjF9qpsygB7XOnQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@putout/formatter-time/-/formatter-time-3.0.1.tgz", + "integrity": "sha512-qxxgiinxbf9BCdz7kSKiKZ/lJtfQtU1IpOB3iHCDSVfBn7gAJ2Tk5m6Dwc5wC6Cqe+1aO1pjR/JTp9skCXKf9A==", "dev": true, "dependencies": { - "@putout/formatter-dump": "^4.0.0", + "@putout/formatter-dump": "^5.0.0", "chalk": "^5.3.0", "cli-progress": "^3.8.2", "format-io": "^2.0.0", @@ -2560,9 +2515,9 @@ } }, "node_modules/@putout/plugin-declare": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@putout/plugin-declare/-/plugin-declare-3.0.0.tgz", - "integrity": "sha512-pw0j3fybEVYnNP7tQeOLQe+D2j1yNYPjQruYcb15QfNOjy5aluL3GpvlfmSoYyJfYlcykh8S9/WqEzOCAaXklA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@putout/plugin-declare/-/plugin-declare-3.1.0.tgz", + "integrity": "sha512-Jk+lxWiSUU98ZF0Gs8RkzbgNtpJp9ZkfM0B10VUnzIOpkwX0nzY7t5tuQLbKCmyc7ZInd/T4Usuogy8ZhKdu7Q==", "dev": true, "engines": { "node": ">=18" @@ -2596,9 +2551,9 @@ } }, "node_modules/@putout/plugin-eslint": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@putout/plugin-eslint/-/plugin-eslint-8.0.0.tgz", - "integrity": "sha512-efaDVpS+u3bg3+2Q5DSisoUm2of6YHpa3sFAm3i8IaX5HotEj7Rget3By3jnZ7bp644iEFgC10HPKM+xA9MsGQ==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@putout/plugin-eslint/-/plugin-eslint-8.0.1.tgz", + "integrity": "sha512-nsmqIgQhxbmq0gWcCQdzpvc+GuxwluQQYjw5jdp2h3rW84/IAaUai5TOyKZh3/zPNYw1Zg6S0lKlXzrZ3mYScQ==", "dev": true, "engines": { "node": ">=18" @@ -2663,9 +2618,9 @@ } }, "node_modules/@putout/plugin-github": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/@putout/plugin-github/-/plugin-github-12.0.2.tgz", - "integrity": "sha512-B63nUwiofKmXmRjbPQ3xczNdItWWFGc3rWOZAenekckT36AHRDhypvK7YCiaWWHKIpr+MSBmDKumqpm4neDlCA==", + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/@putout/plugin-github/-/plugin-github-12.1.1.tgz", + "integrity": "sha512-6AkvFK9DuaIxjia1NiXQxUgwSUSPIQxbanY+otTR1VfWaF2nh5hbDZEEPcKkq1QP//9tPlGMVkjxXFvAIC3f0A==", "dev": true, "engines": { "node": ">=18" @@ -2795,9 +2750,9 @@ } }, "node_modules/@putout/plugin-nodejs": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/@putout/plugin-nodejs/-/plugin-nodejs-11.0.0.tgz", - "integrity": "sha512-IqBwhKeo3buqkO01o/awTDRnYLMHmb5F7y3K+A5JvY3MsZTBvhW+gjnvIcvjj8bKFxiUBBI8PEVOc49GsdfhSg==", + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/@putout/plugin-nodejs/-/plugin-nodejs-11.5.0.tgz", + "integrity": "sha512-F/Qfi3xMXI2D9IQgLNxwtg0U9JOxIfYJtkN8GZjjVPvki+p5kM2Lhdg3RFv6ArunyupZB3dsmdchYWw1uoYSGQ==", "dev": true, "dependencies": { "just-camel-case": "^6.2.0" @@ -3309,10 +3264,13 @@ } }, "node_modules/@putout/plugin-sort-imports-by-specifiers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@putout/plugin-sort-imports-by-specifiers/-/plugin-sort-imports-by-specifiers-1.0.0.tgz", - "integrity": "sha512-XJ1vZ+942dMfQpZhBEfHl8eNExTXBPPRfkJ6hTtc2wpKHOboyruxcXZZ2akquAmvjpnIzIYwMCUXLL+W8R6wZg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@putout/plugin-sort-imports-by-specifiers/-/plugin-sort-imports-by-specifiers-1.1.0.tgz", + "integrity": "sha512-4LUqfe7NIBjmZe7LzjlYBAyFjlgEPUYASFd+fV9oe/f5g3jF0A/uM3BrlqZI+twmNQNpkIlo9orVALVqps+K6Q==", "dev": true, + "dependencies": { + "parse-import-specifiers": "^1.0.3" + }, "engines": { "node": ">=18" }, @@ -3405,9 +3363,9 @@ } }, "node_modules/@putout/printer": { - "version": "8.6.1", - "resolved": "https://registry.npmjs.org/@putout/printer/-/printer-8.6.1.tgz", - "integrity": "sha512-iQyvComqb1mZqoot+Vj2n23yz3a26ZsYhmq2mWZHULOwt1LN7ZJfe6L9APKezDn4YPbbDcLkVFu4qP1U95ZKzg==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/@putout/printer/-/printer-8.10.0.tgz", + "integrity": "sha512-WkJRvGF53BaXY0uAUb4CcPgkUhiiC4+u2tCsUuJXk34gSBpmzS9/+JyO9F7B/QNCq5Ymmzdd7nVsvPunN3R5AQ==", "dev": true, "dependencies": { "@putout/babel": "^2.0.0", @@ -3513,10 +3471,58 @@ "node": ">=18" } }, + "node_modules/@putout/processor-markdown/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@putout/processor-markdown/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@putout/processor-markdown/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/@putout/processor-yaml": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@putout/processor-yaml/-/processor-yaml-8.0.0.tgz", - "integrity": "sha512-OAHZh/fPq6hQ1XnA4kakxOlKfToh9RMIWGanCb3O/xSMITrrpz5M9aiyiD3KI+4Ls2FV0gTnazyQLvxpjd/YXw==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@putout/processor-yaml/-/processor-yaml-8.0.1.tgz", + "integrity": "sha512-D3rkwtQ55o9ZqmdZS/EF3TsUC6uM/Hbb8fsR4iQs4ycEW8+ZWj7mev9476fTzARbrAylOBw6fWw9qwZrlI8lJA==", "dev": true, "dependencies": { "@putout/operator-json": "^2.0.0", @@ -3535,15 +3541,15 @@ "dev": true }, "node_modules/@putout/recast": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@putout/recast/-/recast-1.13.0.tgz", - "integrity": "sha512-UILta9MHeFmlxs19SC/c3ivPZ6SEhoeYDxRXN/B44SgG8RG7wlLHvEy/Np0kT8Q2vbSot7ee788IaWJUolCXZA==", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/@putout/recast/-/recast-1.14.0.tgz", + "integrity": "sha512-8phu29K7AwvOrNlyI4mrvxcgndk6dQyB48KpmMbPvS08cxTg9KQAfF4gEJlt2ojHSuf3i/VBKgopHxd3HhP9Cg==", "dev": true, "dependencies": { - "assert": "^2.0.0", "ast-types": "^0.16.1", "esprima": "~4.0.0", "source-map": "~0.6.1", + "tiny-invariant": "^1.3.3", "tslib": "^2.0.1" }, "engines": { @@ -3702,6 +3708,30 @@ "url": "https://opencollective.com/stdlib" } }, + "node_modules/@stdlib/error-tools-fmtprodmsg": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@stdlib/error-tools-fmtprodmsg/-/error-tools-fmtprodmsg-0.2.1.tgz", + "integrity": "sha512-SaxvGeGfWfda/O3rTNGRGBzAL9gsY/yd8n1hXwzOl/2aUHf8nxcf6Fz6/BQ5PguT0GiBkca19XEhHZZHxX3X/g==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/stdlib" + } + }, "node_modules/@stdlib/string-base-format-interpolate": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/@stdlib/string-base-format-interpolate/-/string-base-format-interpolate-0.2.1.tgz", @@ -3830,9 +3860,9 @@ } }, "node_modules/@stdlib/utils-define-property": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@stdlib/utils-define-property/-/utils-define-property-0.2.1.tgz", - "integrity": "sha512-1xDIWXS+Gq+dCU/codMhVj8HDNDqv9SEqQYqW8/mECdaMuQ1SrUnbMe2VK5n0J4+he+BPiWnM5mgeswm5n5mNQ==", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@stdlib/utils-define-property/-/utils-define-property-0.2.3.tgz", + "integrity": "sha512-+EzWImaQR/6XNFbXIITFi3PLQGTbKVIWSYxJfHXAuTtibAMnhHOWvEzKOumVe/Q4Cdsrc3/PIkpjJzliqAX9AA==", "os": [ "aix", "darwin", @@ -3845,6 +3875,7 @@ "windows" ], "dependencies": { + "@stdlib/error-tools-fmtprodmsg": "^0.2.1", "@stdlib/string-format": "^0.2.1" }, "engines": { @@ -3914,9 +3945,9 @@ } }, "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", @@ -3964,9 +3995,9 @@ "dev": true }, "node_modules/@types/estree-jsx": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.4.tgz", - "integrity": "sha512-5idy3hvI9lAMqsyilBM+N+boaCf1MgoefbDxN6KEO5aK17TOHwFAYT9sjxzeKAiIWRUBgLxmZ9mPcnzZXtTcRQ==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", "dev": true, "dependencies": { "@types/estree": "*" @@ -4069,10 +4100,71 @@ "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", "dev": true }, - "node_modules/@typescript-eslint/scope-manager": { + "node_modules/@typescript-eslint/eslint-plugin": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", - "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", + "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", + "dependencies": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/type-utils": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", + "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", + "dependencies": { + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", "dependencies": { "@typescript-eslint/types": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0" @@ -4085,6 +4177,32 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript-eslint/type-utils": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", + "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", + "dependencies": { + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/@typescript-eslint/types": { "version": "6.21.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", @@ -4146,6 +4264,30 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@typescript-eslint/utils": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", + "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "semver": "^7.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, "node_modules/@typescript-eslint/visitor-keys": { "version": "6.21.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", @@ -4216,31 +4358,6 @@ "unified": "^10.1.2" } }, - "node_modules/@unified-latex/unified-latex-util-replace/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", - "dev": true - }, - "node_modules/@unified-latex/unified-latex-util-replace/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/@unified-latex/unified-latex-util-split": { "version": "1.7.1", "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-split/-/unified-latex-util-split-1.7.1.tgz", @@ -4263,31 +4380,6 @@ "unified": "^10.1.2" } }, - "node_modules/@unified-latex/unified-latex-util-trim/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", - "dev": true - }, - "node_modules/@unified-latex/unified-latex-util-trim/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/@unified-latex/unified-latex-util-visit": { "version": "1.7.1", "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-visit/-/unified-latex-util-visit-1.7.1.tgz", @@ -4503,16 +4595,16 @@ } }, "node_modules/archiver-utils/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", + "jackspeak": "^2.3.6", "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" }, "bin": { "glob": "dist/esm/bin.mjs" @@ -4524,22 +4616,10 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/archiver-utils/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/archiver-utils/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -4551,36 +4631,13 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/archiver-utils/node_modules/readable-stream": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", - "dev": true, - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/archiver/node_modules/readable-stream": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", + "node_modules/archiver-utils/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", "dev": true, - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=16 || 14 >=14.17" } }, "node_modules/are-we-there-yet": { @@ -4596,6 +4653,20 @@ "node": ">=10" } }, + "node_modules/are-we-there-yet/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "optional": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/arg": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/arg/-/arg-1.0.0.tgz", @@ -5001,9 +5072,9 @@ "dev": true }, "node_modules/bare-events": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.2.0.tgz", - "integrity": "sha512-Yyyqff4PIFfSuthCZqLlPISTWHmnQxoPuAvkmgzsJEmG3CesdIv6Xweayl0JkCZJSB2yYIdJyEz97tpxNhgjbg==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.2.2.tgz", + "integrity": "sha512-h7z00dWdG0PYOQEvChhOSWvOfkIKsdZGkWr083FgN/HyoQuebSew/cgirYqh9SCuy/hRvxc5Vy6Fw8xAmYHLkQ==", "optional": true }, "node_modules/base": { @@ -5131,6 +5202,20 @@ "ieee754": "^1.1.13" } }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/blinkdb": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/blinkdb/-/blinkdb-0.14.0.tgz", @@ -5494,6 +5579,14 @@ "node": ">=4" } }, + "node_modules/clipboardy/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/clipboardy/node_modules/lru-cache": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", @@ -5659,46 +5752,18 @@ "node": ">= 14" } }, - "node_modules/compress-commons/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "node_modules/compromise": { + "version": "14.13.0", + "resolved": "https://registry.npmjs.org/compromise/-/compromise-14.13.0.tgz", + "integrity": "sha512-NqGgcBTRF7Zs3kBWJjKWoYdYTu0tZRcR4yKIA6Ve3KxpD9tgkbDHiVnFrkNYMt26jScrfKPGfVVkGaW++gq4VQ==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "efrt": "2.7.0", + "grad-school": "0.0.5", + "suffix-thumb": "5.0.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/compress-commons/node_modules/readable-stream": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", - "dev": true, - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/compromise": { - "version": "14.13.0", - "resolved": "https://registry.npmjs.org/compromise/-/compromise-14.13.0.tgz", - "integrity": "sha512-NqGgcBTRF7Zs3kBWJjKWoYdYTu0tZRcR4yKIA6Ve3KxpD9tgkbDHiVnFrkNYMt26jScrfKPGfVVkGaW++gq4VQ==", - "dev": true, - "dependencies": { - "efrt": "2.7.0", - "grad-school": "0.0.5", - "suffix-thumb": "5.0.2" - }, - "engines": { - "node": ">=12.0.0" + "engines": { + "node": ">=12.0.0" } }, "node_modules/concat-map": { @@ -5738,9 +5803,9 @@ "hasInstallScript": true }, "node_modules/core-js-pure": { - "version": "3.36.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.36.0.tgz", - "integrity": "sha512-cN28qmhRNgbMZZMc/RFu5w8pK9VJzpb2rJVR/lHuZJKwmXnoWOpXmMkxqBB514igkp1Hu8WGROsiOAzUcKdHOQ==", + "version": "3.36.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.36.1.tgz", + "integrity": "sha512-NXCvHvSVYSrewP0L5OhltzXeWFJLo2AL2TYnj6iLV3Bw8mM62wAQMNgUCRI6EBu6hVVpbCxmOPlxh1Ikw2PfUA==", "hasInstallScript": true, "funding": { "type": "opencollective", @@ -5802,22 +5867,6 @@ "node": ">= 14" } }, - "node_modules/crc32-stream/node_modules/readable-stream": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", - "dev": true, - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, "node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", @@ -6115,9 +6164,9 @@ } }, "node_modules/detect-libc": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", - "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", "optional": true, "engines": { "node": ">=8" @@ -6515,36 +6564,40 @@ } }, "node_modules/eslint": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.0.0.tgz", - "integrity": "sha512-IMryZ5SudxzQvuod6rUdIUz29qFItWx281VhtFVc2Psy/ZhlCeD/5DT6lBIJ4H3G+iamGJoTln1v+QSuPw0p7Q==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^3.0.2", - "@eslint/js": "9.0.0", - "@humanwhocodes/config-array": "^0.12.3", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", + "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.0.1", - "eslint-visitor-keys": "^4.0.0", - "espree": "^10.0.1", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", + "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", "glob-parent": "^6.0.2", + "globals": "^13.19.0", "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", @@ -6558,7 +6611,7 @@ "eslint": "bin/eslint.js" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -6606,6 +6659,63 @@ "ms": "^2.1.1" } }, + "node_modules/eslint-plugin-import": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "dependencies": { + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/eslint-plugin-prefer-arrow": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/eslint-plugin-prefer-arrow/-/eslint-plugin-prefer-arrow-1.2.3.tgz", @@ -6615,15 +6725,15 @@ } }, "node_modules/eslint-scope": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.1.tgz", - "integrity": "sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -6655,17 +6765,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", - "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, "node_modules/eslint/node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -6748,27 +6847,16 @@ } }, "node_modules/espree": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.0.1.tgz", - "integrity": "sha512-MWkrWZbJsL2UwnjxTX3gG8FneachS/Mwg7tdGXce011sJd5b0JG54vat5KHnfSBODZ3Wvzd2WnjxyzsRoVv+ww==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dependencies": { - "acorn": "^8.11.3", + "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.0.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "eslint-visitor-keys": "^3.4.1" }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", - "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -6907,6 +6995,14 @@ "which": "^1.2.9" } }, + "node_modules/execa/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/execa/node_modules/lru-cache": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", @@ -7281,14 +7377,14 @@ } }, "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dependencies": { - "flat-cache": "^4.0.0" + "flat-cache": "^3.0.4" }, "engines": { - "node": ">=16.0.0" + "node": "^10.12.0 || >=12.0.0" } }, "node_modules/file-path-filter": { @@ -7457,15 +7553,49 @@ } }, "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dependencies": { "flatted": "^3.2.9", - "keyv": "^4.5.4" + "keyv": "^4.5.3", + "rimraf": "^3.0.2" }, "engines": { - "node": ">=16" + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flat-cache/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/flat-cache/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/flatted": { @@ -7907,11 +8037,14 @@ } }, "node_modules/globals": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dependencies": { + "type-fest": "^0.20.2" + }, "engines": { - "node": ">=18" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -8243,9 +8376,9 @@ "integrity": "sha512-2AtBBJRrZ8WvhB1eDgTjW2TwVy1lat9FJW+XvVX836gsKi6qlhwaVG2jQZjbJAFr81/UW+6ABJSz/QOpeqgmuQ==" }, "node_modules/http-link-header": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-link-header/-/http-link-header-1.1.1.tgz", - "integrity": "sha512-mW3N/rTYpCn99s1do0zx6nzFZSwLH9HGfUM4ZqLWJ16ylmYaC2v5eYGqrNTQlByx8AzUgGI+V/32gXPugs1+Sw==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/http-link-header/-/http-link-header-1.1.3.tgz", + "integrity": "sha512-3cZ0SRL8fb9MUlU3mKM61FcQvPfXx2dBrZW3Vbg5CXa8jFlK8OaEpePenLe1oEXQduhz8b0QjsqfS59QP4AJDQ==", "dev": true, "engines": { "node": ">=6.0.0" @@ -8852,11 +8985,15 @@ } }, "node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-string": { @@ -9198,9 +9335,9 @@ } }, "node_modules/known-css-properties": { - "version": "0.29.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz", - "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==", + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.30.0.tgz", + "integrity": "sha512-VSWXYUnsPu9+WYKkfmJyLKtIvaRJi1kXUqVmBACORXZQxT5oZDsoZ2vQP+bQFDnWtpI/4eq3MLoRMjI2fnLzTQ==", "dev": true }, "node_modules/kuromoji": { @@ -11497,13 +11634,13 @@ } }, "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -11740,9 +11877,9 @@ } }, "node_modules/parse-import-specifiers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-import-specifiers/-/parse-import-specifiers-1.0.2.tgz", - "integrity": "sha512-MzJKeFIsoY0cTv/Y41TZipso3aYMz4+jpI1jCPhA9os6McI1cUUhI88WtmzdZ2ghfhuZ+1YF8lzx29eIhMexlA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/parse-import-specifiers/-/parse-import-specifiers-1.0.3.tgz", + "integrity": "sha512-jNtWL2DinOHUGnFEzeAyCJhacxwFkLzPnR3Foy3t2mOTIEgzZ3aaOakPw0PvoLaPZUy64CWYuhVFa/QkEMLJhA==", "dev": true, "engines": { "node": ">=16" @@ -11826,11 +11963,11 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", + "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", "dependencies": { - "lru-cache": "^9.1.1 || ^10.0.0", + "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { @@ -11898,13 +12035,12 @@ "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "node_modules/picomatch": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.1.tgz", - "integrity": "sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "dev": true, "engines": { "node": ">=12" @@ -12028,9 +12164,9 @@ } }, "node_modules/postcss": { - "version": "8.4.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", - "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "dev": true, "funding": [ { @@ -12049,7 +12185,7 @@ "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "source-map-js": "^1.2.0" }, "engines": { "node": "^10 || ^12 || >=14" @@ -12088,9 +12224,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.15", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", - "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", "dev": true, "dependencies": { "cssesc": "^3.0.0", @@ -12499,23 +12635,6 @@ "node": ">=18" } }, - "node_modules/putout/node_modules/@putout/formatter-dump": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@putout/formatter-dump/-/formatter-dump-5.0.0.tgz", - "integrity": "sha512-txlOnphn2pfvbkyYmKbw+zAc+T/Q01958zy0e5jR+AQcWCGyCgjBAeVMh+pUBZ7+Zyl/CAnou0zG87t7hTYA9Q==", - "dev": true, - "dependencies": { - "@putout/formatter-json": "^2.0.0", - "chalk": "^5.3.0", - "table": "^6.0.1" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "putout": ">=35" - } - }, "node_modules/putout/node_modules/chalk": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", @@ -12591,16 +12710,19 @@ } }, "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", + "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", + "dev": true, "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, "engines": { - "node": ">= 6" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/readdir-glob": { @@ -12756,25 +12878,6 @@ "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", "dev": true }, - "node_modules/remark-lint-blockquote-indentation/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/remark-lint-blockquote-indentation/node_modules/unist-util-visit": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", @@ -12836,25 +12939,6 @@ "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", "dev": true }, - "node_modules/remark-lint-checkbox-character-style/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/remark-lint-checkbox-character-style/node_modules/unist-util-visit": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", @@ -12917,25 +13001,6 @@ "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", "dev": true }, - "node_modules/remark-lint-code-block-style/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/remark-lint-code-block-style/node_modules/unist-util-visit": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", @@ -12997,25 +13062,6 @@ "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", "dev": true }, - "node_modules/remark-lint-emphasis-marker/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/remark-lint-emphasis-marker/node_modules/unist-util-visit": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", @@ -13077,25 +13123,6 @@ "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", "dev": true }, - "node_modules/remark-lint-fenced-code-marker/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/remark-lint-fenced-code-marker/node_modules/unist-util-visit": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", @@ -13158,25 +13185,6 @@ "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", "dev": true }, - "node_modules/remark-lint-heading-style/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/remark-lint-heading-style/node_modules/unist-util-visit": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", @@ -13239,25 +13247,6 @@ "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", "dev": true }, - "node_modules/remark-lint-link-title-style/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/remark-lint-link-title-style/node_modules/unist-util-visit": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", @@ -13320,25 +13309,6 @@ "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", "dev": true }, - "node_modules/remark-lint-list-item-content-indent/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/remark-lint-list-item-content-indent/node_modules/unist-util-visit": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", @@ -13401,25 +13371,6 @@ "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", "dev": true }, - "node_modules/remark-lint-ordered-list-marker-style/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/remark-lint-ordered-list-marker-style/node_modules/unist-util-visit": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", @@ -13481,25 +13432,6 @@ "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", "dev": true }, - "node_modules/remark-lint-rule-style/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/remark-lint-rule-style/node_modules/unist-util-visit": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", @@ -13561,25 +13493,6 @@ "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", "dev": true }, - "node_modules/remark-lint-strong-marker/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/remark-lint-strong-marker/node_modules/unist-util-visit": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", @@ -13642,25 +13555,6 @@ "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", "dev": true }, - "node_modules/remark-lint-table-cell-padding/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/remark-lint-table-cell-padding/node_modules/unist-util-visit": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", @@ -13705,25 +13599,6 @@ "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", "dev": true }, - "node_modules/remark-lint/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/remark-message-control": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/remark-message-control/-/remark-message-control-7.1.1.tgz", @@ -13756,35 +13631,64 @@ "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", "dev": true }, - "node_modules/remark-message-control/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", "dev": true, "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-parse": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", - "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "node_modules/remark-parse/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", "dev": true, "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-from-markdown": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unified": "^11.0.0" + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" }, "funding": { "type": "opencollective", @@ -13833,25 +13737,6 @@ "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", "dev": true }, - "node_modules/remark-preset-lint-consistent/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/remark-stringify": { "version": "11.0.0", "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", @@ -13901,6 +13786,25 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/remark-stringify/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/remark-stringify/node_modules/unist-util-is": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", @@ -13914,6 +13818,35 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/remark-stringify/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/remeda": { "version": "1.57.2", "resolved": "https://registry.npmjs.org/remeda/-/remeda-1.57.2.tgz", @@ -14080,15 +14013,15 @@ } }, "node_modules/rimraf/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", + "jackspeak": "^2.3.6", "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" }, "bin": { "glob": "dist/esm/bin.mjs" @@ -14101,9 +14034,9 @@ } }, "node_modules/rimraf/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -14114,6 +14047,14 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rimraf/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -14282,16 +14223,16 @@ "optional": true }, "node_modules/set-function-length": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", - "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dependencies": { - "define-data-property": "^1.1.2", + "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.3", + "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -14447,11 +14388,11 @@ } }, "node_modules/side-channel": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz", - "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dependencies": { - "call-bind": "^1.0.6", + "call-bind": "^1.0.7", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.4", "object-inspect": "^1.13.1" @@ -14660,9 +14601,9 @@ } }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "dev": true, "engines": { "node": ">=0.10.0" @@ -14849,14 +14790,15 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/string.prototype.padend": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.5.tgz", - "integrity": "sha512-DOB27b/2UTTD+4myKUFh+/fXWcu/UDyASIXfg+7VzoCNNGOfWvoyU/x5pvVHr++ztyt/oSYI1BcWBBG/hmlNjA==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.6.tgz", + "integrity": "sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -14971,15 +14913,16 @@ } }, "node_modules/stylelint": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.2.1.tgz", - "integrity": "sha512-SfIMGFK+4n7XVAyv50CpVfcGYWG4v41y6xG7PqOgQSY8M/PgdK0SQbjWFblxjJZlN9jNq879mB4BCZHJRIJ1hA==", + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.3.1.tgz", + "integrity": "sha512-/JOwQnBvxEKOT2RtNgGpBVXnCSMBgKOL2k7w0K52htwCyJls4+cHvc4YZgXlVoAZS9QJd2DgYAiRnja96pTgxw==", "dev": true, "dependencies": { - "@csstools/css-parser-algorithms": "^2.5.0", - "@csstools/css-tokenizer": "^2.2.3", - "@csstools/media-query-list-parser": "^2.1.7", - "@csstools/selector-specificity": "^3.0.1", + "@csstools/css-parser-algorithms": "^2.6.1", + "@csstools/css-tokenizer": "^2.2.4", + "@csstools/media-query-list-parser": "^2.1.9", + "@csstools/selector-specificity": "^3.0.2", + "@dual-bundle/import-meta-resolve": "^4.0.0", "balanced-match": "^2.0.0", "colord": "^2.9.3", "cosmiconfig": "^9.0.0", @@ -14993,19 +14936,19 @@ "globby": "^11.1.0", "globjoin": "^0.1.4", "html-tags": "^3.3.1", - "ignore": "^5.3.0", + "ignore": "^5.3.1", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", - "known-css-properties": "^0.29.0", + "known-css-properties": "^0.30.0", "mathml-tag-names": "^2.1.3", - "meow": "^13.1.0", + "meow": "^13.2.0", "micromatch": "^4.0.5", "normalize-path": "^3.0.0", "picocolors": "^1.0.0", - "postcss": "^8.4.33", + "postcss": "^8.4.38", "postcss-resolve-nested-selector": "^0.1.1", "postcss-safe-parser": "^7.0.0", - "postcss-selector-parser": "^6.0.15", + "postcss-selector-parser": "^6.0.16", "postcss-value-parser": "^4.2.0", "resolve-from": "^5.0.0", "string-width": "^4.2.3", @@ -15099,6 +15042,18 @@ "node": ">=8" } }, + "node_modules/stylelint/node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/stylelint/node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -15111,6 +15066,19 @@ "node": ">=8" } }, + "node_modules/stylelint/node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/stylelint/node_modules/global-modules": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", @@ -15273,9 +15241,9 @@ "dev": true }, "node_modules/table": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", - "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "version": "6.8.2", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz", + "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==", "dev": true, "dependencies": { "ajv": "^8.0.1", @@ -15289,9 +15257,9 @@ } }, "node_modules/tar": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", - "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "optional": true, "dependencies": { "chownr": "^2.0.0", @@ -15586,9 +15554,9 @@ } }, "node_modules/ts-api-utils": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.2.1.tgz", - "integrity": "sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", "engines": { "node": ">=16" }, @@ -15836,18 +15804,18 @@ } }, "node_modules/unified": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", - "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", "dev": true, "dependencies": { - "@types/unist": "^3.0.0", + "@types/unist": "^2.0.0", "bail": "^2.0.0", - "devlop": "^1.0.0", "extend": "^3.0.0", + "is-buffer": "^2.0.0", "is-plain-obj": "^4.0.0", "trough": "^2.0.0", - "vfile": "^6.0.0" + "vfile": "^5.0.0" }, "funding": { "type": "opencollective", @@ -15876,25 +15844,6 @@ "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", "dev": true }, - "node_modules/unified-lint-rule/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/unified-message-control": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unified-message-control/-/unified-message-control-4.0.0.tgz", @@ -15948,34 +15897,11 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/unified/node_modules/vfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", - "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", - "dev": true, - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unified/node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "dev": true, - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "node_modules/unified/node_modules/@types/unist": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", + "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", + "dev": true }, "node_modules/union-value": { "version": "1.0.1", @@ -16638,10 +16564,13 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/yaml": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", - "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz", + "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==", "dev": true, + "bin": { + "yaml": "bin.mjs" + }, "engines": { "node": ">= 14" } @@ -16705,22 +16634,6 @@ "node": ">= 14" } }, - "node_modules/zip-stream/node_modules/readable-stream": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", - "dev": true, - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, "node_modules/zlibjs": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/zlibjs/-/zlibjs-0.3.1.tgz", @@ -16781,122 +16694,24 @@ "zotero-start": "bin/start.py" } }, - "node_modules/zotero-plugin/node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/zotero-plugin/node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/zotero-plugin/node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/zotero-plugin/node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/zotero-plugin/node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/zotero-plugin/node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/zotero-plugin/node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/zotero-plugin/node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/zotero-plugin/node_modules/@octokit/auth-token": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", - "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", - "engines": { - "node": ">= 18" - } - }, - "node_modules/zotero-plugin/node_modules/@octokit/core": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.1.0.tgz", - "integrity": "sha512-BDa2VAMLSh3otEiaMJ/3Y36GU4qf6GI+VivQ/P41NC6GHcdxpKlqV0ikSZ5gdQsmS3ojXeRx5vasgNTinF0Q4g==", + "node_modules/zotero-plugin/node_modules/@octokit/auth-token": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", + "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", + "engines": { + "node": ">= 18" + } + }, + "node_modules/zotero-plugin/node_modules/@octokit/core": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.0.tgz", + "integrity": "sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg==", "dependencies": { "@octokit/auth-token": "^4.0.0", - "@octokit/graphql": "^7.0.0", - "@octokit/request": "^8.0.2", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^12.0.0", + "@octokit/graphql": "^7.1.0", + "@octokit/request": "^8.3.1", + "@octokit/request-error": "^5.1.0", + "@octokit/types": "^13.0.0", "before-after-hook": "^2.2.0", "universal-user-agent": "^6.0.0" }, @@ -16905,11 +16720,11 @@ } }, "node_modules/zotero-plugin/node_modules/@octokit/endpoint": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.4.tgz", - "integrity": "sha512-DWPLtr1Kz3tv8L0UvXTDP1fNwM0S+z6EJpRcvH66orY6Eld4XBMCSYsaWp4xIm61jTWxK68BrR7ibO+vSDnZqw==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.5.tgz", + "integrity": "sha512-ekqR4/+PCLkEBF6qgj8WqJfvDq65RH85OAgrtnVp1mSxaXF03u2xW/hUdweGS5654IlC0wkNYC18Z50tSYTAFw==", "dependencies": { - "@octokit/types": "^12.0.0", + "@octokit/types": "^13.1.0", "universal-user-agent": "^6.0.0" }, "engines": { @@ -16917,12 +16732,12 @@ } }, "node_modules/zotero-plugin/node_modules/@octokit/graphql": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.0.2.tgz", - "integrity": "sha512-OJ2iGMtj5Tg3s6RaXH22cJcxXRi7Y3EBqbHTBRq+PQAqfaS8f/236fUrWhfSn8P4jovyzqucxme7/vWSSZBX2Q==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.1.0.tgz", + "integrity": "sha512-r+oZUH7aMFui1ypZnAvZmn0KSqAUgE1/tUXIWaqUCa1758ts/Jio84GZuzsvUkme98kv0WFY8//n0J1Z+vsIsQ==", "dependencies": { - "@octokit/request": "^8.0.1", - "@octokit/types": "^12.0.0", + "@octokit/request": "^8.3.0", + "@octokit/types": "^13.0.0", "universal-user-agent": "^6.0.0" }, "engines": { @@ -16930,57 +16745,83 @@ } }, "node_modules/zotero-plugin/node_modules/@octokit/openapi-types": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-19.1.0.tgz", - "integrity": "sha512-6G+ywGClliGQwRsjvqVYpklIfa7oRPA0vyhPQG/1Feh+B+wU0vGH1JiJ5T25d3g1JZYBHzR2qefLi9x8Gt+cpw==" + "version": "21.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-21.2.0.tgz", + "integrity": "sha512-xx+Xd6I7rYvul/hgUDqv6TeGX0IOGnhSg9IOeYgd/uI7IAqUy6DE2B6Ipv2M4mWoxaMcWjIzgTIcv8pMO3F3vw==" }, "node_modules/zotero-plugin/node_modules/@octokit/plugin-paginate-rest": { - "version": "9.1.5", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.1.5.tgz", - "integrity": "sha512-WKTQXxK+bu49qzwv4qKbMMRXej1DU2gq017euWyKVudA6MldaSSQuxtz+vGbhxV4CjxpUxjZu6rM2wfc1FiWVg==", + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.2.1.tgz", + "integrity": "sha512-wfGhE/TAkXZRLjksFXuDZdmGnJQHvtU/joFQdweXUgzo1XwvBCD4o4+75NtFfjfLK5IwLf9vHTfSiU3sLRYpRw==", "dependencies": { - "@octokit/types": "^12.4.0" + "@octokit/types": "^12.6.0" }, "engines": { "node": ">= 18" }, "peerDependencies": { - "@octokit/core": ">=5" + "@octokit/core": "5" + } + }, + "node_modules/zotero-plugin/node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/openapi-types": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", + "integrity": "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==" + }, + "node_modules/zotero-plugin/node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/types": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.6.0.tgz", + "integrity": "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==", + "dependencies": { + "@octokit/openapi-types": "^20.0.0" } }, "node_modules/zotero-plugin/node_modules/@octokit/plugin-request-log": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-4.0.0.tgz", - "integrity": "sha512-2uJI1COtYCq8Z4yNSnM231TgH50bRkheQ9+aH8TnZanB6QilOnx8RMD2qsnamSOXtDj0ilxvevf5fGsBhBBzKA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-4.0.1.tgz", + "integrity": "sha512-GihNqNpGHorUrO7Qa9JbAl0dbLnqJVrV8OXe2Zm5/Y4wFkZQDfTreBzVmiRfJVfE4mClXdihHnbpyyO9FSX4HA==", "engines": { "node": ">= 18" }, "peerDependencies": { - "@octokit/core": ">=5" + "@octokit/core": "5" } }, "node_modules/zotero-plugin/node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-10.3.0.tgz", - "integrity": "sha512-c/fjpoHispRvBZuRoTVt/uALg7pXa9RQbXWJiDMk6NDkGNomuAZG7YuYYpZoxeoXv+kVRjIDTsO0e1z0pei+PQ==", + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-10.4.1.tgz", + "integrity": "sha512-xV1b+ceKV9KytQe3zCVqjg+8GTGfDYwaT1ATU5isiUyVtlVAO3HNdzpS4sr4GBx4hxQ46s7ITtZrAsxG22+rVg==", "dependencies": { - "@octokit/types": "^12.4.0" + "@octokit/types": "^12.6.0" }, "engines": { "node": ">= 18" }, "peerDependencies": { - "@octokit/core": ">=5" + "@octokit/core": "5" + } + }, + "node_modules/zotero-plugin/node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/openapi-types": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", + "integrity": "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==" + }, + "node_modules/zotero-plugin/node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.6.0.tgz", + "integrity": "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==", + "dependencies": { + "@octokit/openapi-types": "^20.0.0" } }, "node_modules/zotero-plugin/node_modules/@octokit/request": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.2.0.tgz", - "integrity": "sha512-exPif6x5uwLqv1N1irkLG1zZNJkOtj8bZxuVHd71U5Ftuxf2wGNvAJyNBcPbPC+EBzwYEbBDdSFb8EPcjpYxPQ==", + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.3.1.tgz", + "integrity": "sha512-fin4cl5eHN5Ybmb/gtn7YZ+ycyUlcyqqkg5lfxeSChqj7sUt6TNaJPehREi+0PABKLREYL8pfaUhH3TicEWNoA==", "dependencies": { - "@octokit/endpoint": "^9.0.0", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^12.0.0", + "@octokit/endpoint": "^9.0.1", + "@octokit/request-error": "^5.1.0", + "@octokit/types": "^13.0.0", "universal-user-agent": "^6.0.0" }, "engines": { @@ -16988,11 +16829,11 @@ } }, "node_modules/zotero-plugin/node_modules/@octokit/request-error": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.0.1.tgz", - "integrity": "sha512-X7pnyTMV7MgtGmiXBwmO6M5kIPrntOXdyKZLigNfQWSEQzVxR4a4vo49vJjTWX70mPndj8KhfT4Dx+2Ng3vnBQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.1.0.tgz", + "integrity": "sha512-GETXfE05J0+7H2STzekpKObFe765O5dlAKUTLNGeH+x47z7JjXHfsHKo5z21D/o/IOZTUEI6nyWyR+bZVP/n5Q==", "dependencies": { - "@octokit/types": "^12.0.0", + "@octokit/types": "^13.1.0", "deprecation": "^2.0.0", "once": "^1.4.0" }, @@ -17001,136 +16842,25 @@ } }, "node_modules/zotero-plugin/node_modules/@octokit/rest": { - "version": "20.0.2", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-20.0.2.tgz", - "integrity": "sha512-Ux8NDgEraQ/DMAU1PlAohyfBBXDwhnX2j33Z1nJNziqAfHi70PuxkFYIcIt8aIAxtRE7KVuKp8lSR8pA0J5iOQ==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-20.1.0.tgz", + "integrity": "sha512-STVO3itHQLrp80lvcYB2UIKoeil5Ctsgd2s1AM+du3HqZIR35ZH7WE9HLwUOLXH0myA0y3AGNPo8gZtcgIbw0g==", "dependencies": { - "@octokit/core": "^5.0.0", - "@octokit/plugin-paginate-rest": "^9.0.0", + "@octokit/core": "^5.0.2", + "@octokit/plugin-paginate-rest": "^9.1.5", "@octokit/plugin-request-log": "^4.0.0", - "@octokit/plugin-rest-endpoint-methods": "^10.0.0" + "@octokit/plugin-rest-endpoint-methods": "^10.2.0" }, "engines": { "node": ">= 18" } }, "node_modules/zotero-plugin/node_modules/@octokit/types": { - "version": "12.5.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.5.0.tgz", - "integrity": "sha512-YJEKcb0KkJlIUNU/zjnZwHEP8AoVh/OoIcP/1IyR4UHxExz7fzpe/a8IG4wBtQi7QDEqiomVLX88S6FpxxAJtg==", - "dependencies": { - "@octokit/openapi-types": "^19.1.0" - } - }, - "node_modules/zotero-plugin/node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", - "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", - "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/type-utils": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.4", - "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/zotero-plugin/node_modules/@typescript-eslint/parser": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", - "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", - "dependencies": { - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/zotero-plugin/node_modules/@typescript-eslint/type-utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", - "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", - "dependencies": { - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/zotero-plugin/node_modules/@typescript-eslint/utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", - "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.1.0.tgz", + "integrity": "sha512-nBwAFOYqVUUJ2AZFK4ZzESQptaAVqdTDKk8gE0Xr0o99WuPDSrhUC38x0F40xD9OUxXhOOuZKWNNVVLPSHQDvQ==", "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "semver": "^7.5.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "@octokit/openapi-types": "^21.0.0" } }, "node_modules/zotero-plugin/node_modules/archiver": { @@ -17245,305 +16975,16 @@ "node": ">= 12.0.0" } }, - "node_modules/zotero-plugin/node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/zotero-plugin/node_modules/eslint-plugin-import": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", - "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", - "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", - "semver": "^6.3.1", - "tsconfig-paths": "^3.15.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/zotero-plugin/node_modules/eslint-plugin-import/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/zotero-plugin/node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/zotero-plugin/node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/zotero-plugin/node_modules/eslint-plugin-import/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/zotero-plugin/node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/zotero-plugin/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/zotero-plugin/node_modules/eslint/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/zotero-plugin/node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/zotero-plugin/node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/zotero-plugin/node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/zotero-plugin/node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/zotero-plugin/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zotero-plugin/node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/zotero-plugin/node_modules/flat-cache/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/zotero-plugin/node_modules/flat-cache/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/zotero-plugin/node_modules/flat-cache/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/zotero-plugin/node_modules/flat-cache/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/zotero-plugin/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "node_modules/zotero-plugin/node_modules/glob": { + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", + "jackspeak": "^2.3.6", "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" }, "bin": { "glob": "dist/esm/bin.mjs" @@ -17555,43 +16996,10 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/zotero-plugin/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zotero-plugin/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/zotero-plugin/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/zotero-plugin/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -17602,40 +17010,12 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/zotero-plugin/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dependencies": { - "yocto-queue": "^0.1.0" - }, + "node_modules/zotero-plugin/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zotero-plugin/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zotero-plugin/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" } }, "node_modules/zotero-plugin/node_modules/peggy": { @@ -17653,15 +17033,17 @@ "node": ">=14" } }, - "node_modules/zotero-plugin/node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "engines": { - "node": ">=10" + "node_modules/zotero-plugin/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 6" } }, "node_modules/zotero-plugin/node_modules/zip-stream": { diff --git a/package.json b/package.json index a53b9d79b6..5f0909147a 100644 --- a/package.json +++ b/package.json @@ -134,7 +134,7 @@ "dotenv": "^16.4.5", "ejs": "^3.1.9", "esbuild": "^0.20.2", - "eslint": "^9.0.0", + "eslint": "^8.57.0", "estrace": "^5.0.1", "eta": "^3.4.0", "fast-json-patch": "^3.1.1", diff --git a/site/content/exporting/unicode.md b/site/content/exporting/unicode.md index 6687bb9f32..6212fdbdfa 100644 --- a/site/content/exporting/unicode.md +++ b/site/content/exporting/unicode.md @@ -11,613 +11,571 @@ Some of us though are bound to outlets that still demand BibTeX, and there's gee -### mathrsfs +### wasysym | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | |---------------|----------|----------|---------------|----------|----------|---------------|----------|----------|---------------|----------|----------| -| 𝓏 | | \mathscr{z} | 𝓎 | | \mathscr{y} | 𝓍 | | \mathscr{x} | 𝓌 | | \mathscr{w} | -| 𝓋 | | \mathscr{v} | 𝓊 | | \mathscr{u} | 𝓉 | | \mathscr{t} | 𝓈 | | \mathscr{s} | -| 𝓇 | | \mathscr{r} | 𝓆 | | \mathscr{q} | 𝓅 | | \mathscr{p} | 𝓃 | | \mathscr{n} | -| 𝓂 | | \mathscr{m} | 𝓁 | | \mathscr{l} | 𝓀 | | \mathscr{k} | 𝒿 | | \mathscr{j} | -| 𝒾 | | \mathscr{i} | 𝒽 | | \mathscr{h} | 𝒻 | | \mathscr{f} | 𝒹 | | \mathscr{d} | -| 𝒸 | | \mathscr{c} | 𝒷 | | \mathscr{b} | 𝒶 | | \mathscr{a} | 𝒵 | | \mathscr{Z} | -| 𝒴 | | \mathscr{Y} | 𝒳 | | \mathscr{X} | 𝒲 | | \mathscr{W} | 𝒱 | | \mathscr{V} | -| 𝒰 | | \mathscr{U} | 𝒯 | | \mathscr{T} | 𝒮 | | \mathscr{S} | 𝒬 | | \mathscr{Q} | -| 𝒫 | | \mathscr{P} | 𝒪 | | \mathscr{O} | 𝒩 | | \mathscr{N} | 𝒦 | | \mathscr{K} | -| 𝒥 | | \mathscr{J} | 𝒢 | | \mathscr{G} | 𝒟 | | \mathscr{D} | 𝒞 | | \mathscr{C} | -| 𝒜 | | \mathscr{A} | ℴ | | \mathscr{o} | ℳ | | \mathscr{M} | ℱ | | \mathscr{F} | -| ℰ | | \mathscr{E} | ℯ | | \mathscr{e} | ℬ | | \mathscr{B} | ℛ | | \mathscr{R} | -| ℒ | | \mathscr{L} | ℐ | | \mathscr{I} | ℋ | | \mathscr{H} | ℊ | | \mathscr{g} | +| ♓ | \pisces | \pisces | ☽ | \rightmoon | | ☾ | \leftmoon | | | | | ### unicode-math | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | |---------------|----------|----------|---------------|----------|----------|---------------|----------|----------|---------------|----------|----------| -| 〰 | | \hzigzag | 〒 | | \postalmark | ⭔ | | \rightpentagon | ⭓ | | \rightpentagonblack | -| ⭒ | | \smwhitestar | ⭑ | | \medblackstar | ⭐ | | \medwhitestar | ⭌ | | \rightarrowbsimilar | -| ⭋ | | \leftarrowbsimilar | ⭊ | | \leftarrowapprox | ⭉ | | \similarleftarrow | ⭈ | | \rightarrowbackapprox | -| ⭇ | | \bsimilarrightarrow | ⭆ | | \RRightarrow | ⭅ | | \LLeftarrow | ⭄ | | \rightarrowsupset | -| ⭃ | | \rightarrowgtr | ⭂ | | \leftarrowbackapprox | ⭁ | | \bsimilarleftarrow | ⭀ | | \equalleftarrow | -| ⬿ | | \leftcurvedarrow | ⬾ | | \leftarrowx | ⬽ | | \nVtwoheadleftarrowtail | ⬼ | | \nvtwoheadleftarrowtail | -| ⬻ | | \twoheadleftarrowtail | ⬺ | | \nVleftarrowtail | ⬹ | | \nvleftarrowtail | ⬸ | | \leftdotarrow | -| ⬷ | | \twoheadleftdbkarrow | ⬶ | | \twoheadmapsfrom | ⬵ | | \nVtwoheadleftarrow | ⬴ | | \nvtwoheadleftarrow | -| ⬳ | | \longleftsquigarrow | ⬲ | | \leftarrowonoplus | ⬱ | | \leftthreearrows | ⬰ | | \circleonleftarrow | -| ⬯ | | \whtvertoval | ⬮ | | \blkvertoval | ⬭ | | \whthorzoval | ⬬ | | \blkhorzoval | -| ⬫ | | \smwhtlozenge | ⬪ | | \smblklozenge | ⬩ | | \smblkdiamond | ⬨ | | \mdwhtlozenge | -| ⬧ | | \mdblklozenge | ⬦ | | \mdwhtdiamond | ⬥ | | \mdblkdiamond | ⬤ | | \lgblkcircle | -| ⬣ | | \hexagonblack | ⬢ | | \varhexagonblack | ⬡ | | \varhexagon | ⬠ | | \pentagon | -| ⬟ | | \pentagonblack | ⬞ | | \vysmwhtsquare | ⬝ | | \vysmblksquare | ⬜ | | \lgwhtsquare | -| ⬛ | | \lgblksquare | ⬚ | | \dottedsquare | ⬙ | | \diamondbotblack | ⬘ | | \diamondtopblack | -| ⬗ | | \diamondrightblack | ⬖ | | \diamondleftblack | ⬕ | | \squarellblack | ⬔ | | \squareurblack | -| ⬓ | | \squarebotblack | ⬒ | | \squaretopblack | ⫿ | | \bigtalloblong | ⫾ | | \talloblong | -| ⫼ | | \biginterleave | ⫻ | | \trslash | ⫺ | | \geqqslant | ⫹ | | \leqqslant | -| ⫸ | | \gggnest | ⫷ | | \lllnest | ⫶ | | \threedotcolon | ⫵ | | \nhVvert | -| ⫴ | | \interleave | ⫳ | | \parsim | ⫲ | | \nhpar | ⫱ | | \topcir | -| ⫰ | | \midcir | ⫯ | | \cirmid | ⫮ | | \revnmid | ⫭ | | \bNot | -| ⫬ | | \Not | ⫫ | | \Vbar | ⫩ | | \vBarv | ⫨ | | \vBar | -| ⫧ | | \Barv | ⫦ | | \varVdash | ⫥ | | \DashV | ⫤ | | \Dashv | -| ⫣ | | \dashV | ⫢ | | \vDdash | ⫡ | | \perps | ⫠ | | \shortuptack | -| ⫟ | | \shortdowntack | ⫞ | | \shortlefttack | ⫝ | | \forksnot | ⫝̸ | | \forks | -| ⫛ | | \mlcp | ⫚ | | \topfork | ⫙ | | \forkv | ⫘ | | \supdsub | -| ⫗ | | \suphsub | ⫖ | | \supsup | ⫕ | | \subsub | ⫔ | | \supsub | -| ⫓ | | \subsup | ⫒ | | \csupe | ⫑ | | \csube | ⫐ | | \csup | -| ⫏ | | \csub | ⫎ | | \rsqhook | ⫍ | | \lsqhook | ⫌ | | \supsetneqq | -| ⫋ | | \subsetneqq | ⫊ | | \supsetapprox | ⫉ | | \subsetapprox | ⫈ | | \supsim | -| ⫇ | | \subsim | ⫆ | | \supseteqq | ⫅ | | \subseteqq | ⫄ | | \supedot | -| ⫃ | | \subedot | ⫂ | | \supmult | ⫁ | | \submult | ⫀ | | \supsetplus | -| ⪿ | | \subsetplus | ⪾ | | \supsetdot | ⪽ | | \subsetdot | ⪺ | | \succnapprox | -| ⪹ | | \precnapprox | ⪸ | | \succapprox | ⪷ | | \precapprox | ⪶ | | \succneqq | -| ⪵ | | \precneqq | ⪴ | | \succeqq | ⪳ | | \preceqq | ⪲ | | \succneq | -| ⪱ | | \precneq | ⪮ | | \bumpeqq | ⪭ | | \late | ⪬ | | \smte | -| ⪫ | | \lat | ⪪ | | \smt | ⪩ | | \gescc | ⪨ | | \lescc | -| ⪥ | | \gla | ⪤ | | \glj | ⪣ | | \partialmeetcontraction | ⪠ | | \simgE | -| ⪟ | | \simlE | ⪞ | | \simgtr | ⪝ | | \simless | ⪜ | | \eqqslantgtr | -| ⪛ | | \eqqslantless | ⪚ | | \eqqgtr | ⪙ | | \eqqless | ⪘ | | \egsdot | -| ⪗ | | \elsdot | ⪖ | | \eqslantgtr | ⪕ | | \eqslantless | ⪔ | | \gesles | -| ⪓ | | \lesges | ⪒ | | \glE | ⪑ | | \lgE | ⪐ | | \gsiml | -| ⪏ | | \lsimg | ⪎ | | \gsime | ⪍ | | \lsime | ⪌ | | \gtreqqless | -| ⪋ | | \lesseqqgtr | ⪊ | | \gnapprox | ⪉ | | \lnapprox | ⪈ | | \gneq | -| ⪇ | | \lneq | ⪆ | | \gtrapprox | ⪅ | | \lessapprox | ⪄ | | \gesdotol | -| ⪃ | | \lesdotor | ⪂ | | \gesdoto | ⪁ | | \lesdoto | ⪀ | | \gesdot | -| ⩿ | | \lesdot | ⩾ | | \geqslant | ⩽ | | \leqslant | ⩼ | | \gtquest | -| ⩻ | | \ltquest | ⩺ | | \gtcir | ⩹ | | \ltcir | ⩸ | | \equivDD | -| ⩷ | | \ddotseq | ⩴ | | \Coloneqq | ⩳ | | \eqqsim | ⩲ | | \pluseqq | -| ⩱ | | \eqqplus | ⩰ | | \approxeqq | ⩯ | | \hatapprox | ⩭ | | \congdot | -| ⩬ | | \simminussim | ⩫ | | \simrdots | ⩪ | | \dotsim | ⩩ | | \equivVvert | -| ⩨ | | \equivVert | ⩧ | | \dotequiv | ⩦ | | \eqdot | ⩥ | | \rsub | -| ⩤ | | \dsub | ⩣ | | \veedoublebar | ⩢ | | \doublebarvee | ⩡ | | \varveebar | -| ⩠ | | \wedgedoublebar | ⩟ | | \wedgebar | ⩝ | | \midbarvee | ⩜ | | \midbarwedge | -| ⩛ | | \veemidvert | ⩚ | | \wedgemidvert | ⩙ | | \veeonwedge | ⩘ | | \bigslopedwedge | -| ⩗ | | \bigslopedvee | ⩕ | | \wedgeonwedge | ⩔ | | \Vee | ⩓ | | \Wedge | -| ⩒ | | \veeodot | ⩑ | | \wedgeodot | ⩐ | | \closedvarcupsmashprod | ⩏ | | \Sqcup | -| ⩎ | | \Sqcap | ⩍ | | \closedvarcap | ⩌ | | \closedvarcup | ⩋ | | \twocaps | -| ⩊ | | \twocups | ⩉ | | \capbarcup | ⩈ | | \cupbarcap | ⩇ | | \capovercup | -| ⩆ | | \cupovercap | ⩅ | | \cupvee | ⩄ | | \capwedge | ⩃ | | \barcap | -| ⩂ | | \barcup | ⩁ | | \uminus | ⩀ | | \capdot | ⨾ | | \fcmp | -| ⨽ | | \intprodr | ⨼ | | \intprod | ⨻ | | \triangletimes | ⨺ | | \triangleminus | -| ⨹ | | \triangleplus | ⨸ | | \odiv | ⨷ | | \Otimes | ⨶ | | \otimeshat | -| ⨵ | | \otimesrhrim | ⨴ | | \otimeslhrim | ⨳ | | \smashtimes | ⨲ | | \btimes | -| ⨱ | | \timesbar | ⨰ | | \dottimes | ⨯ | | \vectimes | ⨮ | | \oplusrhrim | -| ⨭ | | \opluslhrim | ⨬ | | \minusrdots | ⨫ | | \minusfdots | ⨪ | | \minusdot | -| ⨩ | | \commaminus | ⨨ | | \plustrif | ⨧ | | \plussubtwo | ⨦ | | \plussim | -| ⨥ | | \plusdot | ⨤ | | \simplus | ⨣ | | \plushat | ⨢ | | \ringplus | -| ⨡ | | \zproject | ⨠ | | \zpipe | ⨟ | | \zcmp | ⨞ | | \bigtriangleleft | -| ⨝ | | \Join | ⨜ | | \lowint | ⨛ | | \upint | ⨚ | | \intcup | -| ⨙ | | \intcap | ⨘ | | \intx | ⨗ | | \intlarhk | ⨕ | | \pointint | -| ⨔ | | \npolint | ⨓ | | \scpolint | ⨒ | | \rppolint | ⨑ | | \awint | -| ⨐ | | \cirfnint | ⨎ | | \intBar | ⨍ | | \intbar | ⨌ | | \iiiint | -| ⨋ | | \sumint | ⨊ | | \modtwosum | ⨈ | | \disjquant | ⨇ | | \conjquant | -| ⨅ | | \bigsqcap | ⨄ | | \Elxuplus | ⨃ | | \bigcupdot | ⧿ | | \tminus | -| ⧾ | | \tplus | ⧽ | | \rcurvyangle | ⧼ | | \lcurvyangle | ⧻ | | \tripleplus | -| ⧺ | | \doubleplus | ⧸ | | \xsol | ⧷ | | \rsolbar | ⧶ | | \dsol | -| ⧴ | | \RuleDelayed | ⧳ | | \errbarblackcircle | ⧲ | | \errbarcircle | ⧱ | | \errbarblackdiamond | -| ⧰ | | \errbardiamond | ⧯ | | \errbarblacksquare | ⧮ | | \errbarsquare | ⧭ | | \blackcircledownarrow | -| ⧬ | | \circledownarrow | ⧫ | | \blacklozenge | ⧪ | | \blackdiamonddownarrow | ⧩ | | \downtrianglerightblack | -| ⧨ | | \downtriangleleftblack | ⧧ | | \thermod | ⧦ | | \gleichstark | ⧥ | | \eqvparsl | -| ⧤ | | \smeparsl | ⧣ | | \eparsl | ⧢ | | \shuffle | ⧡ | | \lrtriangleeq | -| ⧠ | | \laplac | ⧞ | | \nvinfty | ⧝ | | \tieinfty | ⧜ | | \iinfin | -| ⧛ | | \Rvzigzag | ⧚ | | \Lvzigzag | ⧙ | | \rvzigzag | ⧘ | | \lvzigzag | -| ⧗ | | \blackhourglass | ⧖ | | \hourglass | ⧕ | | \rftimes | ⧔ | | \lftimes | -| ⧓ | | \fbowtie | ⧒ | | \rfbowtie | ⧑ | | \lfbowtie | ⧎ | | \rtriltri | -| ⧍ | | \triangleserifs | ⧌ | | \triangles | ⧋ | | \triangleubar | ⧊ | | \triangleodot | -| ⧉ | | \boxonbox | ⧈ | | \boxbox | ⧇ | | \boxcircle | ⧆ | | \boxast | -| ⧅ | | \boxbslash | ⧃ | | \cirE | ⧂ | | \cirscir | ⧁ | | \circledgtr | -| ⧀ | | \circledless | ⦿ | | \circledbullet | ⦾ | | \circledwhitebullet | ⦽ | | \uparrowoncircle | -| ⦼ | | \odotslashdot | ⦻ | | \olcross | ⦺ | | \obot | ⦹ | | \operp | -| ⦸ | | \circledbslash | ⦷ | | \circledparallel | ⦶ | | \circledvert | ⦵ | | \circlehbar | -| ⦴ | | \emptysetoarrl | ⦳ | | \emptysetoarr | ⦲ | | \emptysetocirc | ⦱ | | \emptysetobar | -| ⦰ | | \revemptyset | ⦯ | | \measangledltosw | ⦮ | | \measangledrtose | ⦭ | | \measangleultonw | -| ⦬ | | \measangleurtone | ⦫ | | \measangleldtosw | ⦪ | | \measanglerdtose | ⦩ | | \measanglelutonw | -| ⦨ | | \measanglerutone | ⦧ | | \wideangleup | ⦦ | | \wideangledown | ⦥ | | \revangleubar | -| ⦤ | | \angleubar | ⦣ | | \revangle | ⦢ | | \turnangle | ⦡ | | \sphericalangleup | -| ⦠ | | \gtlpar | ⦟ | | \angdnr | ⦞ | | \angles | ⦝ | | \rightanglemdot | -| ⦛ | | \measuredangleleft | ⦚ | | \vzigzag | ⦙ | | \fourvdots | ⦘ | | \rblkbrbrak | -| ⦗ | | \lblkbrbrak | ⦖ | | \Rparenless | ⦕ | | \Lparengtr | ⦔ | | \rparengtr | -| ⦓ | | \lparenless | ⦒ | | \rangledot | ⦑ | | \langledot | ⦐ | | \rbrackurtick | -| ⦏ | | \lbracklltick | ⦎ | | \rbracklrtick | ⦍ | | \lbrackultick | ⦌ | | \rbrackubar | -| ⦋ | | \lbrackubar | ⦇ | | \limg | ⦆ | | \Elroang | ⦅ | | \lParen | -| ⦄ | | \rBrace | ⦃ | | \lBrace | ⦂ | | \typecolon | ⦁ | | \spot | -| ⦀ | | \Vvert | ⥿ | | \downfishtail | ⥾ | | \upfishtail | ⥽ | | \rightfishtail | -| ⥼ | | \leftfishtail | ⥻ | | \suplarr | ⥺ | | \leftarrowsubset | ⥹ | | \subrarr | -| ⥸ | | \gtrarr | ⥷ | | \leftarrowless | ⥶ | | \ltlarr | ⥵ | | \rightarrowapprox | -| ⥴ | | \rightarrowsimilar | ⥳ | | \leftarrowsimilar | ⥲ | | \similarrightarrow | ⥱ | | \equalrightarrow | -| ⥩ | | \rightleftharpoonsdown | ⥨ | | \rightleftharpoonsup | ⥧ | | \leftrightharpoonsdown | ⥦ | | \leftrightharpoonsup | -| ⥐ | | \DownLeftRightVector | ⥎ | | \leftrightharpoonupup | ⥍ | | \updownharpoonleftright | ⥌ | | \updownharpoonrightleft | -| ⥉ | | \twoheaduparrowcircle | ⥈ | | \leftrightarrowcircle | ⥇ | | \rightarrowx | ⥆ | | \leftarrowplus | -| ⥅ | | \rightarrowplus | ⥄ | | \shortrightarrowleftarrow | ⥃ | | \leftarrowshortrightarrow | ⥂ | | \rightarrowshortleftarrow | -| ⤿ | | \ccwundercurvearrow | ⤾ | | \cwundercurvearrow | ⤽ | | \curvearrowleftplus | ⤼ | | \curvearrowrightminus | -| ⤻ | | \acwunderarcarrow | ⤺ | | \acwoverarcarrow | ⤹ | | \acwleftarcarrow | ⤸ | | \cwrightarcarrow | -| ⤷ | | \rightdowncurvedarrow | ⤶ | | \leftdowncurvedarrow | ⤵ | | \downrightcurvedarrow | ⤴ | | \uprightcurvearrow | -| ⤳ | | \rightcurvedarrow | ⤲ | | \nwovnearrow | ⤱ | | \neovnwarrow | ⤰ | | \rdiagovsearrow | -| ⤯ | | \fdiagovnearrow | ⤮ | | \neovsearrow | ⤭ | | \seovnearrow | ⤬ | | \fdiagovrdiag | -| ⤫ | | \rdiagovfdiag | ⤪ | | \towa | ⤩ | | \tosa | ⤨ | | \toea | -| ⤧ | | \tona | ⤦ | | \hkswarrow | ⤥ | | \hksearrow | ⤤ | | \hknearrow | -| ⤣ | | \hknwarrow | ⤢ | | \neswarrow | ⤡ | | \nwsearrow | ⤠ | | \barrightarrowdiamond | -| ⤟ | | \diamondleftarrowbar | ⤞ | | \rightarrowdiamond | ⤝ | | \diamondleftarrow | ⤜ | | \rightdbltail | -| ⤛ | | \leftdbltail | ⤚ | | \righttail | ⤙ | | \lefttail | ⤘ | | \nVtwoheadrightarrowtail | -| ⤗ | | \nvtwoheadrightarrowtail | ⤑ | | \rightdotarrow | ⤐ | | \drbkarrow | ⤏ | | \dbkarrow | -| ⤎ | | \leftdbkarrow | ⤍ | | \rightbkarrow | ⤌ | | \leftbkarrow | ⤋ | | \Ddownarrow | -| ⤊ | | \Uuparrow | ⤉ | | \uparrowbarred | ⤈ | | \downarrowbarred | ⤇ | | \Mapsto | -| ⤆ | | \Mapsfrom | ⤅ | | \twoheadmapsto | ⤄ | | \nvLeftrightarrow | ⤃ | | \nvRightarrow | -| ⤂ | | \nvLeftarrow | ⤁ | | \nVtwoheadrightarrow | ⟿ | | \longrightsquigarrow | ⟾ | | \Longmapsto | -| ⟽ | | \Longmapsfrom | ⟻ | | \longmapsfrom | ⟴ | | \rightarrowonoplus | ⟳ | | \cwgapcirclearrow | -| ⟲ | | \acwgapcirclearrow | ⟱ | | \DDownarrow | ⟰ | | \UUparrow | ⟭ | | \Rbrbrak | -| ⟬ | | \Lbrbrak | ⟫ | | \rang | ⟥ | | \whitesquaretickright | ⟤ | | \whitesquaretickleft | -| ⟣ | | \concavediamondtickright | ⟢ | | \concavediamondtickleft | ⟡ | | \concavediamond | ⟠ | | \lozengeminus | -| ⟟ | | \cirbot | ⟞ | | \longdashv | ⟝ | | \vlongdash | ⟜ | | \multimapinv | -| ⟛ | | \dashVdash | ⟚ | | \DashVDash | ⟙ | | \bigtop | ⟘ | | \bigbot | -| ⟗ | | \fullouterjoin | ⟖ | | \rightouterjoin | ⟕ | | \leftouterjoin | ⟔ | | \pushout | -| ⟓ | | \pullback | ⟒ | | \upin | ⟑ | | \wedgedot | ⟍ | | \diagdown | -| ⟌ | | \longdivision | ⟋ | | \diagup | ⟉ | | \suphsol | ⟈ | | \bsolhsub | -| ⟇ | | \veedot | ⟄ | | \supsetcirc | ⟃ | | \subsetcirc | ⟁ | | \whiteinwhitetriangle | -| ⟀ | | \threedangle | ➛ | | \draftingarrow | ❳ | | \rbrbrak | ❲ | | \lbrbrak | -| ✽ | | \dingasterisk | ✶ | | \varstar | ✪ | | \circledstar | ✠ | | \maltese | -| ✓ | | \checkmark | ⚲ | | \neuter | ⚬ | | \mdsmwhtcircle | ⚥ | | \Hermaphrodite | -| ⚉ | | \blackcircledtwodots | ⚈ | | \blackcircledrightdot | ⚇ | | \circledtwodots | ⚆ | | \circledrightdot | -| ⚅ | | \dicevi | ⚄ | | \dicev | ⚃ | | \diceiv | ⚂ | | \diceiii | -| ⚁ | | \diceii | ⚀ | | \dicei | ♾ | | \acidfree | ♬ | | \sixteenthnote | -| ♫ | | \twonotes | ♪ | | \eighthnote | ♩ | | \quarternote | ♧ | | \varclubsuit | -| ♦ | | \vardiamondsuit | ♥ | | \varheartsuit | ♤ | | \varspadesuit | ♂ | | \male | -| ♀ | | \female | ☾ | | \leftmoon | ☽ | | \rightmoon | ☼ | | \sun | -| ☻ | | \blacksmiley | ☡ | | \danger | ☆ | | \bigwhitestar | ★ | | \bigstar | -| ◿ | | \lrtriangle | ◾ | | \mdsmblksquare | ◽ | | \mdsmwhtsquare | ◼ | | \mdblksquare | -| ◻ | | \mdwhtsquare | ◺ | | \lltriangle | ◹ | | \urtriangle | ◸ | | \ultriangle | -| ◷ | | \circleurquad | ◶ | | \circlelrquad | ◵ | | \circlellquad | ◴ | | \circleulquad | -| ◳ | | \squareurquad | ◲ | | \squarelrquad | ◱ | | \squarellquad | ◰ | | \squareulquad | -| ◮ | | \trianglerightblack | ◭ | | \triangleleftblack | ◬ | | \trianglecdot | ◫ | | \boxbar | -| ◪ | | \squarelrblack | ◩ | | \squareulblack | ◨ | | \squarerightblack | ◧ | | \squareleftblack | -| ◦ | | \smwhtcircle | ◥ | | \urblacktriangle | ◤ | | \ulblacktriangle | ◣ | | \llblacktriangle | -| ◢ | | \lrblacktriangle | ◡ | | \botsemicircle | ◠ | | \topsemicircle | ◟ | | \llarc | -| ◞ | | \lrarc | ◝ | | \urarc | ◜ | | \ularc | ◛ | | \invwhitelowerhalfcircle | -| ◚ | | \invwhiteupperhalfcircle | ◙ | | \inversewhitecircle | ◘ | | \inversebullet | ◗ | | \blackrighthalfcircle | -| ◖ | | \blacklefthalfcircle | ◕ | | \blackcircleulquadwhite | ◔ | | \circleurquadblack | ◓ | | \circletophalfblack | -| ◒ | | \circlebottomhalfblack | ◑ | | \circlerighthalfblack | ◐ | | \circlelefthalfblack | ◎ | | \bullseye | -| ◍ | | \circlevertfill | ◌ | | \dottedcircle | ◊ | | \lozenge | ◉ | | \fisheye | -| ◈ | | \blackinwhitediamond | ◅ | | \whitepointerleft | ◄ | | \blackpointerleft | ◃ | | \smalltriangleleft | -| ◂ | | \smallblacktriangleleft | ▿ | | \triangledown | ▾ | | \blacktriangledown | ▼ | | \bigblacktriangledown | -| ▻ | | \whitepointerright | ► | | \blackpointerright | ▹ | | \smalltriangleright | ▸ | | \smallblacktriangleright | -| ▵ | | \vartriangle | ▴ | | \blacktriangle | △ | | \bigtriangleup | ▲ | | \bigblacktriangleup | -| ▱ | | \parallelogram | ▰ | | \parallelogramblack | ▯ | | \vrectangle | ▮ | | \vrectangleblack | -| ▭ | | \hrectangle | ▬ | | \hrectangleblack | ▫ | | \smwhtsquare | ▪ | | \smblksquare | -| ▩ | | \squarecrossfill | ▨ | | \squareneswfill | ▧ | | \squarenwsefill | ▦ | | \squarehvfill | -| ▥ | | \squarevfill | ▤ | | \squarehfill | ▣ | | \blackinwhitesquare | ▢ | | \squoval | -| ■ | | \mdlgblksquare | ▓ | | \blockthreeqtrshaded | ▒ | | \blockhalfshaded | ░ | | \blockqtrshaded | -| ▐ | | \blockrighthalf | ▌ | | \blocklefthalf | █ | | \blockfull | ▄ | | \blocklowhalf | -| ▀ | | \blockuphalf | ┆ | | \bdtriplevdash | ␣ | | \mathvisiblespace | ␢ | | \blanksymbol | -| ⏧ | | \elinters | ⏦ | | \accurrent | ⏥ | | \fltns | ⏤ | | \strns | -| ⏣ | | \benzenr | ⏢ | | \trapezium | ⏡ | | \ubrbrak | ⏠ | | \obrbrak | -| ⏟ | | \underbrace | ⏞ | | \overbrace | ⏝ | | \underparen | ⏜ | | \overparen | -| ⏎ | | \varcarriagereturn | ⎹ | | \rvboxline | ⎸ | | \lvboxline | ⎷ | | \sqrtbottom | -| ⎶ | | \bbrktbrk | ⎵ | | \underbracket | ⎴ | | \overbracket | ⎳ | | \sumbottom | -| ⎲ | | \sumtop | ⎯ | | \harrowextender | ⎮ | | \intextender | ⎭ | | \rbracelend | -| ⎬ | | \rbracemid | ⎫ | | \rbraceuend | ⎪ | | \vbraceextender | ⎩ | | \lbracelend | -| ⎨ | | \lbracemid | ⎧ | | \lbraceuend | ⎦ | | \rbracklend | ⎥ | | \rbrackextender | -| ⎤ | | \rbrackuend | ⎣ | | \lbracklend | ⎢ | | \lbrackextender | ⎡ | | \lbrackuend | -| ⎠ | | \rparenlend | ⎟ | | \rparenextender | ⎞ | | \rparenuend | ⎝ | | \lparenlend | -| ⎜ | | \lparenextender | ⎛ | | \lparenuend | ⎔ | | \hexagon | ⍼ | | \rangledownzigzagarrow | -| ⍰ | | \APLboxquestion | ⍓ | | \APLboxupcaret | ⌽ | | \obar | ⌶ | | \topbot | -| ⌲ | | \conictaper | ⌬ | | \varhexagonlrbonds | ⌡ | | \intbottom | ⌠ | | \inttop | -| ⌟ | | \lrcorner | ⌞ | | \llcorner | ⌝ | | \urcorner | ⌜ | | \ulcorner | -| ⌙ | | \turnednot | ⌗ | | \viewdata | ⌓ | | \profsurf | ⌒ | | \profline | -| ⌐ | | \invneg | ⌅ | \barwedge | \varbarwedge | ⌂ | | \house | ⌀ | | \diameter | -| ⋿ | | \bagmember | ⋾ | | \niobar | ⋽ | | \varniobar | ⋼ | | \nis | -| ⋻ | | \varnis | ⋺ | | \nisd | ⋹ | | \isinE | ⋸ | | \isinvb | -| ⋷ | | \isinobar | ⋵ | | \isindot | ⋴ | | \isins | ⋳ | | \varisins | -| ⋲ | | \disin | ⋭ | | \ntrianglerighteq | ⋬ | | \ntrianglelefteq | ⋩ | | \succnsim | -| ⋨ | | \precedesnotsimilar | ⋧ | | \gnsim | ⋦ | | \lnsim | ⋥ | | \sqsupsetneq | -| ⋤ | | \sqsubsetneq | ⋡ | | \nsucceq | ⋠ | | \npreceq | ⋟ | | \curlyeqsucc | -| ⋞ | | \curlyeqprec | ⋝ | | \eqgtr | ⋜ | | \eqless | ⋛ | | \gtreqless | -| ⋚ | | \lesseqgtr | ⋗ | | \gtrdot | ⋖ | | \lessdot | ⋕ | | \hash | -| ⋔ | | \pitchfork | ⋓ | | \Cup | ⋒ | | \Cap | ⋑ | | \Supset | -| ⋐ | | \Subset | ⋏ | | \curlywedge | ⋎ | | \curlyvee | ⋍ | | \backsimeq | -| ⋌ | | \rightthreetimes | ⋋ | | \leftthreetimes | ⋊ | | \rtimes | ⋉ | | \ltimes | -| ⋇ | | \divideontimes | ⊿ | | \varlrtriangle | ⊽ | | \barvee | ⊼ | | \barwedge | -| ⊻ | | \veebar | ⊺ | | \intercal | ⊸ | | \multimap | ⊵ | | \trianglerighteq | -| ⊴ | | \trianglelefteq | ⊳ | | \vartriangleright | ⊲ | | \vartriangleleft | ⊱ | | \scurel | -| ⊰ | | \prurel | ⊯ | | \nVDash | ⊮ | | \nVdash | ⊭ | | \nvDash | -| ⊬ | | \nvdash | ⊫ | | \VDash | ⊪ | | \Vvdash | ⊩ | | \Vdash | -| ⊦ | | \assert | ⊡ | | \boxdot | ⊠ | | \boxtimes | ⊟ | | \boxminus | -| ⊞ | | \boxplus | ⊝ | | \circleddash | ⊜ | | \circledequal | ⊛ | | \circledast | -| ⊚ | | \circledcirc | ⊐ | | \sqsupset | ⊏ | | \sqsubset | ⊍ | | \cupdot | -| ⊌ | | \cupleftarrow | ⊋ | | \supsetneq | ⊊ | | \subsetneq | ≽ | | \succcurlyeq | -| ≼ | | \preccurlyeq | ≷ | | \gtrless | ≶ | | \lessgtr | ≵ | | \ngtrsim | -| ≴ | | \nlesssim | ≭ | | \nasymp | ≬ | | \between | ≩ | | \gneqq | -| ≨ | | \lneqq | ≣ | | \Equiv | ≟ | | \questeq | ≞ | | \measeq | -| ≝ | | \eqdef | ≜ | | \triangleq | ≚ | | \veeeq | ≘ | | \arceq | -| ≗ | | \circeq | ≖ | | \eqcirc | ≔ | | \coloneq | ≓ | | \risingdotseq | -| ≒ | | \fallingdotseq | ≏ | | \bumpeq | ≎ | | \Bumpeq | ≊ | | \approxeq | -| ∽ | | \backsim | ∹ | | \eqcolon | ∷ | | \Colon | ∵ | | \because | -| ∴ | | \therefore | ∲ | | \lcirclerightint | ∦ | | \nparallel | ∤ | | \nmid | -| ∢ | | \sphericalangle | ∡ | | \measuredangle | ∟ | | \rightangle | √ | | \sqrt | -| ∕ | | \divslash | ∔ | | \dotplus | ∎ | | \QED | ∍ | | \smallni | -| ∊ | | \smallin | ∇ | | \nabla | ∆ | | \increment | ∅ | | \varnothing | -| ∄ | | \nexists | ∁ | | \complement | ⇿ | | \leftrightarrowtriangle | ⇾ | | \rightarrowtriangle | -| ⇽ | | \leftarrowtriangle | ⇼ | | \nVleftrightarrow | ⇺ | | \nVleftarrow | ⇹ | | \nvleftrightarrow | -| ⇷ | | \nvleftarrow | ⇶ | | \rightthreearrows | ⇴ | | \circleonrightarrow | ⇪ | | \whitearrowupfrombar | -| ⇩ | | \downwhitearrow | ⇨ | | \rightwhitearrow | ⇧ | | \upwhitearrow | ⇦ | | \leftwhitearrow | -| ⇣ | | \downdasharrow | ⇡ | | \updasharrow | ⇟ | | \nHdownarrow | ⇞ | | \nHuparrow | -| ⇝ | | \rightsquigarrow | ⇜ | | \leftsquigarrow | ⇛ | | \Rrightarrow | ⇚ | | \Lleftarrow | -| ⇙ | | \Swarrow | ⇘ | | \Searrow | ⇗ | | \Nearrow | ⇖ | | \Nwarrow | -| ⇏ | | \nRightarrow | ⇎ | | \nLeftrightarrow | ⇍ | | \nLeftarrow | ⇋ | | \leftrightharpoons | -| ⇊ | | \downdownarrows | ⇉ | | \rightrightarrows | ⇈ | | \upuparrows | ⇇ | | \leftleftarrows | -| ⇆ | | \leftrightarrows | ⇄ | | \rightleftarrows | ⇃ | | \downharpoonleft | ⇂ | | \downharpoonright | -| ⇁ | | \rightharpoondown | ↿ | | \upharpoonleft | ↾ | | \upharpoonright | ↺ | | \circlearrowleft | -| ↹ | | \barleftarrowrightarrowbar | ↸ | | \barovernorthwestarrow | ↷ | | \curvearrowright | ↶ | | \curvearrowleft | -| ↵ | | \carriagereturn | ↴ | | \linefeed | ↳ | \reflectbox{\carriagereturn} | \Rdsh | ↱ | | \Rsh | -| ↰ | | \Lsh | ↮ | | \nleftrightarrow | ↭ | | \leftrightsquigarrow | ↬ | | \looparrowright | -| ↫ | | \looparrowleft | ↨ | | \updownarrowbar | ↧ | | \mapsdown | ↥ | | \mapsup | -| ↤ | | \mapsfrom | ↣ | | \rightarrowtail | ↢ | | \leftarrowtail | ↡ | | \twoheaddownarrow | -| ↠ | | \twoheadrightarrow | ↟ | | \twoheaduparrow | ↞ | | \twoheadleftarrow | ↛ | | \nrightarrow | -| ↚ | | \nleftarrow | ⅊ | | \PropertyLine | ⅅ | | \CapitalDifferentialD | ⅄ | | \Yup | -| ⅃ | | \sansLmirrored | ⅂ | | \sansLturned | ⅁ | | \Game | ℸ | | \daleth | -| ℷ | | \gimel | ℶ | | \beth | Ⅎ | | \Finv | ℩ | | \turnediota | -| ℧ | | \mho | ℛ | | \mscrR | ℒ | | \mscrL | ℏ | | \hslash | -| ℎ | | \Planckconst | ⃰ | | \asteraccent | ⃯ | | \underrightarrow | ⃮ | | \underleftarrow | -| ⃭ | | \underleftharpoondown | ⃬ | | \underrightharpoondown | ⃩ | | \widebridgeabove | ⃨ | | \threeunderdot | -| ⃧ | | \annuity | ⃤ | | \enclosetriangle | ⃡ | | \overleftrightarrow | ⃟ | | \enclosediamond | -| ⃞ | | \enclosesquare | ⃝ | | \enclosecircle | ⃜ | | \ddddot | ⃛ | | \dddot | -| ⃗ | | \vec | ⃒ | | \vertoverlay | ⁗ | | \qprime | ⁐ | | \closure | -| ⁇ | | \Question | ⁄ | | \fracslash | ⁃ | | \hyphenbullet | ⁀ | | \tieconcat | -| ‼ | | \Exclam | ‸ | | \caretinsert | ‷ | | \backtrprime | ‶ | | \backdprime | -| ‵ | | \backprime | ‴ | | \trprime | ″ | | \dprime | ‥ | | \enleadertwodots | -| ‗ | | \twolowline | ― | | \horizbar | ‐ | | \mathhyphen | ữ1 | | \arabichad | -| ữ0 | | \arabicmaj | 𝟿 | | \mttnine | 𝟾 | | \mtteight | 𝟽 | | \mttseven | -| 𝟼 | | \mttsix | 𝟻 | | \mttfive | 𝟺 | | \mttfour | 𝟹 | | \mttthree | -| 𝟸 | | \mtttwo | 𝟷 | | \mttone | 𝟶 | | \mttzero | 𝟵 | | \mbfsansnine | -| 𝟴 | | \mbfsanseight | 𝟳 | | \mbfsansseven | 𝟲 | | \mbfsanssix | 𝟱 | | \mbfsansfive | -| 𝟰 | | \mbfsansfour | 𝟯 | | \mbfsansthree | 𝟮 | | \mbfsanstwo | 𝟭 | | \mbfsansone | -| 𝟬 | | \mbfsanszero | 𝟫 | | \msansnine | 𝟪 | | \msanseight | 𝟩 | | \msansseven | -| 𝟨 | | \msanssix | 𝟧 | | \msansfive | 𝟦 | | \msansfour | 𝟥 | | \msansthree | -| 𝟤 | | \msanstwo | 𝟣 | | \msansone | 𝟢 | | \msanszero | 𝟡 | | \Bbbnine | -| 𝟠 | | \Bbbeight | 𝟟 | | \Bbbseven | 𝟞 | | \Bbbsix | 𝟝 | | \Bbbfive | -| 𝟜 | | \Bbbfour | 𝟛 | | \Bbbthree | 𝟚 | | \Bbbtwo | 𝟙 | | \Bbbone | -| 𝟘 | | \Bbbzero | 𝟗 | | \mbfnine | 𝟖 | | \mbfeight | 𝟕 | | \mbfseven | -| 𝟔 | | \mbfsix | 𝟓 | | \mbffive | 𝟒 | | \mbffour | 𝟑 | | \mbfthree | -| 𝟐 | | \mbftwo | 𝟏 | | \mbfone | 𝟎 | | \mbfzero | 𝟋 | | \mbfdigamma | -| 𝟊 | | \mbfDigamma | 𝟉 | | \mbfitsansvarpi | 𝟈 | | \mbfitsansvarrho | 𝟇 | | \mbfitsansphi | -| 𝟆 | | \mbfitsansvarkappa | 𝟅 | | \mbfitsansvartheta | 𝟄 | | \mbfitsansepsilon | 𝟃 | | \mbfitsanspartial | -| 𝟂 | | \mbfitsansomega | 𝟁 | | \mbfitsanspsi | 𝟀 | | \mbfitsanschi | 𝞿 | | \mbfitsansvarphi | -| 𝞾 | | \mbfitsansupsilon | 𝞽 | | \mbfitsanstau | 𝞼 | | \mbfitsanssigma | 𝞻 | | \mbfitsansvarsigma | -| 𝞺 | | \mbfitsansrho | 𝞹 | | \mbfitsanspi | 𝞸 | | \mbfitsansomicron | 𝞷 | | \mbfitsansxi | -| 𝞶 | | \mbfitsansnu | 𝞵 | | \mbfitsansmu | 𝞴 | | \mbfitsanslambda | 𝞳 | | \mbfitsanskappa | -| 𝞲 | | \mbfitsansiota | 𝞱 | | \mbfitsanstheta | 𝞰 | | \mbfitsanseta | 𝞯 | | \mbfitsanszeta | -| 𝞮 | | \mbfitsansvarepsilon | 𝞭 | | \mbfitsansdelta | 𝞬 | | \mbfitsansgamma | 𝞫 | | \mbfitsansbeta | -| 𝞪 | | \mbfitsansalpha | 𝞩 | | \mbfitsansnabla | 𝞨 | | \mbfitsansOmega | 𝞧 | | \mbfitsansPsi | -| 𝞦 | | \mbfitsansChi | 𝞥 | | \mbfitsansPhi | 𝞤 | | \mbfitsansUpsilon | 𝞣 | | \mbfitsansTau | -| 𝞢 | | \mbfitsansSigma | 𝞡 | | \mbfitsansvarTheta | 𝞠 | | \mbfitsansRho | 𝞟 | | \mbfitsansPi | -| 𝞞 | | \mbfitsansOmicron | 𝞝 | | \mbfitsansXi | 𝞜 | | \mbfitsansNu | 𝞛 | | \mbfitsansMu | -| 𝞚 | | \mbfitsansLambda | 𝞙 | | \mbfitsansKappa | 𝞘 | | \mbfitsansIota | 𝞗 | | \mbfitsansTheta | -| 𝞖 | | \mbfitsansEta | 𝞕 | | \mbfitsansZeta | 𝞔 | | \mbfitsansEpsilon | 𝞓 | | \mbfitsansDelta | -| 𝞒 | | \mbfitsansGamma | 𝞑 | | \mbfitsansBeta | 𝞐 | | \mbfitsansAlpha | 𝞏 | | \mbfsansvarpi | -| 𝞎 | | \mbfsansvarrho | 𝞍 | | \mbfsansphi | 𝞌 | | \mbfsansvarkappa | 𝞋 | | \mbfsansvartheta | -| 𝞊 | | \mbfsansepsilon | 𝞉 | | \mbfsanspartial | 𝞈 | | \mbfsansomega | 𝞇 | | \mbfsanspsi | -| 𝞆 | | \mbfsanschi | 𝞅 | | \mbfsansvarphi | 𝞄 | | \mbfsansupsilon | 𝞃 | | \mbfsanstau | -| 𝞂 | | \mbfsanssigma | 𝞁 | | \mbfsansvarsigma | 𝞀 | | \mbfsansrho | 𝝿 | | \mbfsanspi | -| 𝝾 | | \mbfsansomicron | 𝝽 | | \mbfsansxi | 𝝼 | | \mbfsansnu | 𝝻 | | \mbfsansmu | -| 𝝺 | | \mbfsanslambda | 𝝹 | | \mbfsanskappa | 𝝸 | | \mbfsansiota | 𝝷 | | \mbfsanstheta | -| 𝝶 | | \mbfsanseta | 𝝵 | | \mbfsanszeta | 𝝴 | | \mbfsansvarepsilon | 𝝳 | | \mbfsansdelta | -| 𝝲 | | \mbfsansgamma | 𝝱 | | \mbfsansbeta | 𝝰 | | \mbfsansalpha | 𝝯 | | \mbfsansnabla | -| 𝝮 | | \mbfsansOmega | 𝝭 | | \mbfsansPsi | 𝝬 | | \mbfsansChi | 𝝫 | | \mbfsansPhi | -| 𝝪 | | \mbfsansUpsilon | 𝝩 | | \mbfsansTau | 𝝨 | | \mbfsansSigma | 𝝧 | | \mbfsansvarTheta | -| 𝝦 | | \mbfsansRho | 𝝥 | | \mbfsansPi | 𝝤 | | \mbfsansOmicron | 𝝣 | | \mbfsansXi | -| 𝝢 | | \mbfsansNu | 𝝡 | | \mbfsansMu | 𝝠 | | \mbfsansLambda | 𝝟 | | \mbfsansKappa | -| 𝝞 | | \mbfsansIota | 𝝝 | | \mbfsansTheta | 𝝜 | | \mbfsansEta | 𝝛 | | \mbfsansZeta | -| 𝝚 | | \mbfsansEpsilon | 𝝙 | | \mbfsansDelta | 𝝘 | | \mbfsansGamma | 𝝗 | | \mbfsansBeta | -| 𝝖 | | \mbfsansAlpha | 𝝕 | | \mbfitvarpi | 𝝔 | | \mbfitvarrho | 𝝓 | | \mbfitphi | -| 𝝒 | | \mbfitvarkappa | 𝝑 | | \mbfitvartheta | 𝝐 | | \mbfitepsilon | 𝝏 | | \mbfitpartial | -| 𝝎 | | \mbfitomega | 𝝍 | | \mbfitpsi | 𝝌 | | \mbfitchi | 𝝋 | | \mbfitvarphi | -| 𝝊 | | \mbfitupsilon | 𝝉 | | \mbfittau | 𝝈 | | \mbfitsigma | 𝝇 | | \mbfitvarsigma | -| 𝝆 | | \mbfitrho | 𝝅 | | \mbfitpi | 𝝄 | | \mbfitomicron | 𝝃 | | \mbfitxi | -| 𝝂 | | \mbfitnu | 𝝁 | | \mbfitmu | 𝝀 | | \mbfitlambda | 𝜿 | | \mbfitkappa | -| 𝜾 | | \mbfitiota | 𝜽 | | \mbfittheta | 𝜼 | | \mbfiteta | 𝜻 | | \mbfitzeta | -| 𝜺 | | \mbfitvarepsilon | 𝜹 | | \mbfitdelta | 𝜸 | | \mbfitgamma | 𝜷 | | \mbfitbeta | -| 𝜶 | | \mbfitalpha | 𝜵 | | \mbfitnabla | 𝜴 | | \mbfitOmega | 𝜳 | | \mbfitPsi | -| 𝜲 | | \mbfitChi | 𝜱 | | \mbfitPhi | 𝜰 | | \mbfitUpsilon | 𝜯 | | \mbfitTau | -| 𝜮 | | \mbfitSigma | 𝜭 | | \mbfitvarTheta | 𝜬 | | \mbfitRho | 𝜫 | | \mbfitPi | -| 𝜪 | | \mbfitOmicron | 𝜩 | | \mbfitXi | 𝜨 | | \mbfitNu | 𝜧 | | \mbfitMu | -| 𝜦 | | \mbfitLambda | 𝜥 | | \mbfitKappa | 𝜤 | | \mbfitIota | 𝜣 | | \mbfitTheta | -| 𝜢 | | \mbfitEta | 𝜡 | | \mbfitZeta | 𝜠 | | \mbfitEpsilon | 𝜟 | | \mbfitDelta | -| 𝜞 | | \mbfitGamma | 𝜝 | | \mbfitBeta | 𝜜 | | \mbfitAlpha | 𝜛 | | \mitvarpi | -| 𝜚 | | \mitvarrho | 𝜙 | | \mitphi | 𝜘 | | \mitvarkappa | 𝜗 | | \mitvartheta | -| 𝜖 | | \mitepsilon | 𝜕 | | \mitpartial | 𝜔 | | \mitomega | 𝜓 | | \mitpsi | -| 𝜒 | | \mitchi | 𝜑 | | \mitvarphi | 𝜐 | | \mitupsilon | 𝜏 | | \mittau | -| 𝜎 | | \mitsigma | 𝜍 | | \mitvarsigma | 𝜌 | | \mitrho | 𝜋 | | \mitpi | -| 𝜊 | | \mitomicron | 𝜉 | | \mitxi | 𝜈 | | \mitnu | 𝜇 | | \mitmu | -| 𝜆 | | \mitlambda | 𝜅 | | \mitkappa | 𝜄 | | \mitiota | 𝜃 | | \mittheta | -| 𝜂 | | \miteta | 𝜁 | | \mitzeta | 𝜀 | | \mitvarepsilon | 𝛿 | | \mitdelta | -| 𝛾 | | \mitgamma | 𝛽 | | \mitbeta | 𝛼 | | \mitalpha | 𝛻 | | \mitnabla | -| 𝛺 | | \mitOmega | 𝛹 | | \mitPsi | 𝛸 | | \mitChi | 𝛷 | | \mitPhi | -| 𝛶 | | \mitUpsilon | 𝛵 | | \mitTau | 𝛴 | | \mitSigma | 𝛳 | | \mitvarTheta | -| 𝛲 | | \mitRho | 𝛱 | | \mitPi | 𝛰 | | \mitOmicron | 𝛯 | | \mitXi | -| 𝛮 | | \mitNu | 𝛭 | | \mitMu | 𝛬 | | \mitLambda | 𝛫 | | \mitKappa | -| 𝛪 | | \mitIota | 𝛩 | | \mitTheta | 𝛨 | | \mitEta | 𝛧 | | \mitZeta | -| 𝛦 | | \mitEpsilon | 𝛥 | | \mitDelta | 𝛤 | | \mitGamma | 𝛣 | | \mitBeta | -| 𝛢 | | \mitAlpha | 𝛡 | | \mbfvarpi | 𝛠 | | \mbfvarrho | 𝛟 | | \mbfphi | -| 𝛞 | | \mbfvarkappa | 𝛝 | | \mbfvartheta | 𝛜 | | \mbfepsilon | 𝛛 | | \mbfpartial | -| 𝛚 | | \mbfomega | 𝛙 | | \mbfpsi | 𝛘 | | \mbfchi | 𝛗 | | \mbfvarphi | -| 𝛖 | | \mbfupsilon | 𝛕 | | \mbftau | 𝛔 | | \mbfsigma | 𝛓 | | \mbfvarsigma | -| 𝛒 | | \mbfrho | 𝛑 | | \mbfpi | 𝛐 | | \mbfomicron | 𝛏 | | \mbfxi | -| 𝛎 | | \mbfnu | 𝛍 | | \mbfmu | 𝛌 | | \mbflambda | 𝛋 | | \mbfkappa | -| 𝛊 | | \mbfiota | 𝛉 | | \mbftheta | 𝛈 | | \mbfeta | 𝛇 | | \mbfzeta | -| 𝛆 | | \mbfvarepsilon | 𝛅 | | \mbfdelta | 𝛄 | | \mbfgamma | 𝛃 | | \mbfbeta | -| 𝛂 | | \mbfalpha | 𝛁 | | \mbfnabla | 𝛀 | | \mbfOmega | 𝚿 | | \mbfPsi | -| 𝚾 | | \mbfChi | 𝚽 | | \mbfPhi | 𝚼 | | \mbfUpsilon | 𝚻 | | \mbfTau | -| 𝚺 | | \mbfSigma | 𝚹 | | \mbfvarTheta | 𝚸 | | \mbfRho | 𝚷 | | \mbfPi | -| 𝚶 | | \mbfOmicron | 𝚵 | | \mbfXi | 𝚴 | | \mbfNu | 𝚳 | | \mbfMu | -| 𝚲 | | \mbfLambda | 𝚱 | | \mbfKappa | 𝚰 | | \mbfIota | 𝚯 | | \mbfTheta | -| 𝚮 | | \mbfEta | 𝚭 | | \mbfZeta | 𝚬 | | \mbfEpsilon | 𝚫 | | \mbfDelta | -| 𝚪 | | \mbfGamma | 𝚩 | | \mbfBeta | 𝚨 | | \mbfAlpha | 𝚥 | | \jmath | -| 𝚤 | | \imath | 𝚣 | | \mttz | 𝚢 | | \mtty | 𝚡 | | \mttx | -| 𝚠 | | \mttw | 𝚟 | | \mttv | 𝚞 | | \mttu | 𝚝 | | \mttt | -| 𝚜 | | \mtts | 𝚛 | | \mttr | 𝚚 | | \mttq | 𝚙 | | \mttp | -| 𝚘 | | \mtto | 𝚗 | | \mttn | 𝚖 | | \mttm | 𝚕 | | \mttl | -| 𝚔 | | \mttk | 𝚓 | | \mttj | 𝚒 | | \mtti | 𝚑 | | \mtth | -| 𝚐 | | \mttg | 𝚏 | | \mttf | 𝚎 | | \mtte | 𝚍 | | \mttd | -| 𝚌 | | \mttc | 𝚋 | | \mttb | 𝚊 | | \mtta | 𝚉 | | \mttZ | -| 𝚈 | | \mttY | 𝚇 | | \mttX | 𝚆 | | \mttW | 𝚅 | | \mttV | -| 𝚄 | | \mttU | 𝚃 | | \mttT | 𝚂 | | \mttS | 𝚁 | | \mttR | -| 𝚀 | | \mttQ | 𝙿 | | \mttP | 𝙾 | | \mttO | 𝙽 | | \mttN | -| 𝙼 | | \mttM | 𝙻 | | \mttL | 𝙺 | | \mttK | 𝙹 | | \mttJ | -| 𝙸 | | \mttI | 𝙷 | | \mttH | 𝙶 | | \mttG | 𝙵 | | \mttF | -| 𝙴 | | \mttE | 𝙳 | | \mttD | 𝙲 | | \mttC | 𝙱 | | \mttB | -| 𝙰 | | \mttA | 𝙯 | | \mbfitsansz | 𝙮 | | \mbfitsansy | 𝙭 | | \mbfitsansx | -| 𝙬 | | \mbfitsansw | 𝙫 | | \mbfitsansv | 𝙪 | | \mbfitsansu | 𝙩 | | \mbfitsanst | -| 𝙨 | | \mbfitsanss | 𝙧 | | \mbfitsansr | 𝙦 | | \mbfitsansq | 𝙥 | | \mbfitsansp | -| 𝙤 | | \mbfitsanso | 𝙣 | | \mbfitsansn | 𝙢 | | \mbfitsansm | 𝙡 | | \mbfitsansl | -| 𝙠 | | \mbfitsansk | 𝙟 | | \mbfitsansj | 𝙞 | | \mbfitsansi | 𝙝 | | \mbfitsansh | -| 𝙜 | | \mbfitsansg | 𝙛 | | \mbfitsansf | 𝙚 | | \mbfitsanse | 𝙙 | | \mbfitsansd | -| 𝙘 | | \mbfitsansc | 𝙗 | | \mbfitsansb | 𝙖 | | \mbfitsansa | 𝙕 | | \mbfitsansZ | -| 𝙔 | | \mbfitsansY | 𝙓 | | \mbfitsansX | 𝙒 | | \mbfitsansW | 𝙑 | | \mbfitsansV | -| 𝙐 | | \mbfitsansU | 𝙏 | | \mbfitsansT | 𝙎 | | \mbfitsansS | 𝙍 | | \mbfitsansR | -| 𝙌 | | \mbfitsansQ | 𝙋 | | \mbfitsansP | 𝙊 | | \mbfitsansO | 𝙉 | | \mbfitsansN | -| 𝙈 | | \mbfitsansM | 𝙇 | | \mbfitsansL | 𝙆 | | \mbfitsansK | 𝙅 | | \mbfitsansJ | -| 𝙄 | | \mbfitsansI | 𝙃 | | \mbfitsansH | 𝙂 | | \mbfitsansG | 𝙁 | | \mbfitsansF | -| 𝙀 | | \mbfitsansE | 𝘿 | | \mbfitsansD | 𝘾 | | \mbfitsansC | 𝘽 | | \mbfitsansB | -| 𝘼 | | \mbfitsansA | 𝘻 | | \mitsansz | 𝘺 | | \mitsansy | 𝘹 | | \mitsansx | -| 𝘸 | | \mitsansw | 𝘷 | | \mitsansv | 𝘶 | | \mitsansu | 𝘵 | | \mitsanst | -| 𝘴 | | \mitsanss | 𝘳 | | \mitsansr | 𝘲 | | \mitsansq | 𝘱 | | \mitsansp | -| 𝘰 | | \mitsanso | 𝘯 | | \mitsansn | 𝘮 | | \mitsansm | 𝘭 | | \mitsansl | -| 𝘬 | | \mitsansk | 𝘫 | | \mitsansj | 𝘪 | | \mitsansi | 𝘩 | | \mitsansh | -| 𝘨 | | \mitsansg | 𝘧 | | \mitsansf | 𝘦 | | \mitsanse | 𝘥 | | \mitsansd | -| 𝘤 | | \mitsansc | 𝘣 | | \mitsansb | 𝘢 | | \mitsansa | 𝘡 | | \mitsansZ | -| 𝘠 | | \mitsansY | 𝘟 | | \mitsansX | 𝘞 | | \mitsansW | 𝘝 | | \mitsansV | -| 𝘜 | | \mitsansU | 𝘛 | | \mitsansT | 𝘚 | | \mitsansS | 𝘙 | | \mitsansR | -| 𝘘 | | \mitsansQ | 𝘗 | | \mitsansP | 𝘖 | | \mitsansO | 𝘕 | | \mitsansN | -| 𝘔 | | \mitsansM | 𝘓 | | \mitsansL | 𝘒 | | \mitsansK | 𝘑 | | \mitsansJ | -| 𝘐 | | \mitsansI | 𝘏 | | \mitsansH | 𝘎 | | \mitsansG | 𝘍 | | \mitsansF | -| 𝘌 | | \mitsansE | 𝘋 | | \mitsansD | 𝘊 | | \mitsansC | 𝘉 | | \mitsansB | -| 𝘈 | | \mitsansA | 𝘇 | | \mbfsansz | 𝘆 | | \mbfsansy | 𝘅 | | \mbfsansx | -| 𝘄 | | \mbfsansw | 𝘃 | | \mbfsansv | 𝘂 | | \mbfsansu | 𝘁 | | \mbfsanst | -| 𝘀 | | \mbfsanss | 𝗿 | | \mbfsansr | 𝗾 | | \mbfsansq | 𝗽 | | \mbfsansp | -| 𝗼 | | \mbfsanso | 𝗻 | | \mbfsansn | 𝗺 | | \mbfsansm | 𝗹 | | \mbfsansl | -| 𝗸 | | \mbfsansk | 𝗷 | | \mbfsansj | 𝗶 | | \mbfsansi | 𝗵 | | \mbfsansh | -| 𝗴 | | \mbfsansg | 𝗳 | | \mbfsansf | 𝗲 | | \mbfsanse | 𝗱 | | \mbfsansd | -| 𝗰 | | \mbfsansc | 𝗯 | | \mbfsansb | 𝗮 | | \mbfsansa | 𝗭 | | \mbfsansZ | -| 𝗬 | | \mbfsansY | 𝗫 | | \mbfsansX | 𝗪 | | \mbfsansW | 𝗩 | | \mbfsansV | -| 𝗨 | | \mbfsansU | 𝗧 | | \mbfsansT | 𝗦 | | \mbfsansS | 𝗥 | | \mbfsansR | -| 𝗤 | | \mbfsansQ | 𝗣 | | \mbfsansP | 𝗢 | | \mbfsansO | 𝗡 | | \mbfsansN | -| 𝗠 | | \mbfsansM | 𝗟 | | \mbfsansL | 𝗞 | | \mbfsansK | 𝗝 | | \mbfsansJ | -| 𝗜 | | \mbfsansI | 𝗛 | | \mbfsansH | 𝗚 | | \mbfsansG | 𝗙 | | \mbfsansF | -| 𝗘 | | \mbfsansE | 𝗗 | | \mbfsansD | 𝗖 | | \mbfsansC | 𝗕 | | \mbfsansB | -| 𝗔 | | \mbfsansA | 𝗓 | | \msansz | 𝗒 | | \msansy | 𝗑 | | \msansx | -| 𝗐 | | \msansw | 𝗏 | | \msansv | 𝗎 | | \msansu | 𝗍 | | \msanst | -| 𝗌 | | \msanss | 𝗋 | | \msansr | 𝗊 | | \msansq | 𝗉 | | \msansp | -| 𝗈 | | \msanso | 𝗇 | | \msansn | 𝗆 | | \msansm | 𝗅 | | \msansl | -| 𝗄 | | \msansk | 𝗃 | | \msansj | 𝗂 | | \msansi | 𝗁 | | \msansh | -| 𝗀 | | \msansg | 𝖿 | | \msansf | 𝖾 | | \msanse | 𝖽 | | \msansd | -| 𝖼 | | \msansc | 𝖻 | | \msansb | 𝖺 | | \msansa | 𝖹 | | \msansZ | -| 𝖸 | | \msansY | 𝖷 | | \msansX | 𝖶 | | \msansW | 𝖵 | | \msansV | -| 𝖴 | | \msansU | 𝖳 | | \msansT | 𝖲 | | \msansS | 𝖱 | | \msansR | -| 𝖰 | | \msansQ | 𝖯 | | \msansP | 𝖮 | | \msansO | 𝖭 | | \msansN | -| 𝖬 | | \msansM | 𝖫 | | \msansL | 𝖪 | | \msansK | 𝖩 | | \msansJ | -| 𝖨 | | \msansI | 𝖧 | | \msansH | 𝖦 | | \msansG | 𝖥 | | \msansF | -| 𝖤 | | \msansE | 𝖣 | | \msansD | 𝖢 | | \msansC | 𝖡 | | \msansB | -| 𝖠 | | \msansA | 𝖟 | | \mbffrakz | 𝖞 | | \mbffraky | 𝖝 | | \mbffrakx | -| 𝖜 | | \mbffrakw | 𝖛 | | \mbffrakv | 𝖚 | | \mbffraku | 𝖙 | | \mbffrakt | -| 𝖘 | | \mbffraks | 𝖗 | | \mbffrakr | 𝖖 | | \mbffrakq | 𝖕 | | \mbffrakp | -| 𝖔 | | \mbffrako | 𝖓 | | \mbffrakn | 𝖒 | | \mbffrakm | 𝖑 | | \mbffrakl | -| 𝖐 | | \mbffrakk | 𝖏 | | \mbffrakj | 𝖎 | | \mbffraki | 𝖍 | | \mbffrakh | -| 𝖌 | | \mbffrakg | 𝖋 | | \mbffrakf | 𝖊 | | \mbffrake | 𝖉 | | \mbffrakd | -| 𝖈 | | \mbffrakc | 𝖇 | | \mbffrakb | 𝖆 | | \mbffraka | 𝖅 | | \mbffrakZ | -| 𝖄 | | \mbffrakY | 𝖃 | | \mbffrakX | 𝖂 | | \mbffrakW | 𝖁 | | \mbffrakV | -| 𝖀 | | \mbffrakU | 𝕿 | | \mbffrakT | 𝕾 | | \mbffrakS | 𝕽 | | \mbffrakR | -| 𝕼 | | \mbffrakQ | 𝕻 | | \mbffrakP | 𝕺 | | \mbffrakO | 𝕹 | | \mbffrakN | -| 𝕸 | | \mbffrakM | 𝕷 | | \mbffrakL | 𝕶 | | \mbffrakK | 𝕵 | | \mbffrakJ | -| 𝕴 | | \mbffrakI | 𝕳 | | \mbffrakH | 𝕲 | | \mbffrakG | 𝕱 | | \mbffrakF | -| 𝕰 | | \mbffrakE | 𝕯 | | \mbffrakD | 𝕮 | | \mbffrakC | 𝕭 | | \mbffrakB | -| 𝕬 | | \mbffrakA | 𝕫 | | \Bbbz | 𝕪 | | \Bbby | 𝕩 | | \Bbbx | -| 𝕨 | | \Bbbw | 𝕧 | | \Bbbv | 𝕦 | | \Bbbu | 𝕥 | | \Bbbt | -| 𝕤 | | \Bbbs | 𝕣 | | \Bbbr | 𝕢 | | \Bbbq | 𝕡 | | \Bbbp | -| 𝕠 | | \Bbbo | 𝕟 | | \Bbbn | 𝕞 | | \Bbbm | 𝕝 | | \Bbbl | -| 𝕜 | | \Bbbk | 𝕛 | | \Bbbj | 𝕚 | | \Bbbi | 𝕙 | | \Bbbh | -| 𝕘 | | \Bbbg | 𝕗 | | \Bbbf | 𝕖 | | \Bbbe | 𝕕 | | \Bbbd | -| 𝕔 | | \Bbbc | 𝕓 | | \Bbbb | 𝕒 | | \Bbba | 𝕐 | | \BbbY | -| 𝕏 | | \BbbX | 𝕎 | | \BbbW | 𝕍 | | \BbbV | 𝕌 | | \BbbU | -| 𝕋 | | \BbbT | 𝕊 | | \BbbS | 𝕆 | | \BbbO | 𝕄 | | \BbbM | -| 𝕃 | | \BbbL | 𝕂 | | \BbbK | 𝕁 | | \BbbJ | 𝕀 | | \BbbI | -| 𝔾 | | \BbbG | 𝔽 | | \BbbF | 𝔼 | | \BbbE | 𝔻 | | \BbbD | -| 𝔹 | | \BbbB | 𝔸 | | \BbbA | 𝔷 | | \mfrakz | 𝔶 | | \mfraky | -| 𝔵 | | \mfrakx | 𝔴 | | \mfrakw | 𝔳 | | \mfrakv | 𝔲 | | \mfraku | -| 𝔱 | | \mfrakt | 𝔰 | | \mfraks | 𝔯 | | \mfrakr | 𝔮 | | \mfrakq | -| 𝔭 | | \mfrakp | 𝔬 | | \mfrako | 𝔫 | | \mfrakn | 𝔪 | | \mfrakm | -| 𝔩 | | \mfrakl | 𝔨 | | \mfrakk | 𝔧 | | \mfrakj | 𝔦 | | \mfraki | -| 𝔥 | | \mfrakh | 𝔤 | | \mfrakg | 𝔣 | | \mfrakf | 𝔢 | | \mfrake | -| 𝔡 | | \mfrakd | 𝔠 | | \mfrakc | 𝔟 | | \mfrakb | 𝔞 | | \mfraka | -| 𝔜 | | \mfrakY | 𝔛 | | \mfrakX | 𝔚 | | \mfrakW | 𝔙 | | \mfrakV | -| 𝔘 | | \mfrakU | 𝔗 | | \mfrakT | 𝔖 | | \mfrakS | 𝔔 | | \mfrakQ | -| 𝔓 | | \mfrakP | 𝔒 | | \mfrakO | 𝔑 | | \mfrakN | 𝔐 | | \mfrakM | -| 𝔏 | | \mfrakL | 𝔎 | | \mfrakK | 𝔍 | | \mfrakJ | 𝔊 | | \mfrakG | -| 𝔉 | | \mfrakF | 𝔈 | | \mfrakE | 𝔇 | | \mfrakD | 𝔅 | | \mfrakB | -| 𝔄 | | \mfrakA | 𝔃 | | \mbfscrz | 𝔂 | | \mbfscry | 𝔁 | | \mbfscrx | -| 𝔀 | | \mbfscrw | 𝓿 | | \mbfscrv | 𝓾 | | \mbfscru | 𝓽 | | \mbfscrt | -| 𝓼 | | \mbfscrs | 𝓻 | | \mbfscrr | 𝓺 | | \mbfscrq | 𝓹 | | \mbfscrp | -| 𝓸 | | \mbfscro | 𝓷 | | \mbfscrn | 𝓶 | | \mbfscrm | 𝓵 | | \mbfscrl | -| 𝓴 | | \mbfscrk | 𝓳 | | \mbfscrj | 𝓲 | | \mbfscri | 𝓱 | | \mbfscrh | -| 𝓰 | | \mbfscrg | 𝓯 | | \mbfscrf | 𝓮 | | \mbfscre | 𝓭 | | \mbfscrd | -| 𝓬 | | \mbfscrc | 𝓫 | | \mbfscrb | 𝓪 | | \mbfscra | 𝓩 | | \mbfscrZ | -| 𝓨 | | \mbfscrY | 𝓧 | | \mbfscrX | 𝓦 | | \mbfscrW | 𝓥 | | \mbfscrV | -| 𝓤 | | \mbfscrU | 𝓣 | | \mbfscrT | 𝓢 | | \mbfscrS | 𝓡 | | \mbfscrR | -| 𝓠 | | \mbfscrQ | 𝓟 | | \mbfscrP | 𝓞 | | \mbfscrO | 𝓝 | | \mbfscrN | -| 𝓜 | | \mbfscrM | 𝓛 | | \mbfscrL | 𝓚 | | \mbfscrK | 𝓙 | | \mbfscrJ | -| 𝓘 | | \mbfscrI | 𝓗 | | \mbfscrH | 𝓖 | | \mbfscrG | 𝓕 | | \mbfscrF | -| 𝓔 | | \mbfscrE | 𝓓 | | \mbfscrD | 𝓒 | | \mbfscrC | 𝓑 | | \mbfscrB | -| 𝓐 | | \mbfscrA | 𝓏 | | \mscrz | 𝓎 | | \mscry | 𝓍 | | \mscrx | -| 𝓌 | | \mscrw | 𝓋 | | \mscrv | 𝓊 | | \mscru | 𝓉 | | \mscrt | -| 𝓈 | | \mscrs | 𝓇 | | \mscrr | 𝓆 | | \mscrq | 𝓅 | | \mscrp | -| 𝓃 | | \mscrn | 𝓂 | | \mscrm | 𝓁 | | \mscrl | 𝓀 | | \mscrk | -| 𝒿 | | \mscrj | 𝒾 | | \mscri | 𝒽 | | \mscrh | 𝒻 | | \mscrf | -| 𝒹 | | \mscrd | 𝒸 | | \mscrc | 𝒷 | | \mscrb | 𝒶 | | \mscra | -| 𝒵 | | \mscrZ | 𝒴 | | \mscrY | 𝒳 | | \mscrX | 𝒲 | | \mscrW | -| 𝒱 | | \mscrV | 𝒰 | | \mscrU | 𝒯 | | \mscrT | 𝒮 | | \mscrS | -| 𝒬 | | \mscrQ | 𝒫 | | \mscrP | 𝒪 | | \mscrO | 𝒩 | | \mscrN | -| 𝒦 | | \mscrK | 𝒥 | | \mscrJ | 𝒢 | | \mscrG | 𝒟 | | \mscrD | -| 𝒞 | | \mscrC | 𝒜 | | \mscrA | 𝒛 | | \mbfitz | 𝒚 | | \mbfity | -| 𝒙 | | \mbfitx | 𝒘 | | \mbfitw | 𝒗 | | \mbfitv | 𝒖 | | \mbfitu | -| 𝒕 | | \mbfitt | 𝒔 | | \mbfits | 𝒓 | | \mbfitr | 𝒒 | | \mbfitq | -| 𝒑 | | \mbfitp | 𝒐 | | \mbfito | 𝒏 | | \mbfitn | 𝒎 | | \mbfitm | -| 𝒍 | | \mbfitl | 𝒌 | | \mbfitk | 𝒋 | | \mbfitj | 𝒊 | | \mbfiti | -| 𝒉 | | \mbfith | 𝒈 | | \mbfitg | 𝒇 | | \mbfitf | 𝒆 | | \mbfite | -| 𝒅 | | \mbfitd | 𝒄 | | \mbfitc | 𝒃 | | \mbfitb | 𝒂 | | \mbfita | -| 𝒁 | | \mbfitZ | 𝒀 | | \mbfitY | 𝑿 | | \mbfitX | 𝑾 | | \mbfitW | -| 𝑽 | | \mbfitV | 𝑼 | | \mbfitU | 𝑻 | | \mbfitT | 𝑺 | | \mbfitS | -| 𝑹 | | \mbfitR | 𝑸 | | \mbfitQ | 𝑷 | | \mbfitP | 𝑶 | | \mbfitO | -| 𝑵 | | \mbfitN | 𝑴 | | \mbfitM | 𝑳 | | \mbfitL | 𝑲 | | \mbfitK | -| 𝑱 | | \mbfitJ | 𝑰 | | \mbfitI | 𝑯 | | \mbfitH | 𝑮 | | \mbfitG | -| 𝑭 | | \mbfitF | 𝑬 | | \mbfitE | 𝑫 | | \mbfitD | 𝑪 | | \mbfitC | -| 𝑩 | | \mbfitB | 𝑨 | | \mbfitA | 𝑧 | | \mitz | 𝑦 | | \mity | -| 𝑥 | | \mitx | 𝑤 | | \mitw | 𝑣 | | \mitv | 𝑢 | | \mitu | -| 𝑡 | | \mitt | 𝑠 | | \mits | 𝑟 | | \mitr | 𝑞 | | \mitq | -| 𝑝 | | \mitp | 𝑜 | | \mito | 𝑛 | | \mitn | 𝑚 | | \mitm | -| 𝑙 | | \mitl | 𝑘 | | \mitk | 𝑗 | | \mitj | 𝑖 | | \miti | -| 𝑔 | | \mitg | 𝑓 | | \mitf | 𝑒 | | \mite | 𝑑 | | \mitd | -| 𝑐 | | \mitc | 𝑏 | | \mitb | 𝑎 | | \mita | 𝑍 | | \mitZ | -| 𝑌 | | \mitY | 𝑋 | | \mitX | 𝑊 | | \mitW | 𝑉 | | \mitV | -| 𝑈 | | \mitU | 𝑇 | | \mitT | 𝑆 | | \mitS | 𝑅 | | \mitR | -| 𝑄 | | \mitQ | 𝑃 | | \mitP | 𝑂 | | \mitO | 𝑁 | | \mitN | -| 𝑀 | | \mitM | 𝐿 | | \mitL | 𝐾 | | \mitK | 𝐽 | | \mitJ | -| 𝐼 | | \mitI | 𝐻 | | \mitH | 𝐺 | | \mitG | 𝐹 | | \mitF | -| 𝐸 | | \mitE | 𝐷 | | \mitD | 𝐶 | | \mitC | 𝐵 | | \mitB | -| 𝐴 | | \mitA | 𝐳 | | \mbfz | 𝐲 | | \mbfy | 𝐱 | | \mbfx | -| 𝐰 | | \mbfw | 𝐯 | | \mbfv | 𝐮 | | \mbfu | 𝐭 | | \mbft | -| 𝐬 | | \mbfs | 𝐫 | | \mbfr | 𝐪 | | \mbfq | 𝐩 | | \mbfp | -| 𝐨 | | \mbfo | 𝐧 | | \mbfn | 𝐦 | | \mbfm | 𝐥 | | \mbfl | -| 𝐤 | | \mbfk | 𝐣 | | \mbfj | 𝐢 | | \mbfi | 𝐡 | | \mbfh | -| 𝐠 | | \mbfg | 𝐟 | | \mbff | 𝐞 | | \mbfe | 𝐝 | | \mbfd | -| 𝐜 | | \mbfc | 𝐛 | | \mbfb | 𝐚 | | \mbfa | 𝐙 | | \mbfZ | -| 𝐘 | | \mbfY | 𝐗 | | \mbfX | 𝐖 | | \mbfW | 𝐕 | | \mbfV | -| 𝐔 | | \mbfU | 𝐓 | | \mbfT | 𝐒 | | \mbfS | 𝐑 | | \mbfR | -| 𝐐 | | \mbfQ | 𝐏 | | \mbfP | 𝐎 | | \mbfO | 𝐍 | | \mbfN | -| 𝐌 | | \mbfM | 𝐋 | | \mbfL | 𝐊 | | \mbfK | 𝐉 | | \mbfJ | -| 𝐈 | | \mbfI | 𝐇 | | \mbfH | 𝐆 | | \mbfG | 𝐅 | | \mbfF | -| 𝐄 | | \mbfE | 𝐃 | | \mbfD | 𝐂 | | \mbfC | 𝐁 | | \mbfB | -| 𝐀 | | \mbfA | ϶ | | \upbackepsilon | ϰ | | \varkappa | ϐ | | \varbeta | -| ο | | \mupomicron | Χ | | \mupChi | Τ | | \mupTau | Ρ | | \mupRho | -| Ο | | \mupOmicron | Ν | | \mupNu | Μ | | \mupMu | Λ | | \mupLambda | -| Κ | | \mupKappa | Ι | | \mupIota | Θ | | \mupTheta | Η | | \mupEta | -| Ζ | | \mupZeta | Ε | | \mupEpsilon | Δ | | \mupDelta | Γ | | \mupGamma | -| Β | | \mupBeta | Α | | \mupAlpha | ͍ | | \underleftrightarrow | ̚ | | \droang | -| ̕ | | \ocommatopright | ̒ | | \oturnedcomma | ̐ | | \candra | ̌ | | \check | -| ̉ | | \ovhook | ̈ | | \ddot | ̇ | | \dot | ̆ | | \breve | -| ̃ | | \tilde | ́ | | \acute | ̀ | | \grave | € | | \euro | +| € | | \euro | ̀ | | \grave | ́ | | \acute | ̃ | | \tilde | +| ̆ | | \breve | ̇ | | \dot | ̈ | | \ddot | ̉ | | \ovhook | +| ̌ | | \check | ̐ | | \candra | ̒ | | \oturnedcomma | ̕ | | \ocommatopright | +| ̚ | | \droang | ͍ | | \underleftrightarrow | Α | | \mupAlpha | Β | | \mupBeta | +| Γ | | \mupGamma | Δ | | \mupDelta | Ε | | \mupEpsilon | Ζ | | \mupZeta | +| Η | | \mupEta | Θ | | \mupTheta | Ι | | \mupIota | Κ | | \mupKappa | +| Λ | | \mupLambda | Μ | | \mupMu | Ν | | \mupNu | Ο | | \mupOmicron | +| Ρ | | \mupRho | Τ | | \mupTau | Χ | | \mupChi | ο | | \mupomicron | +| ϐ | | \varbeta | ϰ | | \varkappa | ϶ | | \upbackepsilon | 𝐀 | | \mbfA | +| 𝐁 | | \mbfB | 𝐂 | | \mbfC | 𝐃 | | \mbfD | 𝐄 | | \mbfE | +| 𝐅 | | \mbfF | 𝐆 | | \mbfG | 𝐇 | | \mbfH | 𝐈 | | \mbfI | +| 𝐉 | | \mbfJ | 𝐊 | | \mbfK | 𝐋 | | \mbfL | 𝐌 | | \mbfM | +| 𝐍 | | \mbfN | 𝐎 | | \mbfO | 𝐏 | | \mbfP | 𝐐 | | \mbfQ | +| 𝐑 | | \mbfR | 𝐒 | | \mbfS | 𝐓 | | \mbfT | 𝐔 | | \mbfU | +| 𝐕 | | \mbfV | 𝐖 | | \mbfW | 𝐗 | | \mbfX | 𝐘 | | \mbfY | +| 𝐙 | | \mbfZ | 𝐚 | | \mbfa | 𝐛 | | \mbfb | 𝐜 | | \mbfc | +| 𝐝 | | \mbfd | 𝐞 | | \mbfe | 𝐟 | | \mbff | 𝐠 | | \mbfg | +| 𝐡 | | \mbfh | 𝐢 | | \mbfi | 𝐣 | | \mbfj | 𝐤 | | \mbfk | +| 𝐥 | | \mbfl | 𝐦 | | \mbfm | 𝐧 | | \mbfn | 𝐨 | | \mbfo | +| 𝐩 | | \mbfp | 𝐪 | | \mbfq | 𝐫 | | \mbfr | 𝐬 | | \mbfs | +| 𝐭 | | \mbft | 𝐮 | | \mbfu | 𝐯 | | \mbfv | 𝐰 | | \mbfw | +| 𝐱 | | \mbfx | 𝐲 | | \mbfy | 𝐳 | | \mbfz | 𝐴 | | \mitA | +| 𝐵 | | \mitB | 𝐶 | | \mitC | 𝐷 | | \mitD | 𝐸 | | \mitE | +| 𝐹 | | \mitF | 𝐺 | | \mitG | 𝐻 | | \mitH | 𝐼 | | \mitI | +| 𝐽 | | \mitJ | 𝐾 | | \mitK | 𝐿 | | \mitL | 𝑀 | | \mitM | +| 𝑁 | | \mitN | 𝑂 | | \mitO | 𝑃 | | \mitP | 𝑄 | | \mitQ | +| 𝑅 | | \mitR | 𝑆 | | \mitS | 𝑇 | | \mitT | 𝑈 | | \mitU | +| 𝑉 | | \mitV | 𝑊 | | \mitW | 𝑋 | | \mitX | 𝑌 | | \mitY | +| 𝑍 | | \mitZ | 𝑎 | | \mita | 𝑏 | | \mitb | 𝑐 | | \mitc | +| 𝑑 | | \mitd | 𝑒 | | \mite | 𝑓 | | \mitf | 𝑔 | | \mitg | +| 𝑖 | | \miti | 𝑗 | | \mitj | 𝑘 | | \mitk | 𝑙 | | \mitl | +| 𝑚 | | \mitm | 𝑛 | | \mitn | 𝑜 | | \mito | 𝑝 | | \mitp | +| 𝑞 | | \mitq | 𝑟 | | \mitr | 𝑠 | | \mits | 𝑡 | | \mitt | +| 𝑢 | | \mitu | 𝑣 | | \mitv | 𝑤 | | \mitw | 𝑥 | | \mitx | +| 𝑦 | | \mity | 𝑧 | | \mitz | 𝑨 | | \mbfitA | 𝑩 | | \mbfitB | +| 𝑪 | | \mbfitC | 𝑫 | | \mbfitD | 𝑬 | | \mbfitE | 𝑭 | | \mbfitF | +| 𝑮 | | \mbfitG | 𝑯 | | \mbfitH | 𝑰 | | \mbfitI | 𝑱 | | \mbfitJ | +| 𝑲 | | \mbfitK | 𝑳 | | \mbfitL | 𝑴 | | \mbfitM | 𝑵 | | \mbfitN | +| 𝑶 | | \mbfitO | 𝑷 | | \mbfitP | 𝑸 | | \mbfitQ | 𝑹 | | \mbfitR | +| 𝑺 | | \mbfitS | 𝑻 | | \mbfitT | 𝑼 | | \mbfitU | 𝑽 | | \mbfitV | +| 𝑾 | | \mbfitW | 𝑿 | | \mbfitX | 𝒀 | | \mbfitY | 𝒁 | | \mbfitZ | +| 𝒂 | | \mbfita | 𝒃 | | \mbfitb | 𝒄 | | \mbfitc | 𝒅 | | \mbfitd | +| 𝒆 | | \mbfite | 𝒇 | | \mbfitf | 𝒈 | | \mbfitg | 𝒉 | | \mbfith | +| 𝒊 | | \mbfiti | 𝒋 | | \mbfitj | 𝒌 | | \mbfitk | 𝒍 | | \mbfitl | +| 𝒎 | | \mbfitm | 𝒏 | | \mbfitn | 𝒐 | | \mbfito | 𝒑 | | \mbfitp | +| 𝒒 | | \mbfitq | 𝒓 | | \mbfitr | 𝒔 | | \mbfits | 𝒕 | | \mbfitt | +| 𝒖 | | \mbfitu | 𝒗 | | \mbfitv | 𝒘 | | \mbfitw | 𝒙 | | \mbfitx | +| 𝒚 | | \mbfity | 𝒛 | | \mbfitz | 𝒜 | | \mscrA | 𝒞 | | \mscrC | +| 𝒟 | | \mscrD | 𝒢 | | \mscrG | 𝒥 | | \mscrJ | 𝒦 | | \mscrK | +| 𝒩 | | \mscrN | 𝒪 | | \mscrO | 𝒫 | | \mscrP | 𝒬 | | \mscrQ | +| 𝒮 | | \mscrS | 𝒯 | | \mscrT | 𝒰 | | \mscrU | 𝒱 | | \mscrV | +| 𝒲 | | \mscrW | 𝒳 | | \mscrX | 𝒴 | | \mscrY | 𝒵 | | \mscrZ | +| 𝒶 | | \mscra | 𝒷 | | \mscrb | 𝒸 | | \mscrc | 𝒹 | | \mscrd | +| 𝒻 | | \mscrf | 𝒽 | | \mscrh | 𝒾 | | \mscri | 𝒿 | | \mscrj | +| 𝓀 | | \mscrk | 𝓁 | | \mscrl | 𝓂 | | \mscrm | 𝓃 | | \mscrn | +| 𝓅 | | \mscrp | 𝓆 | | \mscrq | 𝓇 | | \mscrr | 𝓈 | | \mscrs | +| 𝓉 | | \mscrt | 𝓊 | | \mscru | 𝓋 | | \mscrv | 𝓌 | | \mscrw | +| 𝓍 | | \mscrx | 𝓎 | | \mscry | 𝓏 | | \mscrz | 𝓐 | | \mbfscrA | +| 𝓑 | | \mbfscrB | 𝓒 | | \mbfscrC | 𝓓 | | \mbfscrD | 𝓔 | | \mbfscrE | +| 𝓕 | | \mbfscrF | 𝓖 | | \mbfscrG | 𝓗 | | \mbfscrH | 𝓘 | | \mbfscrI | +| 𝓙 | | \mbfscrJ | 𝓚 | | \mbfscrK | 𝓛 | | \mbfscrL | 𝓜 | | \mbfscrM | +| 𝓝 | | \mbfscrN | 𝓞 | | \mbfscrO | 𝓟 | | \mbfscrP | 𝓠 | | \mbfscrQ | +| 𝓡 | | \mbfscrR | 𝓢 | | \mbfscrS | 𝓣 | | \mbfscrT | 𝓤 | | \mbfscrU | +| 𝓥 | | \mbfscrV | 𝓦 | | \mbfscrW | 𝓧 | | \mbfscrX | 𝓨 | | \mbfscrY | +| 𝓩 | | \mbfscrZ | 𝓪 | | \mbfscra | 𝓫 | | \mbfscrb | 𝓬 | | \mbfscrc | +| 𝓭 | | \mbfscrd | 𝓮 | | \mbfscre | 𝓯 | | \mbfscrf | 𝓰 | | \mbfscrg | +| 𝓱 | | \mbfscrh | 𝓲 | | \mbfscri | 𝓳 | | \mbfscrj | 𝓴 | | \mbfscrk | +| 𝓵 | | \mbfscrl | 𝓶 | | \mbfscrm | 𝓷 | | \mbfscrn | 𝓸 | | \mbfscro | +| 𝓹 | | \mbfscrp | 𝓺 | | \mbfscrq | 𝓻 | | \mbfscrr | 𝓼 | | \mbfscrs | +| 𝓽 | | \mbfscrt | 𝓾 | | \mbfscru | 𝓿 | | \mbfscrv | 𝔀 | | \mbfscrw | +| 𝔁 | | \mbfscrx | 𝔂 | | \mbfscry | 𝔃 | | \mbfscrz | 𝔄 | | \mfrakA | +| 𝔅 | | \mfrakB | 𝔇 | | \mfrakD | 𝔈 | | \mfrakE | 𝔉 | | \mfrakF | +| 𝔊 | | \mfrakG | 𝔍 | | \mfrakJ | 𝔎 | | \mfrakK | 𝔏 | | \mfrakL | +| 𝔐 | | \mfrakM | 𝔑 | | \mfrakN | 𝔒 | | \mfrakO | 𝔓 | | \mfrakP | +| 𝔔 | | \mfrakQ | 𝔖 | | \mfrakS | 𝔗 | | \mfrakT | 𝔘 | | \mfrakU | +| 𝔙 | | \mfrakV | 𝔚 | | \mfrakW | 𝔛 | | \mfrakX | 𝔜 | | \mfrakY | +| 𝔞 | | \mfraka | 𝔟 | | \mfrakb | 𝔠 | | \mfrakc | 𝔡 | | \mfrakd | +| 𝔢 | | \mfrake | 𝔣 | | \mfrakf | 𝔤 | | \mfrakg | 𝔥 | | \mfrakh | +| 𝔦 | | \mfraki | 𝔧 | | \mfrakj | 𝔨 | | \mfrakk | 𝔩 | | \mfrakl | +| 𝔪 | | \mfrakm | 𝔫 | | \mfrakn | 𝔬 | | \mfrako | 𝔭 | | \mfrakp | +| 𝔮 | | \mfrakq | 𝔯 | | \mfrakr | 𝔰 | | \mfraks | 𝔱 | | \mfrakt | +| 𝔲 | | \mfraku | 𝔳 | | \mfrakv | 𝔴 | | \mfrakw | 𝔵 | | \mfrakx | +| 𝔶 | | \mfraky | 𝔷 | | \mfrakz | 𝔸 | | \BbbA | 𝔹 | | \BbbB | +| 𝔻 | | \BbbD | 𝔼 | | \BbbE | 𝔽 | | \BbbF | 𝔾 | | \BbbG | +| 𝕀 | | \BbbI | 𝕁 | | \BbbJ | 𝕂 | | \BbbK | 𝕃 | | \BbbL | +| 𝕄 | | \BbbM | 𝕆 | | \BbbO | 𝕊 | | \BbbS | 𝕋 | | \BbbT | +| 𝕌 | | \BbbU | 𝕍 | | \BbbV | 𝕎 | | \BbbW | 𝕏 | | \BbbX | +| 𝕐 | | \BbbY | 𝕒 | | \Bbba | 𝕓 | | \Bbbb | 𝕔 | | \Bbbc | +| 𝕕 | | \Bbbd | 𝕖 | | \Bbbe | 𝕗 | | \Bbbf | 𝕘 | | \Bbbg | +| 𝕙 | | \Bbbh | 𝕚 | | \Bbbi | 𝕛 | | \Bbbj | 𝕜 | | \Bbbk | +| 𝕝 | | \Bbbl | 𝕞 | | \Bbbm | 𝕟 | | \Bbbn | 𝕠 | | \Bbbo | +| 𝕡 | | \Bbbp | 𝕢 | | \Bbbq | 𝕣 | | \Bbbr | 𝕤 | | \Bbbs | +| 𝕥 | | \Bbbt | 𝕦 | | \Bbbu | 𝕧 | | \Bbbv | 𝕨 | | \Bbbw | +| 𝕩 | | \Bbbx | 𝕪 | | \Bbby | 𝕫 | | \Bbbz | 𝕬 | | \mbffrakA | +| 𝕭 | | \mbffrakB | 𝕮 | | \mbffrakC | 𝕯 | | \mbffrakD | 𝕰 | | \mbffrakE | +| 𝕱 | | \mbffrakF | 𝕲 | | \mbffrakG | 𝕳 | | \mbffrakH | 𝕴 | | \mbffrakI | +| 𝕵 | | \mbffrakJ | 𝕶 | | \mbffrakK | 𝕷 | | \mbffrakL | 𝕸 | | \mbffrakM | +| 𝕹 | | \mbffrakN | 𝕺 | | \mbffrakO | 𝕻 | | \mbffrakP | 𝕼 | | \mbffrakQ | +| 𝕽 | | \mbffrakR | 𝕾 | | \mbffrakS | 𝕿 | | \mbffrakT | 𝖀 | | \mbffrakU | +| 𝖁 | | \mbffrakV | 𝖂 | | \mbffrakW | 𝖃 | | \mbffrakX | 𝖄 | | \mbffrakY | +| 𝖅 | | \mbffrakZ | 𝖆 | | \mbffraka | 𝖇 | | \mbffrakb | 𝖈 | | \mbffrakc | +| 𝖉 | | \mbffrakd | 𝖊 | | \mbffrake | 𝖋 | | \mbffrakf | 𝖌 | | \mbffrakg | +| 𝖍 | | \mbffrakh | 𝖎 | | \mbffraki | 𝖏 | | \mbffrakj | 𝖐 | | \mbffrakk | +| 𝖑 | | \mbffrakl | 𝖒 | | \mbffrakm | 𝖓 | | \mbffrakn | 𝖔 | | \mbffrako | +| 𝖕 | | \mbffrakp | 𝖖 | | \mbffrakq | 𝖗 | | \mbffrakr | 𝖘 | | \mbffraks | +| 𝖙 | | \mbffrakt | 𝖚 | | \mbffraku | 𝖛 | | \mbffrakv | 𝖜 | | \mbffrakw | +| 𝖝 | | \mbffrakx | 𝖞 | | \mbffraky | 𝖟 | | \mbffrakz | 𝖠 | | \msansA | +| 𝖡 | | \msansB | 𝖢 | | \msansC | 𝖣 | | \msansD | 𝖤 | | \msansE | +| 𝖥 | | \msansF | 𝖦 | | \msansG | 𝖧 | | \msansH | 𝖨 | | \msansI | +| 𝖩 | | \msansJ | 𝖪 | | \msansK | 𝖫 | | \msansL | 𝖬 | | \msansM | +| 𝖭 | | \msansN | 𝖮 | | \msansO | 𝖯 | | \msansP | 𝖰 | | \msansQ | +| 𝖱 | | \msansR | 𝖲 | | \msansS | 𝖳 | | \msansT | 𝖴 | | \msansU | +| 𝖵 | | \msansV | 𝖶 | | \msansW | 𝖷 | | \msansX | 𝖸 | | \msansY | +| 𝖹 | | \msansZ | 𝖺 | | \msansa | 𝖻 | | \msansb | 𝖼 | | \msansc | +| 𝖽 | | \msansd | 𝖾 | | \msanse | 𝖿 | | \msansf | 𝗀 | | \msansg | +| 𝗁 | | \msansh | 𝗂 | | \msansi | 𝗃 | | \msansj | 𝗄 | | \msansk | +| 𝗅 | | \msansl | 𝗆 | | \msansm | 𝗇 | | \msansn | 𝗈 | | \msanso | +| 𝗉 | | \msansp | 𝗊 | | \msansq | 𝗋 | | \msansr | 𝗌 | | \msanss | +| 𝗍 | | \msanst | 𝗎 | | \msansu | 𝗏 | | \msansv | 𝗐 | | \msansw | +| 𝗑 | | \msansx | 𝗒 | | \msansy | 𝗓 | | \msansz | 𝗔 | | \mbfsansA | +| 𝗕 | | \mbfsansB | 𝗖 | | \mbfsansC | 𝗗 | | \mbfsansD | 𝗘 | | \mbfsansE | +| 𝗙 | | \mbfsansF | 𝗚 | | \mbfsansG | 𝗛 | | \mbfsansH | 𝗜 | | \mbfsansI | +| 𝗝 | | \mbfsansJ | 𝗞 | | \mbfsansK | 𝗟 | | \mbfsansL | 𝗠 | | \mbfsansM | +| 𝗡 | | \mbfsansN | 𝗢 | | \mbfsansO | 𝗣 | | \mbfsansP | 𝗤 | | \mbfsansQ | +| 𝗥 | | \mbfsansR | 𝗦 | | \mbfsansS | 𝗧 | | \mbfsansT | 𝗨 | | \mbfsansU | +| 𝗩 | | \mbfsansV | 𝗪 | | \mbfsansW | 𝗫 | | \mbfsansX | 𝗬 | | \mbfsansY | +| 𝗭 | | \mbfsansZ | 𝗮 | | \mbfsansa | 𝗯 | | \mbfsansb | 𝗰 | | \mbfsansc | +| 𝗱 | | \mbfsansd | 𝗲 | | \mbfsanse | 𝗳 | | \mbfsansf | 𝗴 | | \mbfsansg | +| 𝗵 | | \mbfsansh | 𝗶 | | \mbfsansi | 𝗷 | | \mbfsansj | 𝗸 | | \mbfsansk | +| 𝗹 | | \mbfsansl | 𝗺 | | \mbfsansm | 𝗻 | | \mbfsansn | 𝗼 | | \mbfsanso | +| 𝗽 | | \mbfsansp | 𝗾 | | \mbfsansq | 𝗿 | | \mbfsansr | 𝘀 | | \mbfsanss | +| 𝘁 | | \mbfsanst | 𝘂 | | \mbfsansu | 𝘃 | | \mbfsansv | 𝘄 | | \mbfsansw | +| 𝘅 | | \mbfsansx | 𝘆 | | \mbfsansy | 𝘇 | | \mbfsansz | 𝘈 | | \mitsansA | +| 𝘉 | | \mitsansB | 𝘊 | | \mitsansC | 𝘋 | | \mitsansD | 𝘌 | | \mitsansE | +| 𝘍 | | \mitsansF | 𝘎 | | \mitsansG | 𝘏 | | \mitsansH | 𝘐 | | \mitsansI | +| 𝘑 | | \mitsansJ | 𝘒 | | \mitsansK | 𝘓 | | \mitsansL | 𝘔 | | \mitsansM | +| 𝘕 | | \mitsansN | 𝘖 | | \mitsansO | 𝘗 | | \mitsansP | 𝘘 | | \mitsansQ | +| 𝘙 | | \mitsansR | 𝘚 | | \mitsansS | 𝘛 | | \mitsansT | 𝘜 | | \mitsansU | +| 𝘝 | | \mitsansV | 𝘞 | | \mitsansW | 𝘟 | | \mitsansX | 𝘠 | | \mitsansY | +| 𝘡 | | \mitsansZ | 𝘢 | | \mitsansa | 𝘣 | | \mitsansb | 𝘤 | | \mitsansc | +| 𝘥 | | \mitsansd | 𝘦 | | \mitsanse | 𝘧 | | \mitsansf | 𝘨 | | \mitsansg | +| 𝘩 | | \mitsansh | 𝘪 | | \mitsansi | 𝘫 | | \mitsansj | 𝘬 | | \mitsansk | +| 𝘭 | | \mitsansl | 𝘮 | | \mitsansm | 𝘯 | | \mitsansn | 𝘰 | | \mitsanso | +| 𝘱 | | \mitsansp | 𝘲 | | \mitsansq | 𝘳 | | \mitsansr | 𝘴 | | \mitsanss | +| 𝘵 | | \mitsanst | 𝘶 | | \mitsansu | 𝘷 | | \mitsansv | 𝘸 | | \mitsansw | +| 𝘹 | | \mitsansx | 𝘺 | | \mitsansy | 𝘻 | | \mitsansz | 𝘼 | | \mbfitsansA | +| 𝘽 | | \mbfitsansB | 𝘾 | | \mbfitsansC | 𝘿 | | \mbfitsansD | 𝙀 | | \mbfitsansE | +| 𝙁 | | \mbfitsansF | 𝙂 | | \mbfitsansG | 𝙃 | | \mbfitsansH | 𝙄 | | \mbfitsansI | +| 𝙅 | | \mbfitsansJ | 𝙆 | | \mbfitsansK | 𝙇 | | \mbfitsansL | 𝙈 | | \mbfitsansM | +| 𝙉 | | \mbfitsansN | 𝙊 | | \mbfitsansO | 𝙋 | | \mbfitsansP | 𝙌 | | \mbfitsansQ | +| 𝙍 | | \mbfitsansR | 𝙎 | | \mbfitsansS | 𝙏 | | \mbfitsansT | 𝙐 | | \mbfitsansU | +| 𝙑 | | \mbfitsansV | 𝙒 | | \mbfitsansW | 𝙓 | | \mbfitsansX | 𝙔 | | \mbfitsansY | +| 𝙕 | | \mbfitsansZ | 𝙖 | | \mbfitsansa | 𝙗 | | \mbfitsansb | 𝙘 | | \mbfitsansc | +| 𝙙 | | \mbfitsansd | 𝙚 | | \mbfitsanse | 𝙛 | | \mbfitsansf | 𝙜 | | \mbfitsansg | +| 𝙝 | | \mbfitsansh | 𝙞 | | \mbfitsansi | 𝙟 | | \mbfitsansj | 𝙠 | | \mbfitsansk | +| 𝙡 | | \mbfitsansl | 𝙢 | | \mbfitsansm | 𝙣 | | \mbfitsansn | 𝙤 | | \mbfitsanso | +| 𝙥 | | \mbfitsansp | 𝙦 | | \mbfitsansq | 𝙧 | | \mbfitsansr | 𝙨 | | \mbfitsanss | +| 𝙩 | | \mbfitsanst | 𝙪 | | \mbfitsansu | 𝙫 | | \mbfitsansv | 𝙬 | | \mbfitsansw | +| 𝙭 | | \mbfitsansx | 𝙮 | | \mbfitsansy | 𝙯 | | \mbfitsansz | 𝙰 | | \mttA | +| 𝙱 | | \mttB | 𝙲 | | \mttC | 𝙳 | | \mttD | 𝙴 | | \mttE | +| 𝙵 | | \mttF | 𝙶 | | \mttG | 𝙷 | | \mttH | 𝙸 | | \mttI | +| 𝙹 | | \mttJ | 𝙺 | | \mttK | 𝙻 | | \mttL | 𝙼 | | \mttM | +| 𝙽 | | \mttN | 𝙾 | | \mttO | 𝙿 | | \mttP | 𝚀 | | \mttQ | +| 𝚁 | | \mttR | 𝚂 | | \mttS | 𝚃 | | \mttT | 𝚄 | | \mttU | +| 𝚅 | | \mttV | 𝚆 | | \mttW | 𝚇 | | \mttX | 𝚈 | | \mttY | +| 𝚉 | | \mttZ | 𝚊 | | \mtta | 𝚋 | | \mttb | 𝚌 | | \mttc | +| 𝚍 | | \mttd | 𝚎 | | \mtte | 𝚏 | | \mttf | 𝚐 | | \mttg | +| 𝚑 | | \mtth | 𝚒 | | \mtti | 𝚓 | | \mttj | 𝚔 | | \mttk | +| 𝚕 | | \mttl | 𝚖 | | \mttm | 𝚗 | | \mttn | 𝚘 | | \mtto | +| 𝚙 | | \mttp | 𝚚 | | \mttq | 𝚛 | | \mttr | 𝚜 | | \mtts | +| 𝚝 | | \mttt | 𝚞 | | \mttu | 𝚟 | | \mttv | 𝚠 | | \mttw | +| 𝚡 | | \mttx | 𝚢 | | \mtty | 𝚣 | | \mttz | 𝚤 | | \imath | +| 𝚥 | | \jmath | 𝚨 | | \mbfAlpha | 𝚩 | | \mbfBeta | 𝚪 | | \mbfGamma | +| 𝚫 | | \mbfDelta | 𝚬 | | \mbfEpsilon | 𝚭 | | \mbfZeta | 𝚮 | | \mbfEta | +| 𝚯 | | \mbfTheta | 𝚰 | | \mbfIota | 𝚱 | | \mbfKappa | 𝚲 | | \mbfLambda | +| 𝚳 | | \mbfMu | 𝚴 | | \mbfNu | 𝚵 | | \mbfXi | 𝚶 | | \mbfOmicron | +| 𝚷 | | \mbfPi | 𝚸 | | \mbfRho | 𝚹 | | \mbfvarTheta | 𝚺 | | \mbfSigma | +| 𝚻 | | \mbfTau | 𝚼 | | \mbfUpsilon | 𝚽 | | \mbfPhi | 𝚾 | | \mbfChi | +| 𝚿 | | \mbfPsi | 𝛀 | | \mbfOmega | 𝛁 | | \mbfnabla | 𝛂 | | \mbfalpha | +| 𝛃 | | \mbfbeta | 𝛄 | | \mbfgamma | 𝛅 | | \mbfdelta | 𝛆 | | \mbfvarepsilon | +| 𝛇 | | \mbfzeta | 𝛈 | | \mbfeta | 𝛉 | | \mbftheta | 𝛊 | | \mbfiota | +| 𝛋 | | \mbfkappa | 𝛌 | | \mbflambda | 𝛍 | | \mbfmu | 𝛎 | | \mbfnu | +| 𝛏 | | \mbfxi | 𝛐 | | \mbfomicron | 𝛑 | | \mbfpi | 𝛒 | | \mbfrho | +| 𝛓 | | \mbfvarsigma | 𝛔 | | \mbfsigma | 𝛕 | | \mbftau | 𝛖 | | \mbfupsilon | +| 𝛗 | | \mbfvarphi | 𝛘 | | \mbfchi | 𝛙 | | \mbfpsi | 𝛚 | | \mbfomega | +| 𝛛 | | \mbfpartial | 𝛜 | | \mbfepsilon | 𝛝 | | \mbfvartheta | 𝛞 | | \mbfvarkappa | +| 𝛟 | | \mbfphi | 𝛠 | | \mbfvarrho | 𝛡 | | \mbfvarpi | 𝛢 | | \mitAlpha | +| 𝛣 | | \mitBeta | 𝛤 | | \mitGamma | 𝛥 | | \mitDelta | 𝛦 | | \mitEpsilon | +| 𝛧 | | \mitZeta | 𝛨 | | \mitEta | 𝛩 | | \mitTheta | 𝛪 | | \mitIota | +| 𝛫 | | \mitKappa | 𝛬 | | \mitLambda | 𝛭 | | \mitMu | 𝛮 | | \mitNu | +| 𝛯 | | \mitXi | 𝛰 | | \mitOmicron | 𝛱 | | \mitPi | 𝛲 | | \mitRho | +| 𝛳 | | \mitvarTheta | 𝛴 | | \mitSigma | 𝛵 | | \mitTau | 𝛶 | | \mitUpsilon | +| 𝛷 | | \mitPhi | 𝛸 | | \mitChi | 𝛹 | | \mitPsi | 𝛺 | | \mitOmega | +| 𝛻 | | \mitnabla | 𝛼 | | \mitalpha | 𝛽 | | \mitbeta | 𝛾 | | \mitgamma | +| 𝛿 | | \mitdelta | 𝜀 | | \mitvarepsilon | 𝜁 | | \mitzeta | 𝜂 | | \miteta | +| 𝜃 | | \mittheta | 𝜄 | | \mitiota | 𝜅 | | \mitkappa | 𝜆 | | \mitlambda | +| 𝜇 | | \mitmu | 𝜈 | | \mitnu | 𝜉 | | \mitxi | 𝜊 | | \mitomicron | +| 𝜋 | | \mitpi | 𝜌 | | \mitrho | 𝜍 | | \mitvarsigma | 𝜎 | | \mitsigma | +| 𝜏 | | \mittau | 𝜐 | | \mitupsilon | 𝜑 | | \mitvarphi | 𝜒 | | \mitchi | +| 𝜓 | | \mitpsi | 𝜔 | | \mitomega | 𝜕 | | \mitpartial | 𝜖 | | \mitepsilon | +| 𝜗 | | \mitvartheta | 𝜘 | | \mitvarkappa | 𝜙 | | \mitphi | 𝜚 | | \mitvarrho | +| 𝜛 | | \mitvarpi | 𝜜 | | \mbfitAlpha | 𝜝 | | \mbfitBeta | 𝜞 | | \mbfitGamma | +| 𝜟 | | \mbfitDelta | 𝜠 | | \mbfitEpsilon | 𝜡 | | \mbfitZeta | 𝜢 | | \mbfitEta | +| 𝜣 | | \mbfitTheta | 𝜤 | | \mbfitIota | 𝜥 | | \mbfitKappa | 𝜦 | | \mbfitLambda | +| 𝜧 | | \mbfitMu | 𝜨 | | \mbfitNu | 𝜩 | | \mbfitXi | 𝜪 | | \mbfitOmicron | +| 𝜫 | | \mbfitPi | 𝜬 | | \mbfitRho | 𝜭 | | \mbfitvarTheta | 𝜮 | | \mbfitSigma | +| 𝜯 | | \mbfitTau | 𝜰 | | \mbfitUpsilon | 𝜱 | | \mbfitPhi | 𝜲 | | \mbfitChi | +| 𝜳 | | \mbfitPsi | 𝜴 | | \mbfitOmega | 𝜵 | | \mbfitnabla | 𝜶 | | \mbfitalpha | +| 𝜷 | | \mbfitbeta | 𝜸 | | \mbfitgamma | 𝜹 | | \mbfitdelta | 𝜺 | | \mbfitvarepsilon | +| 𝜻 | | \mbfitzeta | 𝜼 | | \mbfiteta | 𝜽 | | \mbfittheta | 𝜾 | | \mbfitiota | +| 𝜿 | | \mbfitkappa | 𝝀 | | \mbfitlambda | 𝝁 | | \mbfitmu | 𝝂 | | \mbfitnu | +| 𝝃 | | \mbfitxi | 𝝄 | | \mbfitomicron | 𝝅 | | \mbfitpi | 𝝆 | | \mbfitrho | +| 𝝇 | | \mbfitvarsigma | 𝝈 | | \mbfitsigma | 𝝉 | | \mbfittau | 𝝊 | | \mbfitupsilon | +| 𝝋 | | \mbfitvarphi | 𝝌 | | \mbfitchi | 𝝍 | | \mbfitpsi | 𝝎 | | \mbfitomega | +| 𝝏 | | \mbfitpartial | 𝝐 | | \mbfitepsilon | 𝝑 | | \mbfitvartheta | 𝝒 | | \mbfitvarkappa | +| 𝝓 | | \mbfitphi | 𝝔 | | \mbfitvarrho | 𝝕 | | \mbfitvarpi | 𝝖 | | \mbfsansAlpha | +| 𝝗 | | \mbfsansBeta | 𝝘 | | \mbfsansGamma | 𝝙 | | \mbfsansDelta | 𝝚 | | \mbfsansEpsilon | +| 𝝛 | | \mbfsansZeta | 𝝜 | | \mbfsansEta | 𝝝 | | \mbfsansTheta | 𝝞 | | \mbfsansIota | +| 𝝟 | | \mbfsansKappa | 𝝠 | | \mbfsansLambda | 𝝡 | | \mbfsansMu | 𝝢 | | \mbfsansNu | +| 𝝣 | | \mbfsansXi | 𝝤 | | \mbfsansOmicron | 𝝥 | | \mbfsansPi | 𝝦 | | \mbfsansRho | +| 𝝧 | | \mbfsansvarTheta | 𝝨 | | \mbfsansSigma | 𝝩 | | \mbfsansTau | 𝝪 | | \mbfsansUpsilon | +| 𝝫 | | \mbfsansPhi | 𝝬 | | \mbfsansChi | 𝝭 | | \mbfsansPsi | 𝝮 | | \mbfsansOmega | +| 𝝯 | | \mbfsansnabla | 𝝰 | | \mbfsansalpha | 𝝱 | | \mbfsansbeta | 𝝲 | | \mbfsansgamma | +| 𝝳 | | \mbfsansdelta | 𝝴 | | \mbfsansvarepsilon | 𝝵 | | \mbfsanszeta | 𝝶 | | \mbfsanseta | +| 𝝷 | | \mbfsanstheta | 𝝸 | | \mbfsansiota | 𝝹 | | \mbfsanskappa | 𝝺 | | \mbfsanslambda | +| 𝝻 | | \mbfsansmu | 𝝼 | | \mbfsansnu | 𝝽 | | \mbfsansxi | 𝝾 | | \mbfsansomicron | +| 𝝿 | | \mbfsanspi | 𝞀 | | \mbfsansrho | 𝞁 | | \mbfsansvarsigma | 𝞂 | | \mbfsanssigma | +| 𝞃 | | \mbfsanstau | 𝞄 | | \mbfsansupsilon | 𝞅 | | \mbfsansvarphi | 𝞆 | | \mbfsanschi | +| 𝞇 | | \mbfsanspsi | 𝞈 | | \mbfsansomega | 𝞉 | | \mbfsanspartial | 𝞊 | | \mbfsansepsilon | +| 𝞋 | | \mbfsansvartheta | 𝞌 | | \mbfsansvarkappa | 𝞍 | | \mbfsansphi | 𝞎 | | \mbfsansvarrho | +| 𝞏 | | \mbfsansvarpi | 𝞐 | | \mbfitsansAlpha | 𝞑 | | \mbfitsansBeta | 𝞒 | | \mbfitsansGamma | +| 𝞓 | | \mbfitsansDelta | 𝞔 | | \mbfitsansEpsilon | 𝞕 | | \mbfitsansZeta | 𝞖 | | \mbfitsansEta | +| 𝞗 | | \mbfitsansTheta | 𝞘 | | \mbfitsansIota | 𝞙 | | \mbfitsansKappa | 𝞚 | | \mbfitsansLambda | +| 𝞛 | | \mbfitsansMu | 𝞜 | | \mbfitsansNu | 𝞝 | | \mbfitsansXi | 𝞞 | | \mbfitsansOmicron | +| 𝞟 | | \mbfitsansPi | 𝞠 | | \mbfitsansRho | 𝞡 | | \mbfitsansvarTheta | 𝞢 | | \mbfitsansSigma | +| 𝞣 | | \mbfitsansTau | 𝞤 | | \mbfitsansUpsilon | 𝞥 | | \mbfitsansPhi | 𝞦 | | \mbfitsansChi | +| 𝞧 | | \mbfitsansPsi | 𝞨 | | \mbfitsansOmega | 𝞩 | | \mbfitsansnabla | 𝞪 | | \mbfitsansalpha | +| 𝞫 | | \mbfitsansbeta | 𝞬 | | \mbfitsansgamma | 𝞭 | | \mbfitsansdelta | 𝞮 | | \mbfitsansvarepsilon | +| 𝞯 | | \mbfitsanszeta | 𝞰 | | \mbfitsanseta | 𝞱 | | \mbfitsanstheta | 𝞲 | | \mbfitsansiota | +| 𝞳 | | \mbfitsanskappa | 𝞴 | | \mbfitsanslambda | 𝞵 | | \mbfitsansmu | 𝞶 | | \mbfitsansnu | +| 𝞷 | | \mbfitsansxi | 𝞸 | | \mbfitsansomicron | 𝞹 | | \mbfitsanspi | 𝞺 | | \mbfitsansrho | +| 𝞻 | | \mbfitsansvarsigma | 𝞼 | | \mbfitsanssigma | 𝞽 | | \mbfitsanstau | 𝞾 | | \mbfitsansupsilon | +| 𝞿 | | \mbfitsansvarphi | 𝟀 | | \mbfitsanschi | 𝟁 | | \mbfitsanspsi | 𝟂 | | \mbfitsansomega | +| 𝟃 | | \mbfitsanspartial | 𝟄 | | \mbfitsansepsilon | 𝟅 | | \mbfitsansvartheta | 𝟆 | | \mbfitsansvarkappa | +| 𝟇 | | \mbfitsansphi | 𝟈 | | \mbfitsansvarrho | 𝟉 | | \mbfitsansvarpi | 𝟊 | | \mbfDigamma | +| 𝟋 | | \mbfdigamma | 𝟎 | | \mbfzero | 𝟏 | | \mbfone | 𝟐 | | \mbftwo | +| 𝟑 | | \mbfthree | 𝟒 | | \mbffour | 𝟓 | | \mbffive | 𝟔 | | \mbfsix | +| 𝟕 | | \mbfseven | 𝟖 | | \mbfeight | 𝟗 | | \mbfnine | 𝟘 | | \Bbbzero | +| 𝟙 | | \Bbbone | 𝟚 | | \Bbbtwo | 𝟛 | | \Bbbthree | 𝟜 | | \Bbbfour | +| 𝟝 | | \Bbbfive | 𝟞 | | \Bbbsix | 𝟟 | | \Bbbseven | 𝟠 | | \Bbbeight | +| 𝟡 | | \Bbbnine | 𝟢 | | \msanszero | 𝟣 | | \msansone | 𝟤 | | \msanstwo | +| 𝟥 | | \msansthree | 𝟦 | | \msansfour | 𝟧 | | \msansfive | 𝟨 | | \msanssix | +| 𝟩 | | \msansseven | 𝟪 | | \msanseight | 𝟫 | | \msansnine | 𝟬 | | \mbfsanszero | +| 𝟭 | | \mbfsansone | 𝟮 | | \mbfsanstwo | 𝟯 | | \mbfsansthree | 𝟰 | | \mbfsansfour | +| 𝟱 | | \mbfsansfive | 𝟲 | | \mbfsanssix | 𝟳 | | \mbfsansseven | 𝟴 | | \mbfsanseight | +| 𝟵 | | \mbfsansnine | 𝟶 | | \mttzero | 𝟷 | | \mttone | 𝟸 | | \mtttwo | +| 𝟹 | | \mttthree | 𝟺 | | \mttfour | 𝟻 | | \mttfive | 𝟼 | | \mttsix | +| 𝟽 | | \mttseven | 𝟾 | | \mtteight | 𝟿 | | \mttnine | ữ0 | | \arabicmaj | +| ữ1 | | \arabichad | ‐ | | \mathhyphen | ― | | \horizbar | ‗ | | \twolowline | +| ‥ | | \enleadertwodots | ″ | | \dprime | ‴ | | \trprime | ‵ | | \backprime | +| ‶ | | \backdprime | ‷ | | \backtrprime | ‸ | | \caretinsert | ‼ | | \Exclam | +| ⁀ | | \tieconcat | ⁃ | | \hyphenbullet | ⁄ | | \fracslash | ⁇ | | \Question | +| ⁐ | | \closure | ⁗ | | \qprime | ⃒ | | \vertoverlay | ⃗ | | \vec | +| ⃛ | | \dddot | ⃜ | | \ddddot | ⃝ | | \enclosecircle | ⃞ | | \enclosesquare | +| ⃟ | | \enclosediamond | ⃡ | | \overleftrightarrow | ⃤ | | \enclosetriangle | ⃧ | | \annuity | +| ⃨ | | \threeunderdot | ⃩ | | \widebridgeabove | ⃬ | | \underrightharpoondown | ⃭ | | \underleftharpoondown | +| ⃮ | | \underleftarrow | ⃯ | | \underrightarrow | ⃰ | | \asteraccent | ℎ | | \Planckconst | +| ℏ | | \hslash | ℒ | | \mscrL | ℛ | | \mscrR | ℧ | | \mho | +| ℩ | | \turnediota | Ⅎ | | \Finv | ℶ | | \beth | ℷ | | \gimel | +| ℸ | | \daleth | ⅁ | | \Game | ⅂ | | \sansLturned | ⅃ | | \sansLmirrored | +| ⅄ | | \Yup | ⅅ | | \CapitalDifferentialD | ⅊ | | \PropertyLine | ↚ | | \nleftarrow | +| ↛ | | \nrightarrow | ↞ | | \twoheadleftarrow | ↟ | | \twoheaduparrow | ↠ | | \twoheadrightarrow | +| ↡ | | \twoheaddownarrow | ↢ | | \leftarrowtail | ↣ | | \rightarrowtail | ↤ | | \mapsfrom | +| ↥ | | \mapsup | ↧ | | \mapsdown | ↨ | | \updownarrowbar | ↫ | | \looparrowleft | +| ↬ | | \looparrowright | ↭ | | \leftrightsquigarrow | ↮ | | \nleftrightarrow | ↰ | | \Lsh | +| ↱ | | \Rsh | ↳ | \reflectbox{\carriagereturn} | \Rdsh | ↴ | | \linefeed | ↵ | | \carriagereturn | +| ↶ | | \curvearrowleft | ↷ | | \curvearrowright | ↸ | | \barovernorthwestarrow | ↹ | | \barleftarrowrightarrowbar | +| ↺ | | \circlearrowleft | ↾ | | \upharpoonright | ↿ | | \upharpoonleft | ⇁ | | \rightharpoondown | +| ⇂ | | \downharpoonright | ⇃ | | \downharpoonleft | ⇄ | | \rightleftarrows | ⇆ | | \leftrightarrows | +| ⇇ | | \leftleftarrows | ⇈ | | \upuparrows | ⇉ | | \rightrightarrows | ⇊ | | \downdownarrows | +| ⇋ | | \leftrightharpoons | ⇍ | | \nLeftarrow | ⇎ | | \nLeftrightarrow | ⇏ | | \nRightarrow | +| ⇖ | | \Nwarrow | ⇗ | | \Nearrow | ⇘ | | \Searrow | ⇙ | | \Swarrow | +| ⇚ | | \Lleftarrow | ⇛ | | \Rrightarrow | ⇜ | | \leftsquigarrow | ⇝ | | \rightsquigarrow | +| ⇞ | | \nHuparrow | ⇟ | | \nHdownarrow | ⇡ | | \updasharrow | ⇣ | | \downdasharrow | +| ⇦ | | \leftwhitearrow | ⇧ | | \upwhitearrow | ⇨ | | \rightwhitearrow | ⇩ | | \downwhitearrow | +| ⇪ | | \whitearrowupfrombar | ⇴ | | \circleonrightarrow | ⇶ | | \rightthreearrows | ⇷ | | \nvleftarrow | +| ⇹ | | \nvleftrightarrow | ⇺ | | \nVleftarrow | ⇼ | | \nVleftrightarrow | ⇽ | | \leftarrowtriangle | +| ⇾ | | \rightarrowtriangle | ⇿ | | \leftrightarrowtriangle | ∁ | | \complement | ∄ | | \nexists | +| ∅ | | \varnothing | ∆ | | \increment | ∇ | | \nabla | ∊ | | \smallin | +| ∍ | | \smallni | ∎ | | \QED | ∔ | | \dotplus | ∕ | | \divslash | +| √ | | \sqrt | ∟ | | \rightangle | ∡ | | \measuredangle | ∢ | | \sphericalangle | +| ∤ | | \nmid | ∦ | | \nparallel | ∲ | | \lcirclerightint | ∴ | | \therefore | +| ∵ | | \because | ∷ | | \Colon | ∹ | | \eqcolon | ∽ | | \backsim | +| ≊ | | \approxeq | ≎ | | \Bumpeq | ≏ | | \bumpeq | ≒ | | \fallingdotseq | +| ≓ | | \risingdotseq | ≔ | | \coloneq | ≖ | | \eqcirc | ≗ | | \circeq | +| ≘ | | \arceq | ≚ | | \veeeq | ≜ | | \triangleq | ≝ | | \eqdef | +| ≞ | | \measeq | ≟ | | \questeq | ≣ | | \Equiv | ≨ | | \lneqq | +| ≩ | | \gneqq | ≬ | | \between | ≭ | | \nasymp | ≴ | | \nlesssim | +| ≵ | | \ngtrsim | ≶ | | \lessgtr | ≷ | | \gtrless | ≼ | | \preccurlyeq | +| ≽ | | \succcurlyeq | ⊊ | | \subsetneq | ⊋ | | \supsetneq | ⊌ | | \cupleftarrow | +| ⊍ | | \cupdot | ⊏ | | \sqsubset | ⊐ | | \sqsupset | ⊚ | | \circledcirc | +| ⊛ | | \circledast | ⊜ | | \circledequal | ⊝ | | \circleddash | ⊞ | | \boxplus | +| ⊟ | | \boxminus | ⊠ | | \boxtimes | ⊡ | | \boxdot | ⊦ | | \assert | +| ⊩ | | \Vdash | ⊪ | | \Vvdash | ⊫ | | \VDash | ⊬ | | \nvdash | +| ⊭ | | \nvDash | ⊮ | | \nVdash | ⊯ | | \nVDash | ⊰ | | \prurel | +| ⊱ | | \scurel | ⊲ | | \vartriangleleft | ⊳ | | \vartriangleright | ⊴ | | \trianglelefteq | +| ⊵ | | \trianglerighteq | ⊸ | | \multimap | ⊺ | | \intercal | ⊻ | | \veebar | +| ⊼ | | \barwedge | ⊽ | | \barvee | ⊿ | | \varlrtriangle | ⋇ | | \divideontimes | +| ⋉ | | \ltimes | ⋊ | | \rtimes | ⋋ | | \leftthreetimes | ⋌ | | \rightthreetimes | +| ⋍ | | \backsimeq | ⋎ | | \curlyvee | ⋏ | | \curlywedge | ⋐ | | \Subset | +| ⋑ | | \Supset | ⋒ | | \Cap | ⋓ | | \Cup | ⋔ | | \pitchfork | +| ⋕ | | \hash | ⋖ | | \lessdot | ⋗ | | \gtrdot | ⋚ | | \lesseqgtr | +| ⋛ | | \gtreqless | ⋜ | | \eqless | ⋝ | | \eqgtr | ⋞ | | \curlyeqprec | +| ⋟ | | \curlyeqsucc | ⋠ | | \npreceq | ⋡ | | \nsucceq | ⋤ | | \sqsubsetneq | +| ⋥ | | \sqsupsetneq | ⋦ | | \lnsim | ⋧ | | \gnsim | ⋨ | | \precedesnotsimilar | +| ⋩ | | \succnsim | ⋬ | | \ntrianglelefteq | ⋭ | | \ntrianglerighteq | ⋲ | | \disin | +| ⋳ | | \varisins | ⋴ | | \isins | ⋵ | | \isindot | ⋷ | | \isinobar | +| ⋸ | | \isinvb | ⋹ | | \isinE | ⋺ | | \nisd | ⋻ | | \varnis | +| ⋼ | | \nis | ⋽ | | \varniobar | ⋾ | | \niobar | ⋿ | | \bagmember | +| ⌀ | | \diameter | ⌂ | | \house | ⌅ | \barwedge | \varbarwedge | ⌐ | | \invneg | +| ⌒ | | \profline | ⌓ | | \profsurf | ⌗ | | \viewdata | ⌙ | | \turnednot | +| ⌜ | | \ulcorner | ⌝ | | \urcorner | ⌞ | | \llcorner | ⌟ | | \lrcorner | +| ⌠ | | \inttop | ⌡ | | \intbottom | ⌬ | | \varhexagonlrbonds | ⌲ | | \conictaper | +| ⌶ | | \topbot | ⌽ | | \obar | ⍓ | | \APLboxupcaret | ⍰ | | \APLboxquestion | +| ⍼ | | \rangledownzigzagarrow | ⎔ | | \hexagon | ⎛ | | \lparenuend | ⎜ | | \lparenextender | +| ⎝ | | \lparenlend | ⎞ | | \rparenuend | ⎟ | | \rparenextender | ⎠ | | \rparenlend | +| ⎡ | | \lbrackuend | ⎢ | | \lbrackextender | ⎣ | | \lbracklend | ⎤ | | \rbrackuend | +| ⎥ | | \rbrackextender | ⎦ | | \rbracklend | ⎧ | | \lbraceuend | ⎨ | | \lbracemid | +| ⎩ | | \lbracelend | ⎪ | | \vbraceextender | ⎫ | | \rbraceuend | ⎬ | | \rbracemid | +| ⎭ | | \rbracelend | ⎮ | | \intextender | ⎯ | | \harrowextender | ⎲ | | \sumtop | +| ⎳ | | \sumbottom | ⎴ | | \overbracket | ⎵ | | \underbracket | ⎶ | | \bbrktbrk | +| ⎷ | | \sqrtbottom | ⎸ | | \lvboxline | ⎹ | | \rvboxline | ⏎ | | \varcarriagereturn | +| ⏜ | | \overparen | ⏝ | | \underparen | ⏞ | | \overbrace | ⏟ | | \underbrace | +| ⏠ | | \obrbrak | ⏡ | | \ubrbrak | ⏢ | | \trapezium | ⏣ | | \benzenr | +| ⏤ | | \strns | ⏥ | | \fltns | ⏦ | | \accurrent | ⏧ | | \elinters | +| ␢ | | \blanksymbol | ␣ | | \mathvisiblespace | ┆ | | \bdtriplevdash | ▀ | | \blockuphalf | +| ▄ | | \blocklowhalf | █ | | \blockfull | ▌ | | \blocklefthalf | ▐ | | \blockrighthalf | +| ░ | | \blockqtrshaded | ▒ | | \blockhalfshaded | ▓ | | \blockthreeqtrshaded | ■ | | \mdlgblksquare | +| ▢ | | \squoval | ▣ | | \blackinwhitesquare | ▤ | | \squarehfill | ▥ | | \squarevfill | +| ▦ | | \squarehvfill | ▧ | | \squarenwsefill | ▨ | | \squareneswfill | ▩ | | \squarecrossfill | +| ▪ | | \smblksquare | ▫ | | \smwhtsquare | ▬ | | \hrectangleblack | ▭ | | \hrectangle | +| ▮ | | \vrectangleblack | ▯ | | \vrectangle | ▰ | | \parallelogramblack | ▱ | | \parallelogram | +| ▲ | | \bigblacktriangleup | △ | | \bigtriangleup | ▴ | | \blacktriangle | ▵ | | \vartriangle | +| ▸ | | \smallblacktriangleright | ▹ | | \smalltriangleright | ► | | \blackpointerright | ▻ | | \whitepointerright | +| ▼ | | \bigblacktriangledown | ▾ | | \blacktriangledown | ▿ | | \triangledown | ◂ | | \smallblacktriangleleft | +| ◃ | | \smalltriangleleft | ◄ | | \blackpointerleft | ◅ | | \whitepointerleft | ◈ | | \blackinwhitediamond | +| ◉ | | \fisheye | ◊ | | \lozenge | ◌ | | \dottedcircle | ◍ | | \circlevertfill | +| ◎ | | \bullseye | ◐ | | \circlelefthalfblack | ◑ | | \circlerighthalfblack | ◒ | | \circlebottomhalfblack | +| ◓ | | \circletophalfblack | ◔ | | \circleurquadblack | ◕ | | \blackcircleulquadwhite | ◖ | | \blacklefthalfcircle | +| ◗ | | \blackrighthalfcircle | ◘ | | \inversebullet | ◙ | | \inversewhitecircle | ◚ | | \invwhiteupperhalfcircle | +| ◛ | | \invwhitelowerhalfcircle | ◜ | | \ularc | ◝ | | \urarc | ◞ | | \lrarc | +| ◟ | | \llarc | ◠ | | \topsemicircle | ◡ | | \botsemicircle | ◢ | | \lrblacktriangle | +| ◣ | | \llblacktriangle | ◤ | | \ulblacktriangle | ◥ | | \urblacktriangle | ◦ | | \smwhtcircle | +| ◧ | | \squareleftblack | ◨ | | \squarerightblack | ◩ | | \squareulblack | ◪ | | \squarelrblack | +| ◫ | | \boxbar | ◬ | | \trianglecdot | ◭ | | \triangleleftblack | ◮ | | \trianglerightblack | +| ◰ | | \squareulquad | ◱ | | \squarellquad | ◲ | | \squarelrquad | ◳ | | \squareurquad | +| ◴ | | \circleulquad | ◵ | | \circlellquad | ◶ | | \circlelrquad | ◷ | | \circleurquad | +| ◸ | | \ultriangle | ◹ | | \urtriangle | ◺ | | \lltriangle | ◻ | | \mdwhtsquare | +| ◼ | | \mdblksquare | ◽ | | \mdsmwhtsquare | ◾ | | \mdsmblksquare | ◿ | | \lrtriangle | +| ★ | | \bigstar | ☆ | | \bigwhitestar | ☡ | | \danger | ☻ | | \blacksmiley | +| ☼ | | \sun | ☽ | | \rightmoon | ☾ | | \leftmoon | ♀ | | \female | +| ♂ | | \male | ♤ | | \varspadesuit | ♥ | | \varheartsuit | ♦ | | \vardiamondsuit | +| ♧ | | \varclubsuit | ♩ | | \quarternote | ♪ | | \eighthnote | ♫ | | \twonotes | +| ♬ | | \sixteenthnote | ♾ | | \acidfree | ⚀ | | \dicei | ⚁ | | \diceii | +| ⚂ | | \diceiii | ⚃ | | \diceiv | ⚄ | | \dicev | ⚅ | | \dicevi | +| ⚆ | | \circledrightdot | ⚇ | | \circledtwodots | ⚈ | | \blackcircledrightdot | ⚉ | | \blackcircledtwodots | +| ⚥ | | \Hermaphrodite | ⚬ | | \mdsmwhtcircle | ⚲ | | \neuter | ✓ | | \checkmark | +| ✠ | | \maltese | ✪ | | \circledstar | ✶ | | \varstar | ✽ | | \dingasterisk | +| ❲ | | \lbrbrak | ❳ | | \rbrbrak | ➛ | | \draftingarrow | ⟀ | | \threedangle | +| ⟁ | | \whiteinwhitetriangle | ⟃ | | \subsetcirc | ⟄ | | \supsetcirc | ⟇ | | \veedot | +| ⟈ | | \bsolhsub | ⟉ | | \suphsol | ⟋ | | \diagup | ⟌ | | \longdivision | +| ⟍ | | \diagdown | ⟑ | | \wedgedot | ⟒ | | \upin | ⟓ | | \pullback | +| ⟔ | | \pushout | ⟕ | | \leftouterjoin | ⟖ | | \rightouterjoin | ⟗ | | \fullouterjoin | +| ⟘ | | \bigbot | ⟙ | | \bigtop | ⟚ | | \DashVDash | ⟛ | | \dashVdash | +| ⟜ | | \multimapinv | ⟝ | | \vlongdash | ⟞ | | \longdashv | ⟟ | | \cirbot | +| ⟠ | | \lozengeminus | ⟡ | | \concavediamond | ⟢ | | \concavediamondtickleft | ⟣ | | \concavediamondtickright | +| ⟤ | | \whitesquaretickleft | ⟥ | | \whitesquaretickright | ⟫ | | \rang | ⟬ | | \Lbrbrak | +| ⟭ | | \Rbrbrak | ⟰ | | \UUparrow | ⟱ | | \DDownarrow | ⟲ | | \acwgapcirclearrow | +| ⟳ | | \cwgapcirclearrow | ⟴ | | \rightarrowonoplus | ⟻ | | \longmapsfrom | ⟽ | | \Longmapsfrom | +| ⟾ | | \Longmapsto | ⟿ | | \longrightsquigarrow | ⤁ | | \nVtwoheadrightarrow | ⤂ | | \nvLeftarrow | +| ⤃ | | \nvRightarrow | ⤄ | | \nvLeftrightarrow | ⤅ | | \twoheadmapsto | ⤆ | | \Mapsfrom | +| ⤇ | | \Mapsto | ⤈ | | \downarrowbarred | ⤉ | | \uparrowbarred | ⤊ | | \Uuparrow | +| ⤋ | | \Ddownarrow | ⤌ | | \leftbkarrow | ⤍ | | \rightbkarrow | ⤎ | | \leftdbkarrow | +| ⤏ | | \dbkarrow | ⤐ | | \drbkarrow | ⤑ | | \rightdotarrow | ⤗ | | \nvtwoheadrightarrowtail | +| ⤘ | | \nVtwoheadrightarrowtail | ⤙ | | \lefttail | ⤚ | | \righttail | ⤛ | | \leftdbltail | +| ⤜ | | \rightdbltail | ⤝ | | \diamondleftarrow | ⤞ | | \rightarrowdiamond | ⤟ | | \diamondleftarrowbar | +| ⤠ | | \barrightarrowdiamond | ⤡ | | \nwsearrow | ⤢ | | \neswarrow | ⤣ | | \hknwarrow | +| ⤤ | | \hknearrow | ⤥ | | \hksearrow | ⤦ | | \hkswarrow | ⤧ | | \tona | +| ⤨ | | \toea | ⤩ | | \tosa | ⤪ | | \towa | ⤫ | | \rdiagovfdiag | +| ⤬ | | \fdiagovrdiag | ⤭ | | \seovnearrow | ⤮ | | \neovsearrow | ⤯ | | \fdiagovnearrow | +| ⤰ | | \rdiagovsearrow | ⤱ | | \neovnwarrow | ⤲ | | \nwovnearrow | ⤳ | | \rightcurvedarrow | +| ⤴ | | \uprightcurvearrow | ⤵ | | \downrightcurvedarrow | ⤶ | | \leftdowncurvedarrow | ⤷ | | \rightdowncurvedarrow | +| ⤸ | | \cwrightarcarrow | ⤹ | | \acwleftarcarrow | ⤺ | | \acwoverarcarrow | ⤻ | | \acwunderarcarrow | +| ⤼ | | \curvearrowrightminus | ⤽ | | \curvearrowleftplus | ⤾ | | \cwundercurvearrow | ⤿ | | \ccwundercurvearrow | +| ⥂ | | \rightarrowshortleftarrow | ⥃ | | \leftarrowshortrightarrow | ⥄ | | \shortrightarrowleftarrow | ⥅ | | \rightarrowplus | +| ⥆ | | \leftarrowplus | ⥇ | | \rightarrowx | ⥈ | | \leftrightarrowcircle | ⥉ | | \twoheaduparrowcircle | +| ⥌ | | \updownharpoonrightleft | ⥍ | | \updownharpoonleftright | ⥎ | | \leftrightharpoonupup | ⥐ | | \DownLeftRightVector | +| ⥦ | | \leftrightharpoonsup | ⥧ | | \leftrightharpoonsdown | ⥨ | | \rightleftharpoonsup | ⥩ | | \rightleftharpoonsdown | +| ⥱ | | \equalrightarrow | ⥲ | | \similarrightarrow | ⥳ | | \leftarrowsimilar | ⥴ | | \rightarrowsimilar | +| ⥵ | | \rightarrowapprox | ⥶ | | \ltlarr | ⥷ | | \leftarrowless | ⥸ | | \gtrarr | +| ⥹ | | \subrarr | ⥺ | | \leftarrowsubset | ⥻ | | \suplarr | ⥼ | | \leftfishtail | +| ⥽ | | \rightfishtail | ⥾ | | \upfishtail | ⥿ | | \downfishtail | ⦀ | | \Vvert | +| ⦁ | | \spot | ⦂ | | \typecolon | ⦃ | | \lBrace | ⦄ | | \rBrace | +| ⦅ | | \lParen | ⦆ | | \Elroang | ⦇ | | \limg | ⦋ | | \lbrackubar | +| ⦌ | | \rbrackubar | ⦍ | | \lbrackultick | ⦎ | | \rbracklrtick | ⦏ | | \lbracklltick | +| ⦐ | | \rbrackurtick | ⦑ | | \langledot | ⦒ | | \rangledot | ⦓ | | \lparenless | +| ⦔ | | \rparengtr | ⦕ | | \Lparengtr | ⦖ | | \Rparenless | ⦗ | | \lblkbrbrak | +| ⦘ | | \rblkbrbrak | ⦙ | | \fourvdots | ⦚ | | \vzigzag | ⦛ | | \measuredangleleft | +| ⦝ | | \rightanglemdot | ⦞ | | \angles | ⦟ | | \angdnr | ⦠ | | \gtlpar | +| ⦡ | | \sphericalangleup | ⦢ | | \turnangle | ⦣ | | \revangle | ⦤ | | \angleubar | +| ⦥ | | \revangleubar | ⦦ | | \wideangledown | ⦧ | | \wideangleup | ⦨ | | \measanglerutone | +| ⦩ | | \measanglelutonw | ⦪ | | \measanglerdtose | ⦫ | | \measangleldtosw | ⦬ | | \measangleurtone | +| ⦭ | | \measangleultonw | ⦮ | | \measangledrtose | ⦯ | | \measangledltosw | ⦰ | | \revemptyset | +| ⦱ | | \emptysetobar | ⦲ | | \emptysetocirc | ⦳ | | \emptysetoarr | ⦴ | | \emptysetoarrl | +| ⦵ | | \circlehbar | ⦶ | | \circledvert | ⦷ | | \circledparallel | ⦸ | | \circledbslash | +| ⦹ | | \operp | ⦺ | | \obot | ⦻ | | \olcross | ⦼ | | \odotslashdot | +| ⦽ | | \uparrowoncircle | ⦾ | | \circledwhitebullet | ⦿ | | \circledbullet | ⧀ | | \circledless | +| ⧁ | | \circledgtr | ⧂ | | \cirscir | ⧃ | | \cirE | ⧅ | | \boxbslash | +| ⧆ | | \boxast | ⧇ | | \boxcircle | ⧈ | | \boxbox | ⧉ | | \boxonbox | +| ⧊ | | \triangleodot | ⧋ | | \triangleubar | ⧌ | | \triangles | ⧍ | | \triangleserifs | +| ⧎ | | \rtriltri | ⧑ | | \lfbowtie | ⧒ | | \rfbowtie | ⧓ | | \fbowtie | +| ⧔ | | \lftimes | ⧕ | | \rftimes | ⧖ | | \hourglass | ⧗ | | \blackhourglass | +| ⧘ | | \lvzigzag | ⧙ | | \rvzigzag | ⧚ | | \Lvzigzag | ⧛ | | \Rvzigzag | +| ⧜ | | \iinfin | ⧝ | | \tieinfty | ⧞ | | \nvinfty | ⧠ | | \laplac | +| ⧡ | | \lrtriangleeq | ⧢ | | \shuffle | ⧣ | | \eparsl | ⧤ | | \smeparsl | +| ⧥ | | \eqvparsl | ⧦ | | \gleichstark | ⧧ | | \thermod | ⧨ | | \downtriangleleftblack | +| ⧩ | | \downtrianglerightblack | ⧪ | | \blackdiamonddownarrow | ⧫ | | \blacklozenge | ⧬ | | \circledownarrow | +| ⧭ | | \blackcircledownarrow | ⧮ | | \errbarsquare | ⧯ | | \errbarblacksquare | ⧰ | | \errbardiamond | +| ⧱ | | \errbarblackdiamond | ⧲ | | \errbarcircle | ⧳ | | \errbarblackcircle | ⧴ | | \RuleDelayed | +| ⧶ | | \dsol | ⧷ | | \rsolbar | ⧸ | | \xsol | ⧺ | | \doubleplus | +| ⧻ | | \tripleplus | ⧼ | | \lcurvyangle | ⧽ | | \rcurvyangle | ⧾ | | \tplus | +| ⧿ | | \tminus | ⨃ | | \bigcupdot | ⨄ | | \Elxuplus | ⨅ | | \bigsqcap | +| ⨇ | | \conjquant | ⨈ | | \disjquant | ⨊ | | \modtwosum | ⨋ | | \sumint | +| ⨌ | | \iiiint | ⨍ | | \intbar | ⨎ | | \intBar | ⨐ | | \cirfnint | +| ⨑ | | \awint | ⨒ | | \rppolint | ⨓ | | \scpolint | ⨔ | | \npolint | +| ⨕ | | \pointint | ⨗ | | \intlarhk | ⨘ | | \intx | ⨙ | | \intcap | +| ⨚ | | \intcup | ⨛ | | \upint | ⨜ | | \lowint | ⨝ | | \Join | +| ⨞ | | \bigtriangleleft | ⨟ | | \zcmp | ⨠ | | \zpipe | ⨡ | | \zproject | +| ⨢ | | \ringplus | ⨣ | | \plushat | ⨤ | | \simplus | ⨥ | | \plusdot | +| ⨦ | | \plussim | ⨧ | | \plussubtwo | ⨨ | | \plustrif | ⨩ | | \commaminus | +| ⨪ | | \minusdot | ⨫ | | \minusfdots | ⨬ | | \minusrdots | ⨭ | | \opluslhrim | +| ⨮ | | \oplusrhrim | ⨯ | | \vectimes | ⨰ | | \dottimes | ⨱ | | \timesbar | +| ⨲ | | \btimes | ⨳ | | \smashtimes | ⨴ | | \otimeslhrim | ⨵ | | \otimesrhrim | +| ⨶ | | \otimeshat | ⨷ | | \Otimes | ⨸ | | \odiv | ⨹ | | \triangleplus | +| ⨺ | | \triangleminus | ⨻ | | \triangletimes | ⨼ | | \intprod | ⨽ | | \intprodr | +| ⨾ | | \fcmp | ⩀ | | \capdot | ⩁ | | \uminus | ⩂ | | \barcup | +| ⩃ | | \barcap | ⩄ | | \capwedge | ⩅ | | \cupvee | ⩆ | | \cupovercap | +| ⩇ | | \capovercup | ⩈ | | \cupbarcap | ⩉ | | \capbarcup | ⩊ | | \twocups | +| ⩋ | | \twocaps | ⩌ | | \closedvarcup | ⩍ | | \closedvarcap | ⩎ | | \Sqcap | +| ⩏ | | \Sqcup | ⩐ | | \closedvarcupsmashprod | ⩑ | | \wedgeodot | ⩒ | | \veeodot | +| ⩓ | | \Wedge | ⩔ | | \Vee | ⩕ | | \wedgeonwedge | ⩗ | | \bigslopedvee | +| ⩘ | | \bigslopedwedge | ⩙ | | \veeonwedge | ⩚ | | \wedgemidvert | ⩛ | | \veemidvert | +| ⩜ | | \midbarwedge | ⩝ | | \midbarvee | ⩟ | | \wedgebar | ⩠ | | \wedgedoublebar | +| ⩡ | | \varveebar | ⩢ | | \doublebarvee | ⩣ | | \veedoublebar | ⩤ | | \dsub | +| ⩥ | | \rsub | ⩦ | | \eqdot | ⩧ | | \dotequiv | ⩨ | | \equivVert | +| ⩩ | | \equivVvert | ⩪ | | \dotsim | ⩫ | | \simrdots | ⩬ | | \simminussim | +| ⩭ | | \congdot | ⩯ | | \hatapprox | ⩰ | | \approxeqq | ⩱ | | \eqqplus | +| ⩲ | | \pluseqq | ⩳ | | \eqqsim | ⩴ | | \Coloneqq | ⩷ | | \ddotseq | +| ⩸ | | \equivDD | ⩹ | | \ltcir | ⩺ | | \gtcir | ⩻ | | \ltquest | +| ⩼ | | \gtquest | ⩽ | | \leqslant | ⩾ | | \geqslant | ⩿ | | \lesdot | +| ⪀ | | \gesdot | ⪁ | | \lesdoto | ⪂ | | \gesdoto | ⪃ | | \lesdotor | +| ⪄ | | \gesdotol | ⪅ | | \lessapprox | ⪆ | | \gtrapprox | ⪇ | | \lneq | +| ⪈ | | \gneq | ⪉ | | \lnapprox | ⪊ | | \gnapprox | ⪋ | | \lesseqqgtr | +| ⪌ | | \gtreqqless | ⪍ | | \lsime | ⪎ | | \gsime | ⪏ | | \lsimg | +| ⪐ | | \gsiml | ⪑ | | \lgE | ⪒ | | \glE | ⪓ | | \lesges | +| ⪔ | | \gesles | ⪕ | | \eqslantless | ⪖ | | \eqslantgtr | ⪗ | | \elsdot | +| ⪘ | | \egsdot | ⪙ | | \eqqless | ⪚ | | \eqqgtr | ⪛ | | \eqqslantless | +| ⪜ | | \eqqslantgtr | ⪝ | | \simless | ⪞ | | \simgtr | ⪟ | | \simlE | +| ⪠ | | \simgE | ⪣ | | \partialmeetcontraction | ⪤ | | \glj | ⪥ | | \gla | +| ⪨ | | \lescc | ⪩ | | \gescc | ⪪ | | \smt | ⪫ | | \lat | +| ⪬ | | \smte | ⪭ | | \late | ⪮ | | \bumpeqq | ⪱ | | \precneq | +| ⪲ | | \succneq | ⪳ | | \preceqq | ⪴ | | \succeqq | ⪵ | | \precneqq | +| ⪶ | | \succneqq | ⪷ | | \precapprox | ⪸ | | \succapprox | ⪹ | | \precnapprox | +| ⪺ | | \succnapprox | ⪽ | | \subsetdot | ⪾ | | \supsetdot | ⪿ | | \subsetplus | +| ⫀ | | \supsetplus | ⫁ | | \submult | ⫂ | | \supmult | ⫃ | | \subedot | +| ⫄ | | \supedot | ⫅ | | \subseteqq | ⫆ | | \supseteqq | ⫇ | | \subsim | +| ⫈ | | \supsim | ⫉ | | \subsetapprox | ⫊ | | \supsetapprox | ⫋ | | \subsetneqq | +| ⫌ | | \supsetneqq | ⫍ | | \lsqhook | ⫎ | | \rsqhook | ⫏ | | \csub | +| ⫐ | | \csup | ⫑ | | \csube | ⫒ | | \csupe | ⫓ | | \subsup | +| ⫔ | | \supsub | ⫕ | | \subsub | ⫖ | | \supsup | ⫗ | | \suphsub | +| ⫘ | | \supdsub | ⫙ | | \forkv | ⫚ | | \topfork | ⫛ | | \mlcp | +| ⫝̸ | | \forks | ⫝ | | \forksnot | ⫞ | | \shortlefttack | ⫟ | | \shortdowntack | +| ⫠ | | \shortuptack | ⫡ | | \perps | ⫢ | | \vDdash | ⫣ | | \dashV | +| ⫤ | | \Dashv | ⫥ | | \DashV | ⫦ | | \varVdash | ⫧ | | \Barv | +| ⫨ | | \vBar | ⫩ | | \vBarv | ⫫ | | \Vbar | ⫬ | | \Not | +| ⫭ | | \bNot | ⫮ | | \revnmid | ⫯ | | \cirmid | ⫰ | | \midcir | +| ⫱ | | \topcir | ⫲ | | \nhpar | ⫳ | | \parsim | ⫴ | | \interleave | +| ⫵ | | \nhVvert | ⫶ | | \threedotcolon | ⫷ | | \lllnest | ⫸ | | \gggnest | +| ⫹ | | \leqqslant | ⫺ | | \geqqslant | ⫻ | | \trslash | ⫼ | | \biginterleave | +| ⫾ | | \talloblong | ⫿ | | \bigtalloblong | ⬒ | | \squaretopblack | ⬓ | | \squarebotblack | +| ⬔ | | \squareurblack | ⬕ | | \squarellblack | ⬖ | | \diamondleftblack | ⬗ | | \diamondrightblack | +| ⬘ | | \diamondtopblack | ⬙ | | \diamondbotblack | ⬚ | | \dottedsquare | ⬛ | | \lgblksquare | +| ⬜ | | \lgwhtsquare | ⬝ | | \vysmblksquare | ⬞ | | \vysmwhtsquare | ⬟ | | \pentagonblack | +| ⬠ | | \pentagon | ⬡ | | \varhexagon | ⬢ | | \varhexagonblack | ⬣ | | \hexagonblack | +| ⬤ | | \lgblkcircle | ⬥ | | \mdblkdiamond | ⬦ | | \mdwhtdiamond | ⬧ | | \mdblklozenge | +| ⬨ | | \mdwhtlozenge | ⬩ | | \smblkdiamond | ⬪ | | \smblklozenge | ⬫ | | \smwhtlozenge | +| ⬬ | | \blkhorzoval | ⬭ | | \whthorzoval | ⬮ | | \blkvertoval | ⬯ | | \whtvertoval | +| ⬰ | | \circleonleftarrow | ⬱ | | \leftthreearrows | ⬲ | | \leftarrowonoplus | ⬳ | | \longleftsquigarrow | +| ⬴ | | \nvtwoheadleftarrow | ⬵ | | \nVtwoheadleftarrow | ⬶ | | \twoheadmapsfrom | ⬷ | | \twoheadleftdbkarrow | +| ⬸ | | \leftdotarrow | ⬹ | | \nvleftarrowtail | ⬺ | | \nVleftarrowtail | ⬻ | | \twoheadleftarrowtail | +| ⬼ | | \nvtwoheadleftarrowtail | ⬽ | | \nVtwoheadleftarrowtail | ⬾ | | \leftarrowx | ⬿ | | \leftcurvedarrow | +| ⭀ | | \equalleftarrow | ⭁ | | \bsimilarleftarrow | ⭂ | | \leftarrowbackapprox | ⭃ | | \rightarrowgtr | +| ⭄ | | \rightarrowsupset | ⭅ | | \LLeftarrow | ⭆ | | \RRightarrow | ⭇ | | \bsimilarrightarrow | +| ⭈ | | \rightarrowbackapprox | ⭉ | | \similarleftarrow | ⭊ | | \leftarrowapprox | ⭋ | | \leftarrowbsimilar | +| ⭌ | | \rightarrowbsimilar | ⭐ | | \medwhitestar | ⭑ | | \medblackstar | ⭒ | | \smwhitestar | +| ⭓ | | \rightpentagonblack | ⭔ | | \rightpentagon | 〒 | | \postalmark | 〰 | | \hzigzag | ### amssymb | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | |---------------|----------|----------|---------------|----------|----------|---------------|----------|----------|---------------|----------|----------| -| ⩾̸ | | \ngeqslant | ⩾ | | \geqslant | ⩽̸ | | \nleqslant | ⩽ | | \leqslant | -| ð | | \eth | | | | | | | | | | +| ð | | \eth | ⩽ | | \leqslant | ⩽̸ | | \nleqslant | ⩾ | | \geqslant | +| ⩾̸ | | \ngeqslant | | | | | | | | | | -### wasysym +### arevmath | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | |---------------|----------|----------|---------------|----------|----------|---------------|----------|----------|---------------|----------|----------| -| ☾ | \leftmoon | | ☽ | \rightmoon | | | | | | | | +| ð | | \eth | | | | | | | | | | -### pmboxdraw +### MinionPro | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | |---------------|----------|----------|---------------|----------|----------|---------------|----------|----------|---------------|----------|----------| -| ▟ | \pmboxdrawuni{259F} | | ▞ | \pmboxdrawuni{259E} | | ▝ | \pmboxdrawuni{259D} | | ▜ | \pmboxdrawuni{259C} | | -| ▛ | \pmboxdrawuni{259B} | | ▚ | \pmboxdrawuni{259A} | | ▙ | \pmboxdrawuni{2599} | | ▘ | \pmboxdrawuni{2598} | | -| ▗ | \pmboxdrawuni{2597} | | ▖ | \pmboxdrawuni{2596} | | ▕ | \pmboxdrawuni{2595} | | ▔ | \pmboxdrawuni{2594} | | -| ▓ | \textdkshade | | ▒ | \textshade | | ░ | \textltshade | | ▐ | \textrtblock | | -| ▏ | \pmboxdrawuni{258F} | | ▎ | \pmboxdrawuni{258E} | | ▍ | \pmboxdrawuni{258D} | | ▌ | \textlfblock | | -| ▋ | \pmboxdrawuni{258B} | | ▊ | \pmboxdrawuni{258A} | | ▉ | \pmboxdrawuni{2589} | | █ | \textblock | | -| ▇ | \pmboxdrawuni{2587} | | ▆ | \pmboxdrawuni{2586} | | ▅ | \pmboxdrawuni{2585} | | ▄ | \textdnblock | | -| ▃ | \pmboxdrawuni{2583} | | ▂ | \pmboxdrawuni{2582} | | ▁ | \pmboxdrawuni{2581} | | ▀ | \textupblock | | -| ╿ | \pmboxdrawuni{257F} | | ╾ | \pmboxdrawuni{257E} | | ╽ | \pmboxdrawuni{257D} | | ╼ | \pmboxdrawuni{257C} | | -| ╻ | \pmboxdrawuni{257B} | | ╺ | \pmboxdrawuni{257A} | | ╹ | \pmboxdrawuni{2579} | | ╸ | \pmboxdrawuni{2578} | | -| ╷ | \pmboxdrawuni{2577} | | ╶ | \pmboxdrawuni{2576} | | ╵ | \pmboxdrawuni{2575} | | ╴ | \pmboxdrawuni{2574} | | -| ╬ | \textSFxliv | | ╫ | \textSFliii | | ╪ | \textSFliv | | ╩ | \textSFxl | | -| ╨ | \textSFxlvi | | ╧ | \textSFxlv | | ╦ | \textSFxli | | ╥ | \textSFxlviii | | -| ╤ | \textSFxlvii | | ╣ | \textSFxxiii | | ╢ | \textSFxx | | ╡ | \textSFxix | | -| ╠ | \textSFxlii | | ╟ | \textSFxxxvii | | ╞ | \textSFxxxvi | | ╝ | \textSFxxvi | | -| ╜ | \textSFxxvii | | ╛ | \textSFxxviii | | ╚ | \textSFxxxviii | | ╙ | \textSFxlix | | -| ╘ | \textSFl | | ╗ | \textSFxxv | | ╖ | \textSFxxi | | ╕ | \textSFxxii | | -| ╔ | \textSFxxxix | | ╓ | \textSFlii | | ╒ | \textSFli | | ║ | \textSFxxiv | | -| ═ | \textSFxliii | | ╋ | \pmboxdrawuni{254B} | | ╊ | \pmboxdrawuni{254A} | | ╉ | \pmboxdrawuni{2549} | | -| ╈ | \pmboxdrawuni{2548} | | ╇ | \pmboxdrawuni{2547} | | ╆ | \pmboxdrawuni{2546} | | ╅ | \pmboxdrawuni{2545} | | -| ╄ | \pmboxdrawuni{2544} | | ╃ | \pmboxdrawuni{2543} | | ╂ | \pmboxdrawuni{2542} | | ╁ | \pmboxdrawuni{2541} | | -| ╀ | \pmboxdrawuni{2540} | | ┿ | \pmboxdrawuni{253F} | | ┾ | \pmboxdrawuni{253E} | | ┽ | \pmboxdrawuni{253D} | | -| ┼ | \textSFv | | ┻ | \pmboxdrawuni{253B} | | ┺ | \pmboxdrawuni{253A} | | ┹ | \pmboxdrawuni{2539} | | -| ┸ | \pmboxdrawuni{2538} | | ┷ | \pmboxdrawuni{2537} | | ┶ | \pmboxdrawuni{2536} | | ┵ | \pmboxdrawuni{2535} | | -| ┴ | \textSFvii | | ┳ | \pmboxdrawuni{2533} | | ┲ | \pmboxdrawuni{2532} | | ┱ | \pmboxdrawuni{2531} | | -| ┰ | \pmboxdrawuni{2530} | | ┯ | \pmboxdrawuni{252F} | | ┮ | \pmboxdrawuni{252E} | | ┭ | \pmboxdrawuni{252D} | | -| ┬ | \textSFvi | | ┫ | \pmboxdrawuni{252B} | | ┪ | \pmboxdrawuni{252A} | | ┩ | \pmboxdrawuni{2529} | | -| ┨ | \pmboxdrawuni{2528} | | ┧ | \pmboxdrawuni{2527} | | ┦ | \pmboxdrawuni{2526} | | ┥ | \pmboxdrawuni{2525} | | -| ┤ | \textSFix | | ┣ | \pmboxdrawuni{2523} | | ┢ | \pmboxdrawuni{2522} | | ┡ | \pmboxdrawuni{2521} | | -| ┠ | \pmboxdrawuni{2520} | | ┟ | \pmboxdrawuni{251F} | | ┞ | \pmboxdrawuni{251E} | | ┝ | \pmboxdrawuni{251D} | | -| ├ | \textSFviii | | ┛ | \pmboxdrawuni{251B} | | ┚ | \pmboxdrawuni{251A} | | ┙ | \pmboxdrawuni{2519} | | -| ┘ | \textSFiv | | ┗ | \pmboxdrawuni{2517} | | ┖ | \pmboxdrawuni{2516} | | ┕ | \pmboxdrawuni{2515} | | -| └ | \textSFii | | ┓ | \pmboxdrawuni{2513} | | ┒ | \pmboxdrawuni{2512} | | ┑ | \pmboxdrawuni{2511} | | -| ┐ | \textSFiii | | ┏ | \pmboxdrawuni{250F} | | ┎ | \pmboxdrawuni{250E} | | ┍ | \pmboxdrawuni{250D} | | -| ┌ | \textSFi | | ┃ | \pmboxdrawuni{2503} | | │ | \textSFxi | | ━ | \pmboxdrawuni{2501} | | -| ─ | \textSFx | | | | | | | | | | | +| ϐ | | \varbeta | ϰ | | \varkappa | | | | | | | -### inputenx +### mathrsfs | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | |---------------|----------|----------|---------------|----------|----------|---------------|----------|----------|---------------|----------|----------| -| ≈ | \textapproxequal | | ɸ | \textphi | | Ħ | \textmalteseH | | | | | +| ℊ | | \mathscr{g} | ℋ | | \mathscr{H} | ℐ | | \mathscr{I} | ℒ | | \mathscr{L} | +| ℛ | | \mathscr{R} | ℬ | | \mathscr{B} | ℯ | | \mathscr{e} | ℰ | | \mathscr{E} | +| ℱ | | \mathscr{F} | ℳ | | \mathscr{M} | ℴ | | \mathscr{o} | 𝒜 | | \mathscr{A} | +| 𝒞 | | \mathscr{C} | 𝒟 | | \mathscr{D} | 𝒢 | | \mathscr{G} | 𝒥 | | \mathscr{J} | +| 𝒦 | | \mathscr{K} | 𝒩 | | \mathscr{N} | 𝒪 | | \mathscr{O} | 𝒫 | | \mathscr{P} | +| 𝒬 | | \mathscr{Q} | 𝒮 | | \mathscr{S} | 𝒯 | | \mathscr{T} | 𝒰 | | \mathscr{U} | +| 𝒱 | | \mathscr{V} | 𝒲 | | \mathscr{W} | 𝒳 | | \mathscr{X} | 𝒴 | | \mathscr{Y} | +| 𝒵 | | \mathscr{Z} | 𝒶 | | \mathscr{a} | 𝒷 | | \mathscr{b} | 𝒸 | | \mathscr{c} | +| 𝒹 | | \mathscr{d} | 𝒻 | | \mathscr{f} | 𝒽 | | \mathscr{h} | 𝒾 | | \mathscr{i} | +| 𝒿 | | \mathscr{j} | 𝓀 | | \mathscr{k} | 𝓁 | | \mathscr{l} | 𝓂 | | \mathscr{m} | +| 𝓃 | | \mathscr{n} | 𝓅 | | \mathscr{p} | 𝓆 | | \mathscr{q} | 𝓇 | | \mathscr{r} | +| 𝓈 | | \mathscr{s} | 𝓉 | | \mathscr{t} | 𝓊 | | \mathscr{u} | 𝓋 | | \mathscr{v} | +| 𝓌 | | \mathscr{w} | 𝓍 | | \mathscr{x} | 𝓎 | | \mathscr{y} | 𝓏 | | \mathscr{z} | -### xecjk +### MnSymbol | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | |---------------|----------|----------|---------------|----------|----------|---------------|----------|----------|---------------|----------|----------| -| ≂ | | \texteqsim | ĸ | \textkra | | ז | \hebzayin | | י | \hebyod | | -| ו | \hebvav | | צ | \hebtsadi | | ט | \hebtet | | ת | \hebtav | | -| ש | \hebshin | | ס | \hebsamekh | | ר | \hebresh | | ק | \hebqof | | -| פ | \hebpe | | נ | \hebnun | | מ | \hebmem | | ל | \heblamed | | -| כ | \hebkaf | | ח | \hebhet | | ה | \hebhe | | ג | \hebgimel | | -| ץ | \hebfinaltsadi | | ף | \hebfinalpe | | ן | \hebfinalnun | | ם | \hebfinalmem | | -| ך | \hebfinalkaf | | ד | \hebdalet | | ב | \hebbet | | ע | \hebayin | | -| א | \hebalef | | | | | | | | | | | +| ∲ | | \lcirclerightint | ∳ | | \rcirclerightint | | | | | | | ### mathabx @@ -627,84 +585,126 @@ Some of us though are bound to outlets that still demand BibTeX, and there's gee | ∸ | | \dotdiv | | | | | | | | | | -### MnSymbol +### xecjk | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | |---------------|----------|----------|---------------|----------|----------|---------------|----------|----------|---------------|----------|----------| -| ∳ | | \rcirclerightint | ∲ | | \lcirclerightint | | | | | | | +| ≂ | | \texteqsim | א | \hebalef | | ע | \hebayin | | ב | \hebbet | | +| ד | \hebdalet | | ך | \hebfinalkaf | | ם | \hebfinalmem | | ן | \hebfinalnun | | +| ף | \hebfinalpe | | ץ | \hebfinaltsadi | | ג | \hebgimel | | ה | \hebhe | | +| ח | \hebhet | | כ | \hebkaf | | ל | \heblamed | | מ | \hebmem | | +| נ | \hebnun | | פ | \hebpe | | ק | \hebqof | | ר | \hebresh | | +| ס | \hebsamekh | | ש | \hebshin | | ת | \hebtav | | ט | \hebtet | | +| צ | \hebtsadi | | ו | \hebvav | | י | \hebyod | | ז | \hebzayin | | +| ĸ | \textkra | | | | | | | | | | | -### graphics +### textcomp | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | |---------------|----------|----------|---------------|----------|----------|---------------|----------|----------|---------------|----------|----------| -| ↳ | \reflectbox{\carriagereturn} | | | | | | | | | | | +| ¢ | \textcent | | ¤ | \textcurrency | | ¥ | \textyen | | ฿ | \textbaht | | +| ₡ | \textcolonmonetary | | ₤ | \textlira | | ₦ | \textnaira | | ₧ | \textpeseta | | +| ₩ | \textwon | | ₫ | \textdong | | ₱ | \textpeso | | ¦ | \textbrokenbar | | +| © | \textcopyright | | ª | \textordfeminine | | ° | \textdegree | | ¶ | \textparagraph | | +| º | \textordmasculine | | ð | \textdh | | ˙ | \textperiodcentered | | • | \textbullet | | +| ‰ | \textperthousand | | ‱ | \textpertenthousand | | ℞ | \textrecipe | | ™ | \texttrademark | | +| ↑ | \textuparrow | | → | \textrightarrow | | | | | | | | -### textcomp +### inputenx | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | |---------------|----------|----------|---------------|----------|----------|---------------|----------|----------|---------------|----------|----------| -| → | \textrightarrow | | ↑ | \textuparrow | | ™ | \texttrademark | | ℞ | \textrecipe | | -| ‱ | \textpertenthousand | | ‰ | \textperthousand | | • | \textbullet | | ˙ | \textperiodcentered | | -| ð | \textdh | | º | \textordmasculine | | ¶ | \textparagraph | | ° | \textdegree | | -| ª | \textordfeminine | | © | \textcopyright | | ¦ | \textbrokenbar | | ₱ | \textpeso | | -| ₫ | \textdong | | ₩ | \textwon | | ₧ | \textpeseta | | ₦ | \textnaira | | -| ₤ | \textlira | | ₡ | \textcolonmonetary | | ฿ | \textbaht | | ¥ | \textyen | | -| ¤ | \textcurrency | | ¢ | \textcent | | | | | | | | +| Ħ | \textmalteseH | | ɸ | \textphi | | ≈ | \textapproxequal | | | | | ### tipa | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | |---------------|----------|----------|---------------|----------|----------|---------------|----------|----------|---------------|----------|----------| -| ₔ | \textsubscript{\textschwa} | | ̽ | \textovercross | | ̼ | \textseagull | | ̻ | \textsubsquare | | -| ̺ | \textinvsubbridge | | ̹ | \textsubrhalfring | | ̴ | \textsuperimposetilde | | ̱ | \textsubbar | | -| ̰ | \textsubtilde | | ̯ | \textsubarch | | ̬ | \textsubwedge | | ̪ | \textsubbridge | | -| ̩ | \textsyllabic | | ̥ | \textsubring | | ̤ | \textsubumlaut | | ̟ | \textsubplus | | -| ̞ | \textlowering | | ̝ | \textraising | | ̜ | \textsublhalfring | | ̚ | \textcorner | | -| ̙ | \textretracting | | ̘ | \textadvancing | | ̐ | \textdotbreve | | ̎ | \textdoublevbaraccent | | -| ̍ | \textvbaraccent | | ̊̄ | \textringmacron | | ̇̆ | \textdotbreve | | ̇́ | \textdotacute | | -| ̆̄ | \textbrevemacron | | ̄̀ | \textgravemacron | | ̃̇ | \texttildedot | | ̂̇ | \textcircumdot | | -| ́̌ | \textacutewedge | | ́̄ | \textacutemacron | | ̀̇ | \textgravedot | | ̀̄ | \textgravemacron | | -| ˩ | \tone{11} | | ˨ | \tone{22} | | ˧ | \tone{33} | | ˦ | \tone{44} | | -| ˥ | \tone{55} | | ʞ | \textturnk | | ɸ | \textphi | | ɤ | \textrevscripta | | -| ɣ | \textipa{G} | | ə | \textschwa | | ɖ | \textrtaild | | ɔ | \textipa{O} | | -| ɒ | textipa{\textopeno} | | ɐ | \textipa{\textturna} | | ƞ | \textipa{\textnrleg} | | ƕ | \texthvlig | | -| ħ | \textcrh | | | | | | | | | | | +| ħ | \textcrh | | ƕ | \texthvlig | | ƞ | \textipa{\textnrleg} | | ɐ | \textipa{\textturna} | | +| ɒ | textipa{\textopeno} | | ɔ | \textipa{O} | | ɖ | \textrtaild | | ə | \textschwa | | +| ɣ | \textipa{G} | | ɤ | \textrevscripta | | ɸ | \textphi | | ʞ | \textturnk | | +| ˥ | \tone{55} | | ˦ | \tone{44} | | ˧ | \tone{33} | | ˨ | \tone{22} | | +| ˩ | \tone{11} | | ̀̄ | \textgravemacron | | ̀̇ | \textgravedot | | ́̄ | \textacutemacron | | +| ́̌ | \textacutewedge | | ̂̇ | \textcircumdot | | ̃̇ | \texttildedot | | ̄̀ | \textgravemacron | | +| ̆̄ | \textbrevemacron | | ̇́ | \textdotacute | | ̇̆ | \textdotbreve | | ̊̄ | \textringmacron | | +| ̍ | \textvbaraccent | | ̎ | \textdoublevbaraccent | | ̐ | \textdotbreve | | ̘ | \textadvancing | | +| ̙ | \textretracting | | ̚ | \textcorner | | ̜ | \textsublhalfring | | ̝ | \textraising | | +| ̞ | \textlowering | | ̟ | \textsubplus | | ̤ | \textsubumlaut | | ̥ | \textsubring | | +| ̩ | \textsyllabic | | ̪ | \textsubbridge | | ̬ | \textsubwedge | | ̯ | \textsubarch | | +| ̰ | \textsubtilde | | ̱ | \textsubbar | | ̴ | \textsuperimposetilde | | ̹ | \textsubrhalfring | | +| ̺ | \textinvsubbridge | | ̻ | \textsubsquare | | ̼ | \textseagull | | ̽ | \textovercross | | +| ₔ | \textsubscript{\textschwa} | | | | | | | | | | | -### MinionPro +### ipa | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | |---------------|----------|----------|---------------|----------|----------|---------------|----------|----------|---------------|----------|----------| -| ϰ | | \varkappa | ϐ | | \varbeta | | | | | | | +| ɯ | \textturnm | | | | | | | | | | | -### textalpha +### mathscinet | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | |---------------|----------|----------|---------------|----------|----------|---------------|----------|----------|---------------|----------|----------| -| α | \textalpha | | | | | | | | | | | +| ʿ | \lasp | | | | | | | | | | | -### mathscinet +### textalpha | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | |---------------|----------|----------|---------------|----------|----------|---------------|----------|----------|---------------|----------|----------| -| ʿ | \lasp | | | | | | | | | | | +| α | \textalpha | | | | | | | | | | | -### ipa +### graphics | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | |---------------|----------|----------|---------------|----------|----------|---------------|----------|----------|---------------|----------|----------| -| ɯ | \textturnm | | | | | | | | | | | +| ↳ | \reflectbox{\carriagereturn} | | | | | | | | | | | -### arevmath +### pmboxdraw | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | |---------------|----------|----------|---------------|----------|----------|---------------|----------|----------|---------------|----------|----------| -| ð | | \eth | | | | | | | | | | +| ─ | \textSFx | | ━ | \pmboxdrawuni{2501} | | │ | \textSFxi | | ┃ | \pmboxdrawuni{2503} | | +| ┌ | \textSFi | | ┍ | \pmboxdrawuni{250D} | | ┎ | \pmboxdrawuni{250E} | | ┏ | \pmboxdrawuni{250F} | | +| ┐ | \textSFiii | | ┑ | \pmboxdrawuni{2511} | | ┒ | \pmboxdrawuni{2512} | | ┓ | \pmboxdrawuni{2513} | | +| └ | \textSFii | | ┕ | \pmboxdrawuni{2515} | | ┖ | \pmboxdrawuni{2516} | | ┗ | \pmboxdrawuni{2517} | | +| ┘ | \textSFiv | | ┙ | \pmboxdrawuni{2519} | | ┚ | \pmboxdrawuni{251A} | | ┛ | \pmboxdrawuni{251B} | | +| ├ | \textSFviii | | ┝ | \pmboxdrawuni{251D} | | ┞ | \pmboxdrawuni{251E} | | ┟ | \pmboxdrawuni{251F} | | +| ┠ | \pmboxdrawuni{2520} | | ┡ | \pmboxdrawuni{2521} | | ┢ | \pmboxdrawuni{2522} | | ┣ | \pmboxdrawuni{2523} | | +| ┤ | \textSFix | | ┥ | \pmboxdrawuni{2525} | | ┦ | \pmboxdrawuni{2526} | | ┧ | \pmboxdrawuni{2527} | | +| ┨ | \pmboxdrawuni{2528} | | ┩ | \pmboxdrawuni{2529} | | ┪ | \pmboxdrawuni{252A} | | ┫ | \pmboxdrawuni{252B} | | +| ┬ | \textSFvi | | ┭ | \pmboxdrawuni{252D} | | ┮ | \pmboxdrawuni{252E} | | ┯ | \pmboxdrawuni{252F} | | +| ┰ | \pmboxdrawuni{2530} | | ┱ | \pmboxdrawuni{2531} | | ┲ | \pmboxdrawuni{2532} | | ┳ | \pmboxdrawuni{2533} | | +| ┴ | \textSFvii | | ┵ | \pmboxdrawuni{2535} | | ┶ | \pmboxdrawuni{2536} | | ┷ | \pmboxdrawuni{2537} | | +| ┸ | \pmboxdrawuni{2538} | | ┹ | \pmboxdrawuni{2539} | | ┺ | \pmboxdrawuni{253A} | | ┻ | \pmboxdrawuni{253B} | | +| ┼ | \textSFv | | ┽ | \pmboxdrawuni{253D} | | ┾ | \pmboxdrawuni{253E} | | ┿ | \pmboxdrawuni{253F} | | +| ╀ | \pmboxdrawuni{2540} | | ╁ | \pmboxdrawuni{2541} | | ╂ | \pmboxdrawuni{2542} | | ╃ | \pmboxdrawuni{2543} | | +| ╄ | \pmboxdrawuni{2544} | | ╅ | \pmboxdrawuni{2545} | | ╆ | \pmboxdrawuni{2546} | | ╇ | \pmboxdrawuni{2547} | | +| ╈ | \pmboxdrawuni{2548} | | ╉ | \pmboxdrawuni{2549} | | ╊ | \pmboxdrawuni{254A} | | ╋ | \pmboxdrawuni{254B} | | +| ═ | \textSFxliii | | ║ | \textSFxxiv | | ╒ | \textSFli | | ╓ | \textSFlii | | +| ╔ | \textSFxxxix | | ╕ | \textSFxxii | | ╖ | \textSFxxi | | ╗ | \textSFxxv | | +| ╘ | \textSFl | | ╙ | \textSFxlix | | ╚ | \textSFxxxviii | | ╛ | \textSFxxviii | | +| ╜ | \textSFxxvii | | ╝ | \textSFxxvi | | ╞ | \textSFxxxvi | | ╟ | \textSFxxxvii | | +| ╠ | \textSFxlii | | ╡ | \textSFxix | | ╢ | \textSFxx | | ╣ | \textSFxxiii | | +| ╤ | \textSFxlvii | | ╥ | \textSFxlviii | | ╦ | \textSFxli | | ╧ | \textSFxlv | | +| ╨ | \textSFxlvi | | ╩ | \textSFxl | | ╪ | \textSFliv | | ╫ | \textSFliii | | +| ╬ | \textSFxliv | | ╴ | \pmboxdrawuni{2574} | | ╵ | \pmboxdrawuni{2575} | | ╶ | \pmboxdrawuni{2576} | | +| ╷ | \pmboxdrawuni{2577} | | ╸ | \pmboxdrawuni{2578} | | ╹ | \pmboxdrawuni{2579} | | ╺ | \pmboxdrawuni{257A} | | +| ╻ | \pmboxdrawuni{257B} | | ╼ | \pmboxdrawuni{257C} | | ╽ | \pmboxdrawuni{257D} | | ╾ | \pmboxdrawuni{257E} | | +| ╿ | \pmboxdrawuni{257F} | | ▀ | \textupblock | | ▁ | \pmboxdrawuni{2581} | | ▂ | \pmboxdrawuni{2582} | | +| ▃ | \pmboxdrawuni{2583} | | ▄ | \textdnblock | | ▅ | \pmboxdrawuni{2585} | | ▆ | \pmboxdrawuni{2586} | | +| ▇ | \pmboxdrawuni{2587} | | █ | \textblock | | ▉ | \pmboxdrawuni{2589} | | ▊ | \pmboxdrawuni{258A} | | +| ▋ | \pmboxdrawuni{258B} | | ▌ | \textlfblock | | ▍ | \pmboxdrawuni{258D} | | ▎ | \pmboxdrawuni{258E} | | +| ▏ | \pmboxdrawuni{258F} | | ▐ | \textrtblock | | ░ | \textltshade | | ▒ | \textshade | | +| ▓ | \textdkshade | | ▔ | \pmboxdrawuni{2594} | | ▕ | \pmboxdrawuni{2595} | | ▖ | \pmboxdrawuni{2596} | | +| ▗ | \pmboxdrawuni{2597} | | ▘ | \pmboxdrawuni{2598} | | ▙ | \pmboxdrawuni{2599} | | ▚ | \pmboxdrawuni{259A} | | +| ▛ | \pmboxdrawuni{259B} | | ▜ | \pmboxdrawuni{259C} | | ▝ | \pmboxdrawuni{259D} | | ▞ | \pmboxdrawuni{259E} | | +| ▟ | \pmboxdrawuni{259F} | | | | | | | | | | | From 5779e1516f701919c5c8d6eae0d8e10d00989fab Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Sat, 6 Apr 2024 20:54:23 +0200 Subject: [PATCH 006/177] new parser xf --- translators/bibtex/bibtex.ts | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/translators/bibtex/bibtex.ts b/translators/bibtex/bibtex.ts index c896531d3b..c2665d9a76 100644 --- a/translators/bibtex/bibtex.ts +++ b/translators/bibtex/bibtex.ts @@ -447,11 +447,10 @@ export async function parseBibTeX(input: string, translation: Translation): Prom importJabRef.load(translation) - return bibtexParser.promises.parse(input, { + return bibtexParser.parseAsync(input, { // we are actually sure it's a valid enum value; stupid workaround for TS2322: Type 'string' is not assignable to type 'boolean | "as-needed" | "strict"'. caseProtection: (translation.preferences.importCaseProtection as 'as-needed'), - errorHandler: (translation.preferences.testing ? undefined : function(err) { log.error(err) }), // eslint-disable-line prefer-arrow/prefer-arrow-functions - unknownCommandHandler: function(node) { // eslint-disable-line object-shorthand + unsupported: function(node) { // eslint-disable-line object-shorthand switch (translation.preferences.importUnknownTexCommand) { case 'tex': // eslint-disable-next-line @typescript-eslint/no-unsafe-return @@ -467,9 +466,11 @@ export async function parseBibTeX(input: string, translation: Translation): Prom } }, markup: (translation.csquotes ? { enquote: translation.csquotes } : {}), - sentenceCase: translation.preferences.importSentenceCase !== 'off', - guessAlreadySentenceCased: translation.preferences.importSentenceCase === 'on+guess', - sentenceCasePreserveQuoted: !translation.preferences.importSentenceCaseQuoted, + sentenceCase: { + langids: translation.preferences.importSentenceCase !== 'off', + guess: translation.preferences.importSentenceCase === 'on+guess', + preserveQuoted: !translation.preferences.importSentenceCaseQuoted, + }, verbatimFields: translation.verbatimFields, raw: translation.preferences.rawImports, unabbreviate: importJabRef.unabbrevations, From 420a828cf72741142fcea09981df3ba7102607e7 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Sat, 6 Apr 2024 20:56:01 +0200 Subject: [PATCH 007/177] upgrades --- package-lock.json | 26 +++++++++++++------------- package.json | 6 +++--- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3dc57970bc..17099115e3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -58,7 +58,7 @@ "zotero-plugin": "2.0.14" }, "devDependencies": { - "@retorquere/bibtex-parser": "^8.0.1", + "@retorquere/bibtex-parser": "^8.0.3", "@retorquere/zotero-sync": "^1.0.27", "@types/bluebird": "^3.5.42", "@types/lokijs": "^1.5.14", @@ -113,7 +113,7 @@ "process": "^0.11.10", "properties-reader": "^2.3.0", "pug": "^3.0.2", - "putout": "^35.7.6", + "putout": "^35.8.0", "recast": "^0.23.6", "regenerate": "^1.4.2", "rimraf": "^5.0.5", @@ -3339,15 +3339,15 @@ } }, "node_modules/@putout/plugin-typescript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@putout/plugin-typescript/-/plugin-typescript-6.0.0.tgz", - "integrity": "sha512-9sQ/BK2XjndwjP9yJxkkjYk6ynxuQ3rctZVn2FcPoB+XA7/i4bYwmrs8Ve2TyEbm7Fgqhkzes3UB2271VGnJug==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@putout/plugin-typescript/-/plugin-typescript-7.1.0.tgz", + "integrity": "sha512-eEGlY5SVovMHJgZpObZQJlwHZsZOvfd8yB704A10jSDOVWlXbMzISJ2ax5JXXrYDS1EH20j68ElHzPOifqDYVg==", "dev": true, "engines": { "node": ">=18" }, "peerDependencies": { - "putout": ">=34" + "putout": ">=35" } }, "node_modules/@putout/plugin-webpack": { @@ -3570,9 +3570,9 @@ } }, "node_modules/@retorquere/bibtex-parser": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@retorquere/bibtex-parser/-/bibtex-parser-8.0.1.tgz", - "integrity": "sha512-AL8gQfQpC4jGBmtNMyuDgO/1nz0tN5zttXP0G9jJv9ZdTMHUXy/uLpzVRVUzLczKcLsvYr+cKfA3aa/Eg2qrnA==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@retorquere/bibtex-parser/-/bibtex-parser-8.0.3.tgz", + "integrity": "sha512-VEt4oCyFYvJe1aEzcLqMfRxGGZHvju0SN7akPdfpZpyY8X9PMf/pUkp3PrBL4JfRCS00KP7MLSLv/MkZpGkAuw==", "dev": true, "dependencies": { "@unified-latex/unified-latex-util-pegjs": "^1.7.1", @@ -12471,9 +12471,9 @@ "integrity": "sha512-EkCRMV2w15w+9wylcpabacKK9VvTRX3TvhVQJBwIk4ThvllI2M6RlvdEZvJLhxsxy4x8IEDZneQhlGU0Pk5keg==" }, "node_modules/putout": { - "version": "35.7.6", - "resolved": "https://registry.npmjs.org/putout/-/putout-35.7.6.tgz", - "integrity": "sha512-HiH0QxmvN2G1Sn1g2GJQrECrvwnsZjXU863gJ0T2GXD37ITS0r6biEsUEyH/6/Q5tYyyENzBuMzbtsDP8Vd/RQ==", + "version": "35.8.0", + "resolved": "https://registry.npmjs.org/putout/-/putout-35.8.0.tgz", + "integrity": "sha512-3lo+EvLkIpDOTnFCB2cSekV12jDQSj7WvfgeIE21pPh54l8Xcz5iDIkOi1GvOxGg0bzcW8dLDAgDpSuOGarozQ==", "dev": true, "dependencies": { "@putout/babel": "^2.0.0", @@ -12599,7 +12599,7 @@ "@putout/plugin-tape": "^14.0.0", "@putout/plugin-try-catch": "^3.0.0", "@putout/plugin-types": "^3.0.0", - "@putout/plugin-typescript": "^6.0.0", + "@putout/plugin-typescript": "^7.0.0", "@putout/plugin-webpack": "^3.0.0", "@putout/processor-css": "^9.0.0", "@putout/processor-filesystem": "^4.0.0", diff --git a/package.json b/package.json index 5f0909147a..debd8d73f1 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ "submodules": "./setup/submodules.py", "ncu": "ncu -u -x '*eslint*' && npm i", "get-schema": "./setup/item.py", - "upgrades": "git add package.json package-lock.json submodules/* site/themes/relearn schema && git commit -m upgrades", + "upgrades": "git add package.json package-lock.json submodules/* site/themes/relearn schema && echo git commit -m upgrades", "db": "npm run zipup-debug-bridge" }, "main": "index.js", @@ -112,7 +112,7 @@ "zotero-plugin": "2.0.14" }, "devDependencies": { - "@retorquere/bibtex-parser": "^8.0.1", + "@retorquere/bibtex-parser": "^8.0.3", "@retorquere/zotero-sync": "^1.0.27", "@types/bluebird": "^3.5.42", "@types/lokijs": "^1.5.14", @@ -167,7 +167,7 @@ "process": "^0.11.10", "properties-reader": "^2.3.0", "pug": "^3.0.2", - "putout": "^35.7.6", + "putout": "^35.8.0", "recast": "^0.23.6", "regenerate": "^1.4.2", "rimraf": "^5.0.5", From c6c851ba6a3ce55c2e7095307385e6eaab71b881 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Sun, 7 Apr 2024 01:10:24 +0200 Subject: [PATCH 008/177] options --- translators/bibtex/bibtex.ts | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/translators/bibtex/bibtex.ts b/translators/bibtex/bibtex.ts index c2665d9a76..9503567e32 100644 --- a/translators/bibtex/bibtex.ts +++ b/translators/bibtex/bibtex.ts @@ -450,22 +450,18 @@ export async function parseBibTeX(input: string, translation: Translation): Prom return bibtexParser.parseAsync(input, { // we are actually sure it's a valid enum value; stupid workaround for TS2322: Type 'string' is not assignable to type 'boolean | "as-needed" | "strict"'. caseProtection: (translation.preferences.importCaseProtection as 'as-needed'), - unsupported: function(node) { // eslint-disable-line object-shorthand + unsupported: function(node, tex, _entry) { // eslint-disable-line object-shorthand switch (translation.preferences.importUnknownTexCommand) { case 'tex': - // eslint-disable-next-line @typescript-eslint/no-unsafe-return - return this.text(``) + return tex case 'text': - // eslint-disable-next-line @typescript-eslint/no-unsafe-return - return this.text(node.source) + return node.type === 'macro' ? node.content : tex case 'ignore': - // eslint-disable-next-line @typescript-eslint/no-unsafe-return - return this.text('') + return '' default: - throw new Error(`Unexpected unknownCommandHandler ${JSON.stringify(translation.preferences.importUnknownTexCommand)}`) + return tex } }, - markup: (translation.csquotes ? { enquote: translation.csquotes } : {}), sentenceCase: { langids: translation.preferences.importSentenceCase !== 'off', guess: translation.preferences.importSentenceCase === 'on+guess', From fe08b9979f696efc8bd715864a70cd9dae22b512 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Sun, 7 Apr 2024 01:28:06 +0200 Subject: [PATCH 009/177] options --- package-lock.json | 28 ++++++++++++++-------------- package.json | 4 ++-- translators/bibtex/bibtex.ts | 9 +-------- 3 files changed, 17 insertions(+), 24 deletions(-) diff --git a/package-lock.json b/package-lock.json index 17099115e3..800d2eca31 100644 --- a/package-lock.json +++ b/package-lock.json @@ -58,7 +58,7 @@ "zotero-plugin": "2.0.14" }, "devDependencies": { - "@retorquere/bibtex-parser": "^8.0.3", + "@retorquere/bibtex-parser": "^8.0.4", "@retorquere/zotero-sync": "^1.0.27", "@types/bluebird": "^3.5.42", "@types/lokijs": "^1.5.14", @@ -113,7 +113,7 @@ "process": "^0.11.10", "properties-reader": "^2.3.0", "pug": "^3.0.2", - "putout": "^35.8.0", + "putout": "^35.8.1", "recast": "^0.23.6", "regenerate": "^1.4.2", "rimraf": "^5.0.5", @@ -2491,15 +2491,15 @@ } }, "node_modules/@putout/plugin-convert-template-to-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@putout/plugin-convert-template-to-string/-/plugin-convert-template-to-string-1.0.0.tgz", - "integrity": "sha512-Oh/MN4Irc6b3qafOSh3VQ+qw/DVZq2FSKt200XKpJw1HXcUk8RpPxNnG3xTpn2vTe/qK2e4VDtlLgdxUNo0onA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@putout/plugin-convert-template-to-string/-/plugin-convert-template-to-string-2.0.0.tgz", + "integrity": "sha512-+qlmSL5Clg51KFI+o9oQfeQxKkKsx9c2JuPjLsuejCn8rp9wFLh9f/7SzoL7PNaBwrG0atcQUlqN0a3W/aXU3A==", "dev": true, "engines": { - "node": ">=8.3.0" + "node": ">=18" }, "peerDependencies": { - "putout": ">=7" + "putout": ">=35" } }, "node_modules/@putout/plugin-convert-to-arrow-function": { @@ -3570,9 +3570,9 @@ } }, "node_modules/@retorquere/bibtex-parser": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/@retorquere/bibtex-parser/-/bibtex-parser-8.0.3.tgz", - "integrity": "sha512-VEt4oCyFYvJe1aEzcLqMfRxGGZHvju0SN7akPdfpZpyY8X9PMf/pUkp3PrBL4JfRCS00KP7MLSLv/MkZpGkAuw==", + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@retorquere/bibtex-parser/-/bibtex-parser-8.0.4.tgz", + "integrity": "sha512-O02UGfyc8ObSJVJRE5tGlw9j5zBXXOLz7dzOzBiFgdAN0K6Gjsax+MN7au+UjoyPxGPv7ySNMq5UJDcBT2ClmA==", "dev": true, "dependencies": { "@unified-latex/unified-latex-util-pegjs": "^1.7.1", @@ -12471,9 +12471,9 @@ "integrity": "sha512-EkCRMV2w15w+9wylcpabacKK9VvTRX3TvhVQJBwIk4ThvllI2M6RlvdEZvJLhxsxy4x8IEDZneQhlGU0Pk5keg==" }, "node_modules/putout": { - "version": "35.8.0", - "resolved": "https://registry.npmjs.org/putout/-/putout-35.8.0.tgz", - "integrity": "sha512-3lo+EvLkIpDOTnFCB2cSekV12jDQSj7WvfgeIE21pPh54l8Xcz5iDIkOi1GvOxGg0bzcW8dLDAgDpSuOGarozQ==", + "version": "35.8.1", + "resolved": "https://registry.npmjs.org/putout/-/putout-35.8.1.tgz", + "integrity": "sha512-YB3og0CVWwv5FroYpV0Us9OLF4epqAJPF39pTAHCFsobsV5QG1Jc6oWb+bdTODiynDjYyfqQmzbvdVDOorvP3A==", "dev": true, "dependencies": { "@putout/babel": "^2.0.0", @@ -12531,7 +12531,7 @@ "@putout/plugin-convert-object-entries-to-array-entries": "^3.0.0", "@putout/plugin-convert-optional-to-logical": "^3.0.0", "@putout/plugin-convert-quotes-to-backticks": "^3.0.0", - "@putout/plugin-convert-template-to-string": "^1.0.0", + "@putout/plugin-convert-template-to-string": "^2.0.0", "@putout/plugin-convert-to-arrow-function": "^4.0.0", "@putout/plugin-declare": "^3.0.0", "@putout/plugin-declare-before-reference": "^3.0.0", diff --git a/package.json b/package.json index debd8d73f1..c4d03445e0 100644 --- a/package.json +++ b/package.json @@ -112,7 +112,7 @@ "zotero-plugin": "2.0.14" }, "devDependencies": { - "@retorquere/bibtex-parser": "^8.0.3", + "@retorquere/bibtex-parser": "^8.0.4", "@retorquere/zotero-sync": "^1.0.27", "@types/bluebird": "^3.5.42", "@types/lokijs": "^1.5.14", @@ -167,7 +167,7 @@ "process": "^0.11.10", "properties-reader": "^2.3.0", "pug": "^3.0.2", - "putout": "^35.8.0", + "putout": "^35.8.1", "recast": "^0.23.6", "regenerate": "^1.4.2", "rimraf": "^5.0.5", diff --git a/translators/bibtex/bibtex.ts b/translators/bibtex/bibtex.ts index 9503567e32..79a325a268 100644 --- a/translators/bibtex/bibtex.ts +++ b/translators/bibtex/bibtex.ts @@ -421,20 +421,13 @@ export function generateBibTeX(translation: Translation): void { } const importJabRef = new class { - public unabbrevations: Record = {} public strings = '' private loaded = { - unabbrevations: false, strings: false, } load(translation: Translation) { - if (!this.loaded.unabbrevations && translation.preferences.importJabRefAbbreviations) { - Object.assign(this.unabbrevations, JSON.parse(Zotero.File.getContentsFromURL('chrome://zotero-better-bibtex/content/resource/bibtex/unabbrev.json'))) - this.loaded.unabbrevations = true - } - if (!this.loaded.strings && translation.preferences.importJabRefStrings) { this.strings = Zotero.File.getContentsFromURL('chrome://zotero-better-bibtex/content/resource/bibtex/strings.bib') this.loaded.strings = true @@ -469,7 +462,7 @@ export async function parseBibTeX(input: string, translation: Translation): Prom }, verbatimFields: translation.verbatimFields, raw: translation.preferences.rawImports, - unabbreviate: importJabRef.unabbrevations, + unabbreviations: translation.preferences.importJabRefAbbreviations, strings: importJabRef.strings, }) } From 725fecf7159d1d774d80770b18d86f93c72a4337 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Tue, 9 Apr 2024 08:18:10 +0200 Subject: [PATCH 010/177] parser --- package-lock.json | 42 ++++++++---- package.json | 4 +- translators/bibtex/bibtex.ts | 115 ++++++++++++++++++--------------- translators/bibtex/exporter.ts | 2 +- 4 files changed, 96 insertions(+), 67 deletions(-) diff --git a/package-lock.json b/package-lock.json index 800d2eca31..46e890d331 100644 --- a/package-lock.json +++ b/package-lock.json @@ -58,7 +58,7 @@ "zotero-plugin": "2.0.14" }, "devDependencies": { - "@retorquere/bibtex-parser": "^8.0.4", + "@retorquere/bibtex-parser": "^8.0.12", "@retorquere/zotero-sync": "^1.0.27", "@types/bluebird": "^3.5.42", "@types/lokijs": "^1.5.14", @@ -113,7 +113,7 @@ "process": "^0.11.10", "properties-reader": "^2.3.0", "pug": "^3.0.2", - "putout": "^35.8.1", + "putout": "^35.10.0", "recast": "^0.23.6", "regenerate": "^1.4.2", "rimraf": "^5.0.5", @@ -2214,6 +2214,21 @@ "putout": ">=20" } }, + "node_modules/@putout/operator-rename-files": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@putout/operator-rename-files/-/operator-rename-files-1.0.0.tgz", + "integrity": "sha512-arXIWGffDV1YDVGREdcB5a9WVFENQ5R6F0HTOwpTs0s9Uy9YVFvoLQETzczJ9M0PWVfFC0fv+sr/GxhMbAT4LA==", + "dev": true, + "dependencies": { + "@putout/operator-filesystem": "^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "putout": ">=35" + } + }, "node_modules/@putout/plugin-apply-at": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@putout/plugin-apply-at/-/plugin-apply-at-2.0.0.tgz", @@ -2804,9 +2819,9 @@ } }, "node_modules/@putout/plugin-putout": { - "version": "18.7.0", - "resolved": "https://registry.npmjs.org/@putout/plugin-putout/-/plugin-putout-18.7.0.tgz", - "integrity": "sha512-R6uWPmIJhDiMZt9KTdmtIeqjNpyJ1UdIZx6yTma1LlRC1tUjuwDpI9PeWYC8eo0aiELl3/jW6BxCVooX40/N5g==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/@putout/plugin-putout/-/plugin-putout-19.0.0.tgz", + "integrity": "sha512-Qwl7G7MpujPL24WHw30Xk7HHLu/GwNqqDXX07/khOeMgfld2RSZGDK/xbCPlf37Db7wIWmkHgGoxVEa5Q8gnhw==", "dev": true, "dependencies": { "fullstore": "^3.0.0", @@ -2818,7 +2833,7 @@ "node": ">=18" }, "peerDependencies": { - "putout": ">=34" + "putout": ">=35" } }, "node_modules/@putout/plugin-putout-config": { @@ -3570,9 +3585,9 @@ } }, "node_modules/@retorquere/bibtex-parser": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/@retorquere/bibtex-parser/-/bibtex-parser-8.0.4.tgz", - "integrity": "sha512-O02UGfyc8ObSJVJRE5tGlw9j5zBXXOLz7dzOzBiFgdAN0K6Gjsax+MN7au+UjoyPxGPv7ySNMq5UJDcBT2ClmA==", + "version": "8.0.12", + "resolved": "https://registry.npmjs.org/@retorquere/bibtex-parser/-/bibtex-parser-8.0.12.tgz", + "integrity": "sha512-Jf6t/v6RAwY7E2yHFTGWGxPSRBeueYgz5GopELi10VeWW0d2alyOqhoFloSBsixM6OHyjhm6kqTPO9hlC4ERCQ==", "dev": true, "dependencies": { "@unified-latex/unified-latex-util-pegjs": "^1.7.1", @@ -12471,9 +12486,9 @@ "integrity": "sha512-EkCRMV2w15w+9wylcpabacKK9VvTRX3TvhVQJBwIk4ThvllI2M6RlvdEZvJLhxsxy4x8IEDZneQhlGU0Pk5keg==" }, "node_modules/putout": { - "version": "35.8.1", - "resolved": "https://registry.npmjs.org/putout/-/putout-35.8.1.tgz", - "integrity": "sha512-YB3og0CVWwv5FroYpV0Us9OLF4epqAJPF39pTAHCFsobsV5QG1Jc6oWb+bdTODiynDjYyfqQmzbvdVDOorvP3A==", + "version": "35.10.0", + "resolved": "https://registry.npmjs.org/putout/-/putout-35.10.0.tgz", + "integrity": "sha512-VD2kS1K9dPT0zaaaYfZUsDyd6XD9C6nVV4Ew6cEfFdy3iVhA2mBE2JHpLZUYbvbUvpNHVG/4KSRC3zmLveKRTg==", "dev": true, "dependencies": { "@putout/babel": "^2.0.0", @@ -12508,6 +12523,7 @@ "@putout/operator-json": "^2.0.0", "@putout/operator-match-files": "^3.0.0", "@putout/operator-regexp": "^1.0.0", + "@putout/operator-rename-files": "^1.0.0", "@putout/plugin-apply-at": "^2.0.0", "@putout/plugin-apply-destructuring": "^7.0.0", "@putout/plugin-apply-dot-notation": "^2.0.0", @@ -12556,7 +12572,7 @@ "@putout/plugin-npmignore": "^4.0.0", "@putout/plugin-package-json": "^7.0.0", "@putout/plugin-promises": "^14.0.0", - "@putout/plugin-putout": "^18.0.0", + "@putout/plugin-putout": "^19.0.0", "@putout/plugin-putout-config": "^5.0.0", "@putout/plugin-regexp": "^8.0.0", "@putout/plugin-remove-console": "^6.0.0", diff --git a/package.json b/package.json index c4d03445e0..014967ff75 100644 --- a/package.json +++ b/package.json @@ -112,7 +112,7 @@ "zotero-plugin": "2.0.14" }, "devDependencies": { - "@retorquere/bibtex-parser": "^8.0.4", + "@retorquere/bibtex-parser": "^8.0.12", "@retorquere/zotero-sync": "^1.0.27", "@types/bluebird": "^3.5.42", "@types/lokijs": "^1.5.14", @@ -167,7 +167,7 @@ "process": "^0.11.10", "properties-reader": "^2.3.0", "pug": "^3.0.2", - "putout": "^35.8.1", + "putout": "^35.10.0", "recast": "^0.23.6", "regenerate": "^1.4.2", "rimraf": "^5.0.5", diff --git a/translators/bibtex/bibtex.ts b/translators/bibtex/bibtex.ts index 79a325a268..a4079bbb55 100644 --- a/translators/bibtex/bibtex.ts +++ b/translators/bibtex/bibtex.ts @@ -15,7 +15,7 @@ import { Translation } from '../lib/translator' import { Entry as BaseEntry, Config } from './entry' -import * as bibtexParser from '@retorquere/bibtex-parser' +import { Library, Entry as BibTeXEntry, JabRefMetadata, ParseError, Creator, parseAsync as parse } from '@retorquere/bibtex-parser' function unique(value, index, self) { return self.indexOf(value) === index @@ -435,15 +435,15 @@ const importJabRef = new class { } } -export async function parseBibTeX(input: string, translation: Translation): Promise { +export async function parseBibTeX(input: string, translation: Translation): Promise { translation.ZoteroItem = ZoteroItem importJabRef.load(translation) - return bibtexParser.parseAsync(input, { + return await parse(input, { // we are actually sure it's a valid enum value; stupid workaround for TS2322: Type 'string' is not assignable to type 'boolean | "as-needed" | "strict"'. caseProtection: (translation.preferences.importCaseProtection as 'as-needed'), - unsupported: function(node, tex, _entry) { // eslint-disable-line object-shorthand + unsupported: (node, tex, _entry) => { switch (translation.preferences.importUnknownTexCommand) { case 'tex': return tex @@ -528,7 +528,9 @@ export class ZoteroItem { private patentNumberPrefix = '' // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types - constructor(private translation: Translation, private item: any, private bibtex: bibtexParser.Entry, private jabref: bibtexParser.jabref.JabRefMetadata) { + constructor(private translation: Translation, private item: any, private bibtex: BibTeXEntry, private jabref: JabRefMetadata) { + // hard for users to debug, replace with regular spaces + this.bibtex = JSON.parse(JSON.stringify(this.bibtex, (k, v) => (typeof v === 'string' ? v.replace(/\u00A0/g, ' ').trim() : v) as string)) } private fallback(fields: string[], value: string): boolean { @@ -543,9 +545,11 @@ export class ZoteroItem { protected $title(): boolean { let title: string[] = [] - let len: number + for (const field of ['title', 'titleaddon', 'subtitle']) { - if (len = this.bibtex.fields[field]?.length) title.push(this.bibtex.fields[field][len - 1]) + if (typeof this.bibtex.fields[field] === 'string' || typeof this.bibtex.fields[field] === 'number') { + title.push(`${this.bibtex.fields[field]}`) + } } title = title.filter(unique) @@ -562,7 +566,7 @@ export class ZoteroItem { protected $holder(): boolean { if (this.item.itemType === 'patent') { - this.item.assignee = this.bibtex.fields.holder.map((name: string) => name.replace(/"/g, '')).join('; ') + this.item.assignee = this.bibtex.fields.holder.map(creator => [creator.name, creator.lastName, creator.firstName].filter(name => name).map(name => name.replace(/"/g, '')).join(', ')).join('; ') } return true } @@ -573,11 +577,13 @@ export class ZoteroItem { field = candidates.find(f => this.validFields[f]) if (!field) return this.fallback(candidates, value) + const flatten = (v): string => typeof v === 'string' ? v : Array.isArray(v) ? v.join(' and ') : '' + this.item[field] = [ - (this.bibtex.fields.publisher || []).join(' and '), - (this.bibtex.fields.institution || []).join(' and '), - (this.bibtex.fields.school || []).join(' and '), - (this.bibtex.fields.organization || []).join(' and '), + flatten(this.bibtex.fields.publisher), + flatten(this.bibtex.fields.institution), + flatten(this.bibtex.fields.school), + flatten(this.bibtex.fields.organization), ].filter(v => v.replace(/[ \t\r\n]+/g, ' ').trim()).join(' / ') return true @@ -626,8 +632,8 @@ export class ZoteroItem { return this.set('publicationTitle', value) case 'book': - if ((this.bibtex.fields.title || []).includes(value)) return true - if (this.bibtex.fields.title && this.bibtex.crossref.donated.includes('booktitle')) return true + if (this.bibtex.fields.title && this.bibtex.crossref?.donated.includes('booktitle')) return true + if (this.bibtex.fields.title === value) return true if (!this.item.title) return this.set('title', value) break } @@ -762,12 +768,14 @@ export class ZoteroItem { protected $abstract(value: string): boolean { return this.set('abstractNote', value) } protected $keywords(): boolean { - let tags: string[] = [] + const tags: string[] = [] - const add = (data: string[]) => { - if (!Array.isArray(data)) return - for (const line of data) { - tags = [...tags, ...line.trim().split(/\s*[,;]\s*/).map(t => t.replace(/[\s\r\n]+/g, ' ')).filter(t => t)] + const add = (data: string | string[]) => { + if (typeof data === 'string') { + tags.push(...(data.split(/\s*[,;]\s*/))) + } + else { + tags.push(...data) } } @@ -776,7 +784,7 @@ export class ZoteroItem { add(this.bibtex.fields.mesh) add(this.bibtex.fields.tags) - this.item.tags = [...(new Set(tags))].sort() + this.item.tags = [...(new Set(tags.map(t => t.replace(/[\s\r\n]+/g, ' ')).filter(t => t)))].sort() return true } protected $keyword(): boolean { return this.$keywords() } @@ -786,15 +794,16 @@ export class ZoteroItem { protected $date(): boolean { if (this.item.date) return true - const dates = (this.bibtex.fields.date || []).slice() + const dates: string[] = [] + if (this.bibtex.fields.date) dates.push(this.bibtex.fields.date) - const year = (this.bibtex.fields.year && this.bibtex.fields.year[0]) || '' + const year = this.bibtex.fields.year || '' - let month = (this.bibtex.fields.month && this.bibtex.fields.month[0]) || '' - const monthno: number = months.indexOf(month.toLowerCase()) - if (monthno >= 0) month = `0${monthno + 1}`.slice(-2) + let month = this.bibtex.fields.month || '' + if (month) month = month.padStart(2, '0') - const day = (this.bibtex.fields.day && this.bibtex.fields.day[0]) || '' + let day = this.bibtex.fields.day || '' + if (day) day = day.padStart(2, '0') if (year && month.match(/^[0-9]+$/) && day.match(/^[0-9]+$/)) { dates.push(`${year}-${month}-${day}`) @@ -1089,9 +1098,9 @@ export class ZoteroItem { throw new Error(err) } - public import(errors: bibtexParser.ParseError[]): boolean { // eslint-disable-line @typescript-eslint/explicit-module-boundary-types + public import(errors: ParseError[]): boolean { // eslint-disable-line @typescript-eslint/explicit-module-boundary-types if (!Object.keys(this.bibtex.fields).length) { - errors.push({ message: `No fields in ${this.bibtex.key ? `@${this.bibtex.key}` : 'unnamed item'}` }) + errors.push({ error: `No fields in ${this.bibtex.key ? `@${this.bibtex.key}` : 'unnamed item'}`, input: this.bibtex.input }) return false } @@ -1105,7 +1114,7 @@ export class ZoteroItem { log.debug(msg) if (unknown) { if (this.translation.preferences.testing) throw new Error(msg) - errors.push({ message: msg }) + errors.push({ error: msg, input: this.bibtex.input }) } if (this.bibtex.type) this.extra.push(`tex.entrytype: ${this.bibtex.type}`) @@ -1120,7 +1129,7 @@ export class ZoteroItem { if ( this.item.itemType === 'journalArticle' && this.bibtex.fields.booktitle?.length - && this.bibtex.fields.booktitle.join('\n').match(/proceeding/i)) this.item.itemType = 'conferencePaper' + && this.bibtex.fields.booktitle.match(/proceeding/i)) this.item.itemType = 'conferencePaper' if (!valid.type[this.item.itemType]) this.error(`import error: unexpected item ${this.bibtex.key} of type ${this.item.itemType}`) this.validFields = valid.field[this.item.itemType] @@ -1166,6 +1175,16 @@ export class ZoteroItem { 'author', 'editor', 'translator', + + 'bookauthor', + 'collaborator', + 'commentator', + 'director', + 'editora', + 'editorb', + 'editors', + 'holder', + 'scriptwriter', ] const creatorTypeMap = { author: 'author', @@ -1185,8 +1204,8 @@ export class ZoteroItem { const creatorTypeRemap: Record = {} for (const creator of creatorTypes) { const creatortype = `${creator}type` - const remapped = creatorTypeMap[this.bibtex.fields[creatortype]?.[0]] - if (remapped) { + const remapped = creatorTypeMap[this.bibtex.fields[creatortype]] + if (typeof remapped === 'string') { creatorTypeRemap[creator] = remapped delete this.bibtex.fields[creatortype] } @@ -1194,13 +1213,11 @@ export class ZoteroItem { Object.assign(creatorTypeMap, creatorTypeRemap) const creatorsForType = Zotero.Utilities.getCreatorsForType(this.item.itemType) - for (const type of creatorTypes.concat(Object.keys(this.bibtex.creators).filter(other => !creatorTypes.includes(other)))) { + for (const type of creatorTypes.filter(t => this.bibtex.fields[t])) { // 'assignee' is not a creator field for Zotero if (type === 'holder' && this.item.itemType === 'patent') continue - if (!this.bibtex.fields[type]) continue - const creators = this.bibtex.fields[type].length ? this.bibtex.creators[type] : [] - delete this.bibtex.fields[type] + const creators: Creator[] = this.bibtex.fields[type] as unknown as Creator[] let creatorType = creatorTypeMap[`${this.item.itemType}.${type}`] || creatorTypeMap[type] if (creatorType === 'author') creatorType = ['director', 'inventor', 'programmer', 'author'].find(t => creatorsForType.includes(t)) @@ -1211,8 +1228,8 @@ export class ZoteroItem { for (const creator of creators) { const name: {lastName?: string, firstName?: string, fieldMode?: number, creatorType: string } = { creatorType } - if (creator.literal) { - name.lastName = creator.literal.replace(/\u00A0/g, ' ') + if (creator.name) { + name.lastName = creator.name name.fieldMode = 1 } else { @@ -1220,18 +1237,13 @@ export class ZoteroItem { name.lastName = creator.lastName || '' if (creator.prefix) name.lastName = `${creator.prefix} ${name.lastName}`.trim() if (creator.suffix) name.firstName = name.firstName ? `${name.firstName}, ${creator.suffix}` : creator.suffix - name.firstName = name.firstName.replace(/\u00A0/g, ' ').trim() - name.lastName = name.lastName.replace(/\u00A0/g, ' ').trim() if (name.lastName && !name.firstName) name.fieldMode = 1 } this.item.creators.push(name) } - } - // do this before because some handlers directly access this.bibtex.fields - for (const [field, values] of Object.entries(this.bibtex.fields)) { - this.bibtex.fields[field] = values.map(value => typeof value === 'string' ? value.replace(/\u00A0/g, ' ').trim() : `${value}`) + delete this.bibtex.fields[type] } const zoteroField = { @@ -1252,18 +1264,19 @@ export class ZoteroItem { } const urls: Set = new Set - for (const field of ['url', 'howpublished', 'remote-url']) { - if (this.bibtex.fields[field]) { - this.bibtex.fields[field] = this.bibtex.fields[field].filter(url => !this.$url(url, field, urls)) - } - } + for (let [field, values] of Object.entries(this.bibtex.fields)) { + if (!Array.isArray(values)) values = [ values ] - for (const [field, values] of Object.entries(this.bibtex.fields)) { for (const value of values) { + if (typeof value !== 'string') { + errors.push({ error: `unexpected value ${JSON.stringify(value)} for ${field}`, input: JSON.stringify(value) }) + continue + } + if (field.match(/^(local-zo-url-[0-9]+|file-[0-9]+)$/)) { if (this.$file(value)) continue } - else if (field.match(/^bdsk-url-[0-9]+$/)) { + else if (field.match(/^(bdsk-url-[0-9]+|url|howpublished|remote-url)$/)) { if (this.$url(value, field, urls)) continue } else if (field.match(/^bdsk-file-[0-9]+$/)) { diff --git a/translators/bibtex/exporter.ts b/translators/bibtex/exporter.ts index 9d83dc7664..580b2af76a 100644 --- a/translators/bibtex/exporter.ts +++ b/translators/bibtex/exporter.ts @@ -33,7 +33,7 @@ export class Exporter { if (!this.translation.BetterTeX || !this.translation.preferences.strings) return if (this.translation.BetterTeX && this.translation.preferences.exportBibTeXStrings.startsWith('match')) { - this.strings = bibtexParser.parse(this.translation.preferences.strings, { markup: (this.translation.csquotes ? { enquote: this.translation.csquotes } : {}) }).strings + this.strings = bibtexParser.parse(this.translation.preferences.strings).strings for (const [k, v] of Object.entries(this.strings)) { this.strings_reverse[v.toUpperCase()] = k.toUpperCase() } From cb16507b867f3a32794ce41d9e52f849c12aaba3 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Tue, 9 Apr 2024 23:41:10 +0200 Subject: [PATCH 011/177] let a thousand workarounds bloom --- content/ErrorReport.ts | 4 ++-- content/Preferences.ts | 4 ++-- content/ZoteroItemPane.ts | 38 ++++++++++++++++---------------- content/auto-export.ts | 4 +++- content/aux-scanner.ts | 5 ++--- content/better-bibtex.ts | 4 ++-- content/db/store/file.ts | 5 +++-- content/key-manager/formatter.ts | 3 ++- content/load-csv.ts | 3 ++- content/orchestrator.ts | 3 ++- content/os.ts | 20 ++++++++++++++++- content/path-search.ts | 3 ++- content/prefs.ts | 3 ++- content/serializer.ts | 3 ++- content/translators.ts | 4 ++-- content/worker/zotero.ts | 2 +- esbuild.js | 21 ++++++++++++++++-- translators/lib/translator.ts | 3 ++- 18 files changed, 88 insertions(+), 44 deletions(-) diff --git a/content/ErrorReport.ts b/content/ErrorReport.ts index da6aefd0d8..01b4418f25 100644 --- a/content/ErrorReport.ts +++ b/content/ErrorReport.ts @@ -1,7 +1,8 @@ Components.utils.import('resource://gre/modules/Services.jsm') import { Shim } from './os' -const $OS = typeof OS !== 'undefined' ? OS : Shim +import { is7 } from './client' +const $OS = is7 ? Shim : OS import { PromptService } from './prompt' @@ -14,7 +15,6 @@ import { KeyManager } from './key-manager' import { DB as Cache } from './db/cache' import { pick } from './file-picker' -import { is7 } from './client' import * as l10n from './l10n' import Tar from 'tar-js' diff --git a/content/Preferences.ts b/content/Preferences.ts index e150321ae2..d0f276b432 100644 --- a/content/Preferences.ts +++ b/content/Preferences.ts @@ -1,7 +1,8 @@ Components.utils.import('resource://gre/modules/Services.jsm') import { Shim } from './os' -const $OS = typeof OS !== 'undefined' ? OS : Shim +import { is7 } from './client' +const $OS = is7 ? Shim : OS import type { XUL } from '../typings/xul' @@ -18,7 +19,6 @@ import * as l10n from './l10n' import { Events } from './events' import { pick } from './file-picker' import { flash } from './flash' -import { is7 } from './client' import { icons } from './icons' // safe to keep "global" since only one pref pane will be loaded at any one time diff --git a/content/ZoteroItemPane.ts b/content/ZoteroItemPane.ts index e324265ef5..fb24d24adb 100644 --- a/content/ZoteroItemPane.ts +++ b/content/ZoteroItemPane.ts @@ -86,17 +86,17 @@ export class ZoteroItemPane { this.unload() }) - $patch$(itemBox.__proto__, 'refresh', original => function() { - // eslint-disable-next-line prefer-rest-params - original.apply(this, arguments) - - if (!this.item) { - // why is it refreshing if there is no item?! - log.debug('itemBox.refresh without an item') - return - } + if (!is7) { + $patch$(itemBox.__proto__, 'refresh', original => function() { + // eslint-disable-next-line prefer-rest-params + original.apply(this, arguments) + + if (!this.item) { + // why is it refreshing if there is no item?! + log.debug('itemBox.refresh without an item') + return + } - if (!is7) { const menuid = 'zotero-field-transform-menu-better-sentencecase' let menuitem = this.ownerDocument.getElementById(menuid) const menu = this.ownerDocument.getElementById('zotero-field-transform-menu') @@ -110,18 +110,18 @@ export class ZoteroItemPane { }, })) } - } - const { citationKey, pinned } = Zotero.BetterBibTeX.KeyManager.get(this.item.id) - const label = this.parentNode.querySelector('#better-bibtex-citekey-label') - const value = this.parentNode.querySelector('#better-bibtex-citekey-display') - if (!value) return // merge pane uses itembox + const { citationKey, pinned } = Zotero.BetterBibTeX.KeyManager.get(this.item.id) + const label = this.parentNode.querySelector('#better-bibtex-citekey-label') + const value = this.parentNode.querySelector('#better-bibtex-citekey-display') + if (!value) return // merge pane uses itembox - label.hidden = value.hidden = !citationKey + label.hidden = value.hidden = !citationKey - label.value = `${pinned ? icons.pin : ''}${l10n.localize('better-bibtex_item-pane_citekey')}` - value.value = citationKey - }) + label.value = `${pinned ? icons.pin : ''}${l10n.localize('better-bibtex_item-pane_citekey')}` + value.value = citationKey + }) + } } public unload(): void { diff --git a/content/auto-export.ts b/content/auto-export.ts index 24cbcea579..6cf4ac312d 100644 --- a/content/auto-export.ts +++ b/content/auto-export.ts @@ -2,8 +2,10 @@ Components.utils.import('resource://gre/modules/FileUtils.jsm') declare const FileUtils: any import { log } from './logger' + import { Shim } from './os' -const $OS = typeof OS !== 'undefined' ? OS : Shim +import { is7 } from './client' +const $OS = is7 ? Shim : OS import { Events } from './events' import { DB as Cache } from './db/cache' diff --git a/content/aux-scanner.ts b/content/aux-scanner.ts index 530361f2c8..6cfc559214 100644 --- a/content/aux-scanner.ts +++ b/content/aux-scanner.ts @@ -1,7 +1,6 @@ -import { is7 } from './client' - import { Shim } from './os' -const $OS = typeof OS !== 'undefined' ? OS : Shim +import { is7 } from './client' +const $OS = is7 ? Shim : OS if (!is7) Components.utils.import('resource://gre/modules/osfile.jsm') diff --git a/content/better-bibtex.ts b/content/better-bibtex.ts index 448fa4fe69..5598ab18a5 100644 --- a/content/better-bibtex.ts +++ b/content/better-bibtex.ts @@ -1,8 +1,8 @@ /* eslint-disable prefer-rest-params */ -import { is7 } from './client' import { Shim } from './os' -const $OS = typeof OS !== 'undefined' ? OS : Shim +import { is7 } from './client' +const $OS = is7 ? Shim : OS if (is7) Components.utils.importGlobalProperties(['FormData']) diff --git a/content/db/store/file.ts b/content/db/store/file.ts index 7aad9ef3c2..0d068493b9 100644 --- a/content/db/store/file.ts +++ b/content/db/store/file.ts @@ -1,10 +1,11 @@ /* eslint-disable @typescript-eslint/member-ordering */ import { log } from '../../logger' -import { is7 } from '../../client' + import { Shim } from '../../os' +import { is7 } from '../../client' if (!is7) Components.utils.import('resource://gre/modules/osfile.jsm') -const $OS = typeof OS !== 'undefined' ? OS : Shim +const $OS = is7 ? Shim : OS // Components.utils.import('resource://gre/modules/Sqlite.jsm') // declare const Sqlite: any diff --git a/content/key-manager/formatter.ts b/content/key-manager/formatter.ts index 802b5f3c22..e90efc7b3c 100644 --- a/content/key-manager/formatter.ts +++ b/content/key-manager/formatter.ts @@ -1,7 +1,8 @@ import type { Tag, RegularItem as SerializedRegularItem, Item as SerializedItem } from '../../gen/typings/serialized-item' import { Shim } from '../os' -const $OS = typeof OS !== 'undefined' ? OS : Shim +import { is7 } from '../../content/client' +const $OS = is7 ? Shim : OS import { client } from '../client' diff --git a/content/load-csv.ts b/content/load-csv.ts index 41da849a56..fb9e5a9770 100644 --- a/content/load-csv.ts +++ b/content/load-csv.ts @@ -1,5 +1,6 @@ import { Shim } from './os' -const $OS = typeof OS !== 'undefined' ? OS : Shim +import { is7 } from './client' +const $OS = is7 ? Shim : OS import csv from 'papaparse' import { log } from './logger' diff --git a/content/orchestrator.ts b/content/orchestrator.ts index a7931a8a29..388e86595a 100644 --- a/content/orchestrator.ts +++ b/content/orchestrator.ts @@ -5,7 +5,8 @@ import { log } from './logger' import { Preference } from './prefs' import { Shim } from './os' -const $OS = typeof OS !== 'undefined' ? OS : Shim +import { is7 } from './client' +const $OS = is7 ? Shim : OS type Handler = (reason: Reason, task?: Task) => void | string | Promise diff --git a/content/os.ts b/content/os.ts index 135330cf07..8c1ff61d54 100644 --- a/content/os.ts +++ b/content/os.ts @@ -1,4 +1,22 @@ import { is7 } from './client' import { $OS } from '../gen/osfile-shim' -export const Shim: any = is7 ? $OS : null +export const Shim: any = is7 ? $OS : undefined + +if (is7 && !Shim.Path.split) { + Shim.Path.split = (path: string) => { + path = Shim.Path.normalize(path) + + if (Services.appinfo.OS === 'WINNT') { + const absolute = !!path.match(/^[A-Z]:\\/i) + const components = path.replace(/^[A-Z]:\\/i, '').replace(/\\$/, '').split('\\') + const winDrive = absolute ? path[0] : undefined + return { absolute, components, winDrive } + } + else { + const absolute = path[0] === '/' + const components = path.replace(/^\//, '').replace(/\/$/, '').split('/') + return { absolute, components } + } + } +} diff --git a/content/path-search.ts b/content/path-search.ts index 24f077561f..35dd6dcf84 100644 --- a/content/path-search.ts +++ b/content/path-search.ts @@ -1,6 +1,7 @@ import { log } from './logger' import { Shim } from './os' -const $OS = typeof OS !== 'undefined' ? OS : Shim +import { is7 } from './client' +const $OS = is7 ? Shim : OS // https://searchfox.org/mozilla-central/source/toolkit/modules/subprocess/subprocess_win.jsm#135 doesn't seem to work on Windows. export async function findBinary(bin: string, installationDirectory: { mac?: string[], win?: string[] } = {}): Promise { diff --git a/content/prefs.ts b/content/prefs.ts index 2c2bb20a55..425b88d701 100644 --- a/content/prefs.ts +++ b/content/prefs.ts @@ -2,7 +2,8 @@ declare const Services: any import { Shim } from './os' -const $OS = typeof OS !== 'undefined' ? OS : Shim +import { is7 } from './client' +const $OS = is7 ? Shim : OS import { Events } from './events' import type { CharMap } from 'unicode2latex' diff --git a/content/serializer.ts b/content/serializer.ts index 59f326d676..06ce05824a 100644 --- a/content/serializer.ts +++ b/content/serializer.ts @@ -1,5 +1,6 @@ import { Shim } from './os' -const $OS = typeof OS !== 'undefined' ? OS : Shim +import { is7 } from './client' +const $OS = is7 ? Shim : OS import type { Attachment, Item } from '../gen/typings/serialized-item' import { JournalAbbrev } from './journal-abbrev' diff --git a/content/translators.ts b/content/translators.ts index ab9b3bba56..c4979445d6 100644 --- a/content/translators.ts +++ b/content/translators.ts @@ -1,7 +1,8 @@ /* eslint-disable no-case-declarations, @typescript-eslint/no-unsafe-return */ import { Shim } from './os' -const $OS = typeof OS !== 'undefined' ? OS : Shim +import { is7 } from './client' +const $OS = is7 ? Shim : OS Components.utils.import('resource://gre/modules/Services.jsm') @@ -23,7 +24,6 @@ import { $and } from './db/loki' import { Events } from './events' import { Pinger } from './ping' import Puqeue from 'puqeue' -import { is7 } from './client' import { orchestrator } from './orchestrator' import type { Reason } from './bootstrap' import { headers as Headers, byLabel, byId, bySlug } from '../gen/translators' diff --git a/content/worker/zotero.ts b/content/worker/zotero.ts index f15247f7aa..213d001d41 100644 --- a/content/worker/zotero.ts +++ b/content/worker/zotero.ts @@ -3,7 +3,7 @@ import { Shim } from '../os' import { is7 } from '../client' if (!is7) importScripts('resource://gre/modules/osfile.jsm') -const $OS = typeof OS !== 'undefined' ? OS : Shim +const $OS = is7 ? Shim : OS const ctx: DedicatedWorkerGlobalScope = self as any diff --git a/esbuild.js b/esbuild.js index 6ffefa3d42..25badd21fb 100644 --- a/esbuild.js +++ b/esbuild.js @@ -263,8 +263,25 @@ async function rebuild() { exportGlobals: true, metafile: 'gen/worker.json', external: [ 'jsdom' ], - banner: { js: '\ndump("\\nloading BBT chromeworker\\n")\ntry {\n' }, - footer: { js: '} catch ($$err$$) { dump("\\nerror: failed loading BBT chromeworker: " + $$err$$.message + "\\n" + $$err$$.stack + "\\n") }\ndump("\\nloaded BBT chromeworker\\n")\n' }, + banner: { js: ` + dump("\\nloading BBT chromeworker\\n") + var Services + if (typeof location !== 'undefined' && location.search) { + Services = { + appinfo: { + OS: { win: 'WINNT', mac: 'Darwin', lin: 'Linux' }[(new URLSearchParams(location.search)).get('platform')], + } + } + } + try { + `}, + footer: { js: ` + } + catch ($$err$$) { + dump("\\nerror: failed loading BBT chromeworker: " + $$err$$.message + "\\n" + $$err$$.stack + "\\n") + } + dump("\\nloaded BBT chromeworker\\n") + `}, }) // translators diff --git a/translators/lib/translator.ts b/translators/lib/translator.ts index c0e4d389fd..305042e10d 100644 --- a/translators/lib/translator.ts +++ b/translators/lib/translator.ts @@ -2,7 +2,8 @@ declare const Zotero: any declare const __estrace: any // eslint-disable-line no-underscore-dangle import { Shim } from '../../content/os' -const $OS = typeof OS !== 'undefined' ? OS : Shim +import { is7 } from '../../content/client' +const $OS = is7 ? Shim : OS import * as Prefs from '../../gen/preferences/meta' const PrefNames: Set = new Set(Object.keys(Prefs.defaults)) From d26a68a9f10809ad26bb1c791e6b61a3c018b1a5 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Wed, 10 Apr 2024 07:56:03 +0200 Subject: [PATCH 012/177] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 317d421f47..69d7fc9374 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,8 @@ Better BibTeX (BBT) is an extension for [Zotero](https://www.zotero.org) and [Ju ## Zotero 7 beta support +**Zotero beta 70+ currently not supported, a fix is underway** + Better BibTeX is mostly compatible with the Zotero 7 beta; I am awaiting a change by the Zotero team to get to complete support. You can find the status of Zotero 7 support in the first post of [#2522](https://github.com/retorquere/zotero-better-bibtex/issues/2522); if you find new problems (which are not still marked as unresolved in that top post), please report them as *new* issues, not by commenting on #2522. ## Juris-M support From cd8eaa4bdc043009747a18fa243b4a7e45c3e296 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Wed, 10 Apr 2024 07:56:35 +0200 Subject: [PATCH 013/177] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 69d7fc9374..79079e71d7 100644 --- a/README.md +++ b/README.md @@ -4,9 +4,9 @@ Better BibTeX (BBT) is an extension for [Zotero](https://www.zotero.org) and [Juris-M](https://juris-m.github.io) that makes it easier to manage bibliographic data, especially for people authoring documents using text-based toolchains (e.g. based on [LaTeX](https://www.latex-project.org) / [Markdown](https://www.markdownguide.org)). -## Zotero 7 beta support +## Zotero 7 beta support: Zotero beta 70+ currently not supported, a fix is underway -**Zotero beta 70+ currently not supported, a fix is underway** +#2829 Better BibTeX is mostly compatible with the Zotero 7 beta; I am awaiting a change by the Zotero team to get to complete support. You can find the status of Zotero 7 support in the first post of [#2522](https://github.com/retorquere/zotero-better-bibtex/issues/2522); if you find new problems (which are not still marked as unresolved in that top post), please report them as *new* issues, not by commenting on #2522. From 720d80b247ac27151680bd054b3d9d70b9c6bd2e Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Wed, 10 Apr 2024 07:57:17 +0200 Subject: [PATCH 014/177] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 79079e71d7..f268df298f 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Better BibTeX (BBT) is an extension for [Zotero](https://www.zotero.org) and [Ju ## Zotero 7 beta support: Zotero beta 70+ currently not supported, a fix is underway -#2829 +[#2829](https://github.com/retorquere/zotero-better-bibtex/issues/2829) Better BibTeX is mostly compatible with the Zotero 7 beta; I am awaiting a change by the Zotero team to get to complete support. You can find the status of Zotero 7 support in the first post of [#2522](https://github.com/retorquere/zotero-better-bibtex/issues/2522); if you find new problems (which are not still marked as unresolved in that top post), please report them as *new* issues, not by commenting on #2522. From fa2c491be0c3aeb74493f2ba5282a2657a74e4ba Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Mon, 25 Mar 2024 10:48:09 +0100 Subject: [PATCH 015/177] potential fix for #2805 --- content/aux-scanner.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/aux-scanner.ts b/content/aux-scanner.ts index 4d06238332..2affa30ddc 100644 --- a/content/aux-scanner.ts +++ b/content/aux-scanner.ts @@ -170,7 +170,7 @@ export const AUXScanner = new class { // eslint-disable-line @typescript-eslint/ } } - re = /(?:\\citation|@cite|\\abx@aux@cite)\{([^}]+)\}/g + re = /(?:\\citation|@cite|\\abx@aux@cite(?:[{]0[}])?)\{([^}]+)\}/g while (m = re.exec(contents)) { for (const key of m[1].split(',')) { if (!citekeys.includes(key)) citekeys.push(key) From 539abefa189738ee0e1a6c35142c620bebcf7f51 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Wed, 3 Apr 2024 16:05:47 +0200 Subject: [PATCH 016/177] actions --- .github/workflows/ci.yaml | 2 +- .github/workflows/src/ci.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 5051313dd5..a223b7690c 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -84,7 +84,7 @@ jobs: # site - name: build site - uses: peaceiris/actions-hugo@v2 + uses: peaceiris/actions-hugo@v3 if: ${{ github.event_name == 'push' && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags/')) }} with: diff --git a/.github/workflows/src/ci.yaml b/.github/workflows/src/ci.yaml index 27de563f28..ece3ea9e6c 100644 --- a/.github/workflows/src/ci.yaml +++ b/.github/workflows/src/ci.yaml @@ -93,7 +93,7 @@ jobs: # site - name: build site - uses: peaceiris/actions-hugo@v2 + uses: peaceiris/actions-hugo@v3 if: ${{ github.event_name == 'push' && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags/')) }} with: hugo-version: latest From 8690ea6b4bab95d3592daccea081376e6b428542 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Tue, 9 Apr 2024 16:51:10 +0200 Subject: [PATCH 017/177] nsiPromptService --- content/ErrorReport.ts | 11 ++++++----- content/key-manager.ts | 7 +++---- content/path-search.ts | 1 - content/prompt.ts | 9 ++++++--- site/themes/relearn | 2 +- submodules/babel | 2 +- submodules/biber | 2 +- submodules/biblatex | 2 +- submodules/citation-style-language-locales | 2 +- submodules/zotero-utilities | 2 +- translators/lib/translator.ts | 2 +- 11 files changed, 22 insertions(+), 20 deletions(-) diff --git a/content/ErrorReport.ts b/content/ErrorReport.ts index 43a579ddde..dbe5ae1e79 100644 --- a/content/ErrorReport.ts +++ b/content/ErrorReport.ts @@ -1,5 +1,7 @@ Components.utils.import('resource://gre/modules/Services.jsm') +import { PromptService } from './prompt' + import { Preference } from './prefs' import { defaults } from '../gen/preferences/meta' import { byId } from '../gen/translators' @@ -100,11 +102,10 @@ export class ErrorReport { } public restartWithDebugEnabled(): void { - const ps = Components.classes['@mozilla.org/embedcomp/prompt-service;1'].getService(Components.interfaces.nsIPromptService) - const buttonFlags = ps.BUTTON_POS_0 * ps.BUTTON_TITLE_IS_STRING - + ps.BUTTON_POS_1 * ps.BUTTON_TITLE_CANCEL - + ps.BUTTON_POS_2 * ps.BUTTON_TITLE_IS_STRING - const index = ps.confirmEx( + const buttonFlags = PromptService.BUTTON_POS_0 * PromptService.BUTTON_TITLE_IS_STRING + + PromptService.BUTTON_POS_1 * PromptService.BUTTON_TITLE_CANCEL + + PromptService.BUTTON_POS_2 * PromptService.BUTTON_TITLE_IS_STRING + const index = PromptService.confirmEx( null, Zotero.getString('zotero.debugOutputLogging'), Zotero.getString('zotero.debugOutputLogging.enabledAfterRestart', [Zotero.clientName]), diff --git a/content/key-manager.ts b/content/key-manager.ts index 8d29186130..0b386a9d01 100644 --- a/content/key-manager.ts +++ b/content/key-manager.ts @@ -4,7 +4,7 @@ import { orchestrator } from './orchestrator' import ETA from 'node-eta' -import { alert, prompt } from './prompt' +import { alert, prompt, PromptService } from './prompt' import { kuroshiro } from './key-manager/japanese' import { chinese } from './key-manager/chinese' @@ -173,12 +173,11 @@ export const KeyManager = new class _KeyManager { }, }).length if (warnAt > 0 && affected > warnAt) { - const ps = Components.classes['@mozilla.org/embedcomp/prompt-service;1'].getService(Components.interfaces.nsIPromptService) - const index = ps.confirmEx( + const index = PromptService.confirmEx( null, // no parent 'Better BibTeX for Zotero', // dialog title l10n.localize('better-bibtex_bulk-keys-confirm_warning', { treshold: warnAt }), - ps.STD_OK_CANCEL_BUTTONS + ps.BUTTON_POS_2 * ps.BUTTON_TITLE_IS_STRING, // buttons + PromptService.STD_OK_CANCEL_BUTTONS + PromptService.BUTTON_POS_2 * PromptService.BUTTON_TITLE_IS_STRING, // buttons null, null, l10n.localize('better-bibtex_bulk-keys-confirm_stop_asking'), // button labels null, {} // no checkbox ) diff --git a/content/path-search.ts b/content/path-search.ts index 268d624bb4..f2a73fdbc7 100644 --- a/content/path-search.ts +++ b/content/path-search.ts @@ -1,5 +1,4 @@ import { log } from './logger' -// import { OS } from '../typings/xpcom' // https://searchfox.org/mozilla-central/source/toolkit/modules/subprocess/subprocess_win.jsm#135 doesn't seem to work on Windows. export async function findBinary(bin: string, installationDirectory: { mac?: string[], win?: string[] } = {}): Promise { diff --git a/content/prompt.ts b/content/prompt.ts index b6bdecb2c6..f3bbbdf360 100644 --- a/content/prompt.ts +++ b/content/prompt.ts @@ -1,12 +1,15 @@ -const ps = Components.classes['@mozilla.org/embedcomp/prompt-service;1'].getService(Components.interfaces.nsIPromptService) +import { is7 } from './client' +export const PromptService = is7 + ? Services.prompt + : Components.classes['@mozilla.org/embedcomp/prompt-service;1'].getService(Components.interfaces.nsIPromptService) export function alert({ title, text }: { title?: string, text: string }): void { - ps.alert(null, title || 'Alert', text) + PromptService.alert(null, title || 'Alert', text) } export function prompt({ title, text, value }: { title?: string, text: string, value?: string }): string { const wrap = { value: value || '' } - if (ps.prompt(null, title || 'Enter text', text, wrap, null, {})) { + if (PromptService.prompt(null, title || 'Enter text', text, wrap, null, {})) { return wrap.value } else { diff --git a/site/themes/relearn b/site/themes/relearn index 4da0ebbaf8..0add74a831 160000 --- a/site/themes/relearn +++ b/site/themes/relearn @@ -1 +1 @@ -Subproject commit 4da0ebbaf819841c87efe9639a4a9b48ff2820ae +Subproject commit 0add74a831b25d64272e8e769880f32d970f5b79 diff --git a/submodules/babel b/submodules/babel index e25bf9bd68..1040ffd87c 160000 --- a/submodules/babel +++ b/submodules/babel @@ -1 +1 @@ -Subproject commit e25bf9bd686605211927b74a69e1b55ede9f315f +Subproject commit 1040ffd87cc538a6121ab34d34213bd1e907a212 diff --git a/submodules/biber b/submodules/biber index 4fef5849f6..80c047759e 160000 --- a/submodules/biber +++ b/submodules/biber @@ -1 +1 @@ -Subproject commit 4fef5849f6d0b57469b0d2a99b487f853bc11012 +Subproject commit 80c047759e3fd2986b21579a69854cfc5d9422db diff --git a/submodules/biblatex b/submodules/biblatex index 134da03fd3..533b1ee6ab 160000 --- a/submodules/biblatex +++ b/submodules/biblatex @@ -1 +1 @@ -Subproject commit 134da03fd355bf342cb919940fbc16267fe7651f +Subproject commit 533b1ee6ab1d7b1b61d830125ebad6375204cf81 diff --git a/submodules/citation-style-language-locales b/submodules/citation-style-language-locales index 7b5a477f2d..cf4b49404f 160000 --- a/submodules/citation-style-language-locales +++ b/submodules/citation-style-language-locales @@ -1 +1 @@ -Subproject commit 7b5a477f2d9a8882b52bcecdc50f08d4422cc822 +Subproject commit cf4b49404fc15cf9a37372e4707ce710b0935ccc diff --git a/submodules/zotero-utilities b/submodules/zotero-utilities index 9c89b23153..fbc4d6ad1c 160000 --- a/submodules/zotero-utilities +++ b/submodules/zotero-utilities @@ -1 +1 @@ -Subproject commit 9c89b23153ce621ed0f1d581a5e32248704c6fb7 +Subproject commit fbc4d6ad1c947035404db4321912ed46fb113380 diff --git a/translators/lib/translator.ts b/translators/lib/translator.ts index 1abc2ee325..9eeb7d0362 100644 --- a/translators/lib/translator.ts +++ b/translators/lib/translator.ts @@ -200,7 +200,7 @@ class Override { } public override(preference: string, extension: string): boolean { - const override = this.orig[`${preference}Override`] + const override: string = this.orig[`${preference}Override`] if (!this.exportPath || !override) { return false } From a59337cfd8297e7309d448dbeb8edd3034b3751c Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Tue, 9 Apr 2024 21:38:36 +0200 Subject: [PATCH 018/177] always great fun these surprises --- .eslintignore | 1 + .gitmodules | 4 +++ content/ErrorReport.ts | 13 +++++--- content/Preferences.ts | 5 ++- content/auto-export.ts | 22 +++++++------ content/aux-scanner.ts | 29 ++++++++++------- content/better-bibtex.ts | 14 ++++---- content/db/store/file.ts | 20 +++++++----- content/key-manager/formatter.ts | 5 ++- content/load-csv.ts | 5 ++- content/orchestrator.ts | 5 ++- content/os.ts | 4 +++ content/path-search.ts | 10 +++--- content/prefs.ts | 7 ++-- content/serializer.ts | 5 ++- content/translators.ts | 5 ++- content/worker/zotero.ts | 56 +++++++++++++++++--------------- setup/setup.py | 3 ++ setup/shims/path.js | 21 ++++++++++-- setup/submodules.py | 3 +- submodules/zotero | 1 + translators/lib/translator.ts | 7 ++-- 22 files changed, 159 insertions(+), 86 deletions(-) create mode 100644 content/os.ts create mode 160000 submodules/zotero diff --git a/.eslintignore b/.eslintignore index a5cba3a12d..bbdf34f348 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,3 +1,4 @@ node_modules *.d.ts headless +submodules diff --git a/.gitmodules b/.gitmodules index 8a562814a9..0f6d34f4d5 100644 --- a/.gitmodules +++ b/.gitmodules @@ -30,3 +30,7 @@ path = site/themes/relearn url = https://github.com/McShelby/hugo-theme-relearn.git branch = main +[submodule "submodules/zotero"] + path = submodules/zotero + url = https://github.com/zotero/zotero.git + branch = main diff --git a/content/ErrorReport.ts b/content/ErrorReport.ts index dbe5ae1e79..da6aefd0d8 100644 --- a/content/ErrorReport.ts +++ b/content/ErrorReport.ts @@ -1,5 +1,8 @@ Components.utils.import('resource://gre/modules/Services.jsm') +import { Shim } from './os' +const $OS = typeof OS !== 'undefined' ? OS : Shim + import { PromptService } from './prompt' import { Preference } from './prefs' @@ -66,7 +69,7 @@ export class ErrorReport { const version = require('../gen/version.js') try { - await Zotero.HTTP.request('PUT', `${this.bucket}/${OS.Path.basename(this.tarball)}`, { + await Zotero.HTTP.request('PUT', `${this.bucket}/${$OS.Path.basename(this.tarball)}`, { noCache: true, // followRedirects: true, // noCache: true, @@ -155,7 +158,7 @@ export class ErrorReport { public async save(): Promise { const filename = await pick('Logs', 'save', [['Tape Archive (*.tgz)', '*.tgz']], `${this.key}.tgz`) - if (filename) await OS.File.writeAtomic(filename, this.tar(), { tmpPath: filename + '.tmp' }) + if (filename) await $OS.File.writeAtomic(filename, this.tar(), { tmpPath: filename + '.tmp' }) } private async ping(region: string) { @@ -208,8 +211,8 @@ export class ErrorReport { items: win.arguments[0].wrappedJSObject.items, } - const acronyms = OS.Path.join(Zotero.BetterBibTeX.dir, 'acronyms.csv') - if (await OS.File.exists(acronyms)) this.errorlog.acronyms = await OS.File.read(acronyms, { encoding: 'utf-8' }) as unknown as string + const acronyms = $OS.Path.join(Zotero.BetterBibTeX.dir, 'acronyms.csv') + if (await $OS.File.exists(acronyms)) this.errorlog.acronyms = await $OS.File.read(acronyms, { encoding: 'utf-8' }) as unknown as string this.setValue('better-bibtex-error-context', this.errorlog.info) this.setValue('better-bibtex-error-errors', this.errorlog.errors) @@ -288,7 +291,7 @@ export class ErrorReport { if (autoExports.length) { info += 'Auto-exports:\n' for (const ae of autoExports) { - info += ` path: ...${JSON.stringify(OS.Path.split(ae.path).components.pop())}` + info += ` path: ...${JSON.stringify($OS.Path.split(ae.path).components.pop())}` switch (ae.type) { case 'collection': info += ` (${Zotero.Collections.get(ae.id)?.name || ''})` diff --git a/content/Preferences.ts b/content/Preferences.ts index 028e34e707..e150321ae2 100644 --- a/content/Preferences.ts +++ b/content/Preferences.ts @@ -1,5 +1,8 @@ Components.utils.import('resource://gre/modules/Services.jsm') +import { Shim } from './os' +const $OS = typeof OS !== 'undefined' ? OS : Shim + import type { XUL } from '../typings/xul' import { log } from './logger' @@ -124,7 +127,7 @@ class AutoExportPane { let label: string = { library: icons.computer, collection: icons.folder }[ae.type] label += ` ${this.name(ae, 'short')}` label += ` (${Translators.byId[ae.translatorID].label})` - const path = ae.path.startsWith(OS.Constants.Path.homeDir) ? ae.path.replace(OS.Constants.Path.homeDir, '~') : ae.path + const path = ae.path.startsWith($OS.Constants.Path.homeDir) ? ae.path.replace($OS.Constants.Path.homeDir, '~') : ae.path label += ` ${path}` return label } diff --git a/content/auto-export.ts b/content/auto-export.ts index 8172fac86b..24cbcea579 100644 --- a/content/auto-export.ts +++ b/content/auto-export.ts @@ -2,6 +2,8 @@ Components.utils.import('resource://gre/modules/FileUtils.jsm') declare const FileUtils: any import { log } from './logger' +import { Shim } from './os' +const $OS = typeof OS !== 'undefined' ? OS : Shim import { Events } from './events' import { DB as Cache } from './db/cache' @@ -146,7 +148,7 @@ class Git { case 'always': try { - repo.path = OS.Path.dirname(bib) + repo.path = $OS.Path.dirname(bib) } catch (err) { log.error('git.repo:', err) @@ -157,16 +159,16 @@ class Git { case 'config': // eslint-disable-next-line no-case-declarations let config = null - for (let root = OS.Path.dirname(bib); (await OS.File.exists(root)) && (await OS.File.stat(root)).isDir && root !== OS.Path.dirname(root); root = OS.Path.dirname(root)) { - config = OS.Path.join(root, '.git') - if ((await OS.File.exists(config)) && (await OS.File.stat(config)).isDir) break + for (let root = $OS.Path.dirname(bib); (await $OS.File.exists(root)) && (await $OS.File.stat(root)).isDir && root !== $OS.Path.dirname(root); root = $OS.Path.dirname(root)) { + config = $OS.Path.join(root, '.git') + if ((await $OS.File.exists(config)) && (await $OS.File.stat(config)).isDir) break config = null } if (!config) return repo - repo.path = OS.Path.dirname(config) + repo.path = $OS.Path.dirname(config) - config = OS.Path.join(config, 'config') - if (!(await OS.File.exists(config)) || (await OS.File.stat(config)).isDir) { + config = $OS.Path.join(config, 'config') + if (!(await $OS.File.exists(config)) || (await $OS.File.stat(config)).isDir) { return repo } @@ -341,8 +343,8 @@ const queue = new class TaskQueue { const root = scope.type === 'collection' ? scope.collection : false - const dir = OS.Path.dirname(ae.path) - const base = OS.Path.basename(ae.path).replace(new RegExp(`${ext.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&')}$`), '') + const dir = $OS.Path.dirname(ae.path) + const base = $OS.Path.basename(ae.path).replace(new RegExp(`${ext.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&')}$`), '') const autoExportPathReplace = { diacritics: Preference.autoExportPathReplaceDiacritics, @@ -351,7 +353,7 @@ const queue = new class TaskQueue { } for (const collection of collections) { - const output = OS.Path.join(dir, [base] + const output = $OS.Path.join(dir, [base] .concat(this.getCollectionPath(collection, root)) // eslint-disable-next-line no-control-regex .map((p: string) => p.replace(/[<>:'"/\\|?*\u0000-\u001F]/g, '')) diff --git a/content/aux-scanner.ts b/content/aux-scanner.ts index 2affa30ddc..86ed669409 100644 --- a/content/aux-scanner.ts +++ b/content/aux-scanner.ts @@ -1,4 +1,9 @@ -Components.utils.import('resource://gre/modules/osfile.jsm') +import { is7 } from './client' + +import { Shim } from './os' +const $OS = typeof OS !== 'undefined' ? OS : Shim + +if (!is7) Components.utils.import('resource://gre/modules/osfile.jsm') import { Translators } from './translators' import { Preference } from './prefs' @@ -61,7 +66,7 @@ export const AUXScanner = new class { // eslint-disable-line @typescript-eslint/ } } - const basename = OS.Path.basename(path).replace(/\.[^.]*$/, '') + const basename = $OS.Path.basename(path).replace(/\.[^.]*$/, '') if (options.tag) { await this.saveToTag(itemIDs, options.tag, libraryID) } @@ -80,7 +85,7 @@ export const AUXScanner = new class { // eslint-disable-line @typescript-eslint/ private async read(path) { const decoder: TextDecoder = new TextDecoder - return decoder.decode(await OS.File.read(path) as BufferSource) + return decoder.decode(await $OS.File.read(path) as BufferSource) } private async parse(path: string, citekeys: string[], bibfiles: Record): Promise { @@ -109,7 +114,7 @@ export const AUXScanner = new class { // eslint-disable-line @typescript-eslint/ const lua = `list-citekeys-${version}.lua` const filters: string[] = [] - const iterator = new OS.File.DirectoryIterator(Zotero.BetterBibTeX.dir) + const iterator = new $OS.File.DirectoryIterator(Zotero.BetterBibTeX.dir) try { await iterator.forEach(entry => { if (entry.isFile && entry.name !== lua && entry.name.match(/^list-citekeys.*\.lua$/)) filters.push(entry.name) @@ -119,22 +124,22 @@ export const AUXScanner = new class { // eslint-disable-line @typescript-eslint/ iterator.close() } for (const old of filters) { - await OS.File.remove(OS.Path.join(Zotero.BetterBibTeX.dir, old)) + await $OS.File.remove($OS.Path.join(Zotero.BetterBibTeX.dir, old)) } - const filter = OS.Path.join(Zotero.BetterBibTeX.dir, lua) - if (!(await OS.File.exists(filter))) { + const filter = $OS.Path.join(Zotero.BetterBibTeX.dir, lua) + if (!(await $OS.File.exists(filter))) { const url = 'chrome://zotero-better-bibtex/content/resource/list-citekeys.lua' const file = Zotero.File.pathToFile(filter) const contents = Zotero.File.getContentsFromURL(url) Zotero.File.putContents(file, contents) } - return filter + return filter } private async parseMD(path: string, citekeys: string[]) { const filter = await this.luaFilter() - const output: string = OS.Path.join(Zotero.getTempDirectory().path, `citekeys_${Zotero.Utilities.randomString()}.txt`) + const output: string = $OS.Path.join(Zotero.getTempDirectory().path, `citekeys_${Zotero.Utilities.randomString()}.txt`) try { await Zotero.Utilities.Internal.exec(this.pandoc, [ '--lua-filter', filter, '-t', 'markdown', '-o', output, path ]) for (const citekey of (await Zotero.File.getContentsAsync(output)).split(/\s+/)) { @@ -155,14 +160,14 @@ export const AUXScanner = new class { // eslint-disable-line @typescript-eslint/ let m, re const contents = await this.read(path) - const parent = OS.Path.dirname(path) + const parent = $OS.Path.dirname(path) if (bibfiles) { // bib files used re = /\\bibdata\{([^}]+)\}/g while (m = re.exec(contents)) { for (const bib of [m[1], `${m[1]}.bib`]) { - if (!bibfiles[bib] && await OS.File.exists(bib)) { + if (!bibfiles[bib] && await $OS.File.exists(bib)) { bibfiles[bib] = await this.read(bib) break } @@ -180,7 +185,7 @@ export const AUXScanner = new class { // eslint-disable-line @typescript-eslint/ // include files re = /\\@input\{([^}]+)\}/g while (m = re.exec(contents)) { - await this.parseAUX(OS.Path.join(parent, m[1]), citekeys, bibfiles) + await this.parseAUX($OS.Path.join(parent, m[1]), citekeys, bibfiles) } } diff --git a/content/better-bibtex.ts b/content/better-bibtex.ts index eb82b2a2b4..448fa4fe69 100644 --- a/content/better-bibtex.ts +++ b/content/better-bibtex.ts @@ -1,6 +1,8 @@ /* eslint-disable prefer-rest-params */ import { is7 } from './client' +import { Shim } from './os' +const $OS = typeof OS !== 'undefined' ? OS : Shim if (is7) Components.utils.importGlobalProperties(['FormData']) @@ -454,7 +456,7 @@ $patch$(Zotero.Translate.Export.prototype, 'translate', original => function Zot if (this.location) { if (displayOptions.exportFileData) { // when exporting file data, the user was asked to pick a directory rather than a file displayOptions.exportDir = this.location.path - displayOptions.exportPath = OS.Path.join(this.location.path, `${this.location.leafName}.${translator.target}`) + displayOptions.exportPath = $OS.Path.join(this.location.path, `${this.location.leafName}.${translator.target}`) displayOptions.cache = false } else { @@ -609,7 +611,7 @@ export class BetterBibTeX { case 'tag': // eslint-disable-next-line no-case-declarations - let name = OS.Path.basename(aux) + let name = $OS.Path.basename(aux) name = name.lastIndexOf('.') > 0 ? name.substr(0, name.lastIndexOf('.')) : name // eslint-disable-next-line no-case-declarations const tag = prompt({ @@ -694,8 +696,8 @@ export class BetterBibTeX { // this is what really takes long await Zotero.initializationPromise - this.dir = OS.Path.join(Zotero.DataDirectory.dir, 'better-bibtex') - await OS.File.makeDir(this.dir, { ignoreExisting: true }) + this.dir = $OS.Path.join(Zotero.DataDirectory.dir, 'better-bibtex') + await $OS.File.makeDir(this.dir, { ignoreExisting: true }) await Preference.startup(this.dir) Events.startup() }, @@ -703,7 +705,7 @@ export class BetterBibTeX { orchestrator.add('sqlite', { startup: async () => { - await Zotero.DB.queryAsync('ATTACH DATABASE ? AS betterbibtex', [OS.Path.join(Zotero.DataDirectory.dir, 'better-bibtex.sqlite')]) + await Zotero.DB.queryAsync('ATTACH DATABASE ? AS betterbibtex', [$OS.Path.join(Zotero.DataDirectory.dir, 'better-bibtex.sqlite')]) const tables: Record = {} for (const table of await Zotero.DB.columnQueryAsync("SELECT LOWER(REPLACE(name, '-', '')) FROM betterbibtex.sqlite_master where type='table'")) { @@ -868,7 +870,7 @@ export class BetterBibTeX { } const file = new FileUtils.File(path) - // cannot use await OS.File.exists here because we may be invoked in noWait mod + // cannot use await $OS.File.exists here because we may be invoked in noWait mod if (!file.exists()) { log.error('BetterBibTeX.getContents:', path, 'does not exist') return null diff --git a/content/db/store/file.ts b/content/db/store/file.ts index 14585f7a74..7aad9ef3c2 100644 --- a/content/db/store/file.ts +++ b/content/db/store/file.ts @@ -1,8 +1,10 @@ /* eslint-disable @typescript-eslint/member-ordering */ -Components.utils.import('resource://gre/modules/osfile.jsm') - import { log } from '../../logger' +import { is7 } from '../../client' +import { Shim } from '../../os' +if (!is7) Components.utils.import('resource://gre/modules/osfile.jsm') +const $OS = typeof OS !== 'undefined' ? OS : Shim // Components.utils.import('resource://gre/modules/Sqlite.jsm') // declare const Sqlite: any @@ -30,12 +32,12 @@ export class File { } private async save(name: string, data, dirty: boolean) { - const path = OS.Path.join(Zotero.BetterBibTeX.dir, `${name}.json`) - const save = dirty || !(await OS.File.exists(path)) + const path = $OS.Path.join(Zotero.BetterBibTeX.dir, `${name}.json`) + const save = dirty || !(await $OS.File.exists(path)) if (!save) return null - await OS.File.writeAtomic(path, JSON.stringify(data), { encoding: 'utf-8', tmpPath: `${path}.tmp`}) + await $OS.File.writeAtomic(path, JSON.stringify(data), { encoding: 'utf-8', tmpPath: `${path}.tmp`}) } public async loadDatabase(name: string, callback: ((v: null) => void)): Promise { @@ -68,16 +70,16 @@ export class File { } private async load(name) { - const path = OS.Path.join(Zotero.BetterBibTeX.dir, `${name}.json`) - const exists = await OS.File.exists(path) + const path = $OS.Path.join(Zotero.BetterBibTeX.dir, `${name}.json`) + const exists = await $OS.File.exists(path) if (!exists) return null - const data = JSON.parse(await OS.File.read(path, { encoding: 'utf-8' }) as unknown as string) + const data = JSON.parse(await $OS.File.read(path, { encoding: 'utf-8' }) as unknown as string) // this is intentional. If all is well, the database will be retained in memory until it's saved at // shutdown. If all is not well, this will make sure the caches are rebuilt from scratch on next start - await OS.File.move(path, `${path}.bak`) + await $OS.File.move(path, `${path}.bak`) // eslint-disable-next-line @typescript-eslint/no-unsafe-return return data diff --git a/content/key-manager/formatter.ts b/content/key-manager/formatter.ts index 162bc14439..802b5f3c22 100644 --- a/content/key-manager/formatter.ts +++ b/content/key-manager/formatter.ts @@ -1,5 +1,8 @@ import type { Tag, RegularItem as SerializedRegularItem, Item as SerializedItem } from '../../gen/typings/serialized-item' +import { Shim } from '../os' +const $OS = typeof OS !== 'undefined' ? OS : Shim + import { client } from '../client' import { Events } from '../events' @@ -1149,7 +1152,7 @@ class PatternFormatter { const acronyms: Record = {} try { - for (const row of csv2list(OS.Path.join(Zotero.BetterBibTeX.dir, `${list}.csv`))) { + for (const row of csv2list($OS.Path.join(Zotero.BetterBibTeX.dir, `${list}.csv`))) { if (row.length !== 2) { log.error('unexpected row in', `${list}.csv`, ':', row) continue diff --git a/content/load-csv.ts b/content/load-csv.ts index 55582f07da..41da849a56 100644 --- a/content/load-csv.ts +++ b/content/load-csv.ts @@ -1,9 +1,12 @@ +import { Shim } from './os' +const $OS = typeof OS !== 'undefined' ? OS : Shim + import csv from 'papaparse' import { log } from './logger' async function read(path: string): Promise { try { - return (await OS.File.exists(path)) ? (await OS.File.read(path, { encoding: 'utf-8' }) as unknown as string) : '' + return (await $OS.File.exists(path)) ? (await $OS.File.read(path, { encoding: 'utf-8' }) as unknown as string) : '' } catch (err) { log.error('csv.read', path, 'error:', err) diff --git a/content/orchestrator.ts b/content/orchestrator.ts index 77389f8819..a7931a8a29 100644 --- a/content/orchestrator.ts +++ b/content/orchestrator.ts @@ -4,6 +4,9 @@ import type { Reason } from './bootstrap' import { log } from './logger' import { Preference } from './prefs' +import { Shim } from './os' +const $OS = typeof OS !== 'undefined' ? OS : Shim + type Handler = (reason: Reason, task?: Task) => void | string | Promise import { print } from './logger' @@ -298,7 +301,7 @@ export class Orchestrator { ` - Zotero.File.putContents(Zotero.File.pathToFile(OS.Path.join(Zotero.BetterBibTeX.dir, `${phase}.gan`)), gantt) + Zotero.File.putContents(Zotero.File.pathToFile($OS.Path.join(Zotero.BetterBibTeX.dir, `${phase}.gan`)), gantt) } public async startup(reason: Reason, progress?: Progress): Promise { diff --git a/content/os.ts b/content/os.ts new file mode 100644 index 0000000000..135330cf07 --- /dev/null +++ b/content/os.ts @@ -0,0 +1,4 @@ +import { is7 } from './client' + +import { $OS } from '../gen/osfile-shim' +export const Shim: any = is7 ? $OS : null diff --git a/content/path-search.ts b/content/path-search.ts index f2a73fdbc7..24f077561f 100644 --- a/content/path-search.ts +++ b/content/path-search.ts @@ -1,10 +1,12 @@ import { log } from './logger' +import { Shim } from './os' +const $OS = typeof OS !== 'undefined' ? OS : Shim // https://searchfox.org/mozilla-central/source/toolkit/modules/subprocess/subprocess_win.jsm#135 doesn't seem to work on Windows. export async function findBinary(bin: string, installationDirectory: { mac?: string[], win?: string[] } = {}): Promise { const pref = `translators.better-bibtex.path.${bin}` let location: string = Zotero.Prefs.get(pref) - if (location && (await OS.File.exists(location))) return location + if (location && (await $OS.File.exists(location))) return location location = await pathSearch(bin, installationDirectory) if (typeof location === 'string') Zotero.Prefs.set(pref, location) return location @@ -57,11 +59,11 @@ async function pathSearch(bin: string, installationDirectory: { mac?: string[], for await (const path of asyncGenerator(paths)) { for (const ext of extensions) { try { - const exe: string = OS.Path.join(path, bin + ext) - if (!(await OS.File.exists(exe))) continue + const exe: string = $OS.Path.join(path, bin + ext) + if (!(await $OS.File.exists(exe))) continue // eslint-disable-next-line @typescript-eslint/await-thenable - const stat = await OS.File.stat(exe) + const stat = await $OS.File.stat(exe) if (stat.isDir) continue // eslint-disable-next-line no-bitwise diff --git a/content/prefs.ts b/content/prefs.ts index 8360de431f..2c2bb20a55 100644 --- a/content/prefs.ts +++ b/content/prefs.ts @@ -1,6 +1,9 @@ /* eslint-disable @typescript-eslint/quotes, max-len */ declare const Services: any +import { Shim } from './os' +const $OS = typeof OS !== 'undefined' ? OS : Shim + import { Events } from './events' import type { CharMap } from 'unicode2latex' @@ -216,7 +219,7 @@ export const Preference = new class PreferenceManager extends PreferenceManagerB const key = `${this.prefix}${pref}` const modified = { pref: Zotero.Prefs.get(`${key}.modified`) || 0, - file: (await OS.File.exists(path)) ? (await OS.File.stat(path)).lastModificationDate.getTime() : 0, + file: (await $OS.File.exists(path)) ? (await $OS.File.stat(path)).lastModificationDate.getTime() : 0, } if (modified.pref >= modified.file) return @@ -233,7 +236,7 @@ export const Preference = new class PreferenceManager extends PreferenceManagerB public async startup(dir: string) { // load from csv for easier editing - await this.loadFromCSV('charmap', OS.Path.join(dir, 'charmap.csv'), '{}', (rows: Record[]) => JSON.stringify( + await this.loadFromCSV('charmap', $OS.Path.join(dir, 'charmap.csv'), '{}', (rows: Record[]) => JSON.stringify( rows.reduce((acc: CharMap, row: { unicode: string, text: string, math: string }) => { if (row.unicode && (row.math || row.text)) acc[row.unicode] = { text: row.text, math: row.math } return acc diff --git a/content/serializer.ts b/content/serializer.ts index e414d6b9db..59f326d676 100644 --- a/content/serializer.ts +++ b/content/serializer.ts @@ -1,3 +1,6 @@ +import { Shim } from './os' +const $OS = typeof OS !== 'undefined' ? OS : Shim + import type { Attachment, Item } from '../gen/typings/serialized-item' import { JournalAbbrev } from './journal-abbrev' import { DB as Cache } from './db/cache' @@ -94,7 +97,7 @@ export const Serializer = new class { // eslint-disable-line @typescript-eslint/ private fastAttachment(serialized: Attachment, att): Attachment { if (att.attachmentLinkMode !== Zotero.Attachments.LINK_MODE_LINKED_URL) { serialized.localPath = att.getFilePath() - if (serialized.localPath) serialized.defaultPath = `files/${att.id}/${OS.Path.basename(serialized.localPath)}` + if (serialized.localPath) serialized.defaultPath = `files/${att.id}/${$OS.Path.basename(serialized.localPath)}` } // eslint-disable-next-line @typescript-eslint/no-unsafe-return return serialized diff --git a/content/translators.ts b/content/translators.ts index 9f9715f09a..ab9b3bba56 100644 --- a/content/translators.ts +++ b/content/translators.ts @@ -1,5 +1,8 @@ /* eslint-disable no-case-declarations, @typescript-eslint/no-unsafe-return */ +import { Shim } from './os' +const $OS = typeof OS !== 'undefined' ? OS : Shim + Components.utils.import('resource://gre/modules/Services.jsm') declare class ChromeWorker extends Worker { } @@ -249,7 +252,7 @@ export const Translators = new class { // eslint-disable-line @typescript-eslint const displayOptions = { ...this.displayOptions(job.translatorID, job.displayOptions), exportPath: job.path || undefined, - exportDir: job.path ? OS.Path.dirname(job.path) : undefined, + exportDir: job.path ? $OS.Path.dirname(job.path) : undefined, } const translator = this.byId[job.translatorID] diff --git a/content/worker/zotero.ts b/content/worker/zotero.ts index fcebec3c99..f15247f7aa 100644 --- a/content/worker/zotero.ts +++ b/content/worker/zotero.ts @@ -1,5 +1,10 @@ /* eslint-disable @typescript-eslint/restrict-template-expressions, @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-assignment */ +import { Shim } from '../os' +import { is7 } from '../client' +if (!is7) importScripts('resource://gre/modules/osfile.jsm') +const $OS = typeof OS !== 'undefined' ? OS : Shim + const ctx: DedicatedWorkerGlobalScope = self as any export const workerEnvironment = { @@ -14,7 +19,6 @@ for(const [key, value] of (new URLSearchParams(ctx.location.search)).entries()) declare const dump: (message: string) => void -importScripts('resource://gre/modules/osfile.jsm') importScripts('resource://zotero/config.js') // import ZOTERO_CONFIG' import { client, clientName } from '../../content/client' @@ -184,9 +188,9 @@ class WorkerZoteroBetterBibTeX { } public getContents(path: string): string { - if (path && OS.File.exists(path)) { + if (path && $OS.File.exists(path)) { // https://contest-server.cs.uchicago.edu/ref/JavaScript/developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/OSFile.jsm/OS-2.html - const array = OS.File.read(path) + const array = $OS.File.read(path) const decoder = new TextDecoder() return decoder.decode(array as BufferSource) } @@ -263,52 +267,52 @@ function isWinRoot(path) { } function makeDirs(path) { if (isWinRoot(path)) return - if (!OS.Path.split(path).absolute) throw new Error(`Will not create relative ${path}`) + if (!$OS.Path.split(path).absolute) throw new Error(`Will not create relative ${path}`) - path = OS.Path.normalize(path) + path = $OS.Path.normalize(path) const paths: string[] = [] // path === paths[0] means we've hit the root, as the dirname of root is root - while (path !== paths[0] && !isWinRoot(path) && !OS.File.exists(path)) { + while (path !== paths[0] && !isWinRoot(path) && !$OS.File.exists(path)) { paths.unshift(path) - path = OS.Path.dirname(path) + path = $OS.Path.dirname(path) } - if (!isWinRoot(path) && !(OS.File.stat(path) as OS.File.FileInfo).isDir) throw new Error(`makeDirs: root ${path} is not a directory`) + if (!isWinRoot(path) && !($OS.File.stat(path) as OS.File.FileInfo).isDir) throw new Error(`makeDirs: root ${path} is not a directory`) for (path of paths) { - OS.File.makeDir(path) as void + $OS.File.makeDir(path) as void } } function saveFile(path, overwrite) { if (!Zotero.exportDirectory) return false - if (!OS.File.exists(this.localPath)) return false + if (!$OS.File.exists(this.localPath)) return false - this.path = OS.Path.normalize(OS.Path.join(Zotero.exportDirectory, path)) + this.path = $OS.Path.normalize($OS.Path.join(Zotero.exportDirectory, path)) if (!this.path.startsWith(Zotero.exportDirectory)) throw new Error(`${path} looks like a relative path`) if (this.linkMode === 'imported_file' || (this.linkMode === 'imported_url' && this.contentType !== 'text/html')) { - makeDirs(OS.Path.dirname(this.path)) + makeDirs($OS.Path.dirname(this.path)) // eslint-disable-next-line @typescript-eslint/no-floating-promises - OS.File.copy(this.localPath, this.path, { noOverwrite: !overwrite }) + $OS.File.copy(this.localPath, this.path, { noOverwrite: !overwrite }) } else if (this.linkMode === 'imported_url') { - const target = OS.Path.dirname(this.path) - if (!overwrite && OS.File.exists(target)) throw new Error(`${path} would overwite ${target}`) + const target = $OS.Path.dirname(this.path) + if (!overwrite && $OS.File.exists(target)) throw new Error(`${path} would overwite ${target}`) - OS.File.removeDir(target, { ignoreAbsent: true }) + $OS.File.removeDir(target, { ignoreAbsent: true }) makeDirs(target) - const snapshot = OS.Path.dirname(this.localPath) - const iterator = new OS.File.DirectoryIterator(snapshot) - // PITA dual-type OS.Path is promises on main thread but sync in worker + const snapshot = $OS.Path.dirname(this.localPath) + const iterator = new $OS.File.DirectoryIterator(snapshot) + // PITA dual-type $OS.Path is promises on main thread but sync in worker iterator.forEach(entry => { // eslint-disable-line @typescript-eslint/no-floating-promises if (entry.isDir) throw new Error(`Unexpected directory ${entry.path} in snapshot`) if (entry.name !== '.zotero-ft-cache') { // eslint-disable-next-line @typescript-eslint/no-floating-promises - OS.File.copy(OS.Path.join(snapshot, entry.name), OS.Path.join(target, entry.name), { noOverwrite: !overwrite }) + $OS.File.copy($OS.Path.join(snapshot, entry.name), $OS.Path.join(target, entry.name), { noOverwrite: !overwrite }) } }) } @@ -403,14 +407,14 @@ class WorkerZotero { if (workerJob.output) { if (workerJob.options.exportFileData) { // output path is a directory - this.exportDirectory = OS.Path.normalize(workerJob.output) - this.exportFile = OS.Path.join(this.exportDirectory, `${OS.Path.basename(this.exportDirectory)}.${ZOTERO_TRANSLATOR_INFO.target}`) + this.exportDirectory = $OS.Path.normalize(workerJob.output) + this.exportFile = $OS.Path.join(this.exportDirectory, `${$OS.Path.basename(this.exportDirectory)}.${ZOTERO_TRANSLATOR_INFO.target}`) } else { - this.exportFile = OS.Path.normalize(workerJob.output) + this.exportFile = $OS.Path.normalize(workerJob.output) const ext = `.${ZOTERO_TRANSLATOR_INFO.target}` if (!this.exportFile.endsWith(ext)) this.exportFile += ext - this.exportDirectory = OS.Path.dirname(this.exportFile) + this.exportDirectory = $OS.Path.dirname(this.exportFile) } makeDirs(this.exportDirectory) } @@ -424,7 +428,7 @@ class WorkerZotero { if (this.exportFile) { const encoder = new TextEncoder() const array = encoder.encode(this.output) - OS.File.writeAtomic(this.exportFile, array) as void + $OS.File.writeAtomic(this.exportFile, array) as void } this.send({ kind: 'done', output: this.exportFile ? true : this.output }) } @@ -473,7 +477,7 @@ class WorkerZotero { item.saveFile = saveFile.bind(item) if (!item.defaultPath && item.localPath) { // why is this not set by itemGetter?! - item.defaultPath = `files/${item.itemID}/${OS.Path.basename(item.localPath)}` + item.defaultPath = `files/${item.itemID}/${$OS.Path.basename(item.localPath)}` } } diff --git a/setup/setup.py b/setup/setup.py index 7407768005..868d3f48a4 100755 --- a/setup/setup.py +++ b/setup/setup.py @@ -12,3 +12,6 @@ import manifest import ftl2dtd import unicode + +with open('submodules/zotero/chrome/content/zotero/osfile.mjs') as src, open('gen/osfile-shim.js', 'w') as tgt: + tgt.write(src.read().replace('export let OS =', 'export let $OS =')) diff --git a/setup/shims/path.js b/setup/shims/path.js index 14070a8a3d..16245f41a9 100644 --- a/setup/shims/path.js +++ b/setup/shims/path.js @@ -1,9 +1,24 @@ -export function join() { - return OS.Path.join(...arguments) +export function join(path, ...args) { + if (!args.length) return path + + if (typeof OS !== 'undefined') return OS.Path.join(...arguments) + + const platformSlash = Services.appinfo.OS == 'WINNT' ? '\\' : '/' + try { + if (args.length == 1 && args[0].includes(platformSlash)) return PathUtils.joinRelative(path, ...args) + return PathUtils.join(path, ...args); + } + catch (e) { + if (e.message.includes('NS_ERROR_FILE_UNRECOGNIZED_PATH')) { + Cu.reportError("WARNING: " + e.message + " -- update for IOUtils") + return [path, ...args].join(platformSlash); + } + throw e + } } export function dirname(filename) { - return OS.Path.dirname(filename) + return typeof OS !== 'undefined' ? OS.Path.dirname(filename) : PathUtils.parent(path) } export function resolve(path) { diff --git a/setup/submodules.py b/setup/submodules.py index e58e5dfb11..8f8d8e548d 100755 --- a/setup/submodules.py +++ b/setup/submodules.py @@ -34,7 +34,8 @@ def run(path, cmd): if online: root = str(Path(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..')).absolute()) - submodules = run(root, 'git submodule update --init --recursive --remote') + # submodules = run(root, 'git submodule update --init --recursive --remote') + submodules = run(root, 'git submodule update --init --remote') if submodules.strip() == '': submodules = ' up to date' print(submodules) diff --git a/submodules/zotero b/submodules/zotero new file mode 160000 index 0000000000..8b37a9889a --- /dev/null +++ b/submodules/zotero @@ -0,0 +1 @@ +Subproject commit 8b37a9889a8201724e771f84994f05687ebcbd1b diff --git a/translators/lib/translator.ts b/translators/lib/translator.ts index 9eeb7d0362..c0e4d389fd 100644 --- a/translators/lib/translator.ts +++ b/translators/lib/translator.ts @@ -1,6 +1,9 @@ declare const Zotero: any declare const __estrace: any // eslint-disable-line no-underscore-dangle +import { Shim } from '../../content/os' +const $OS = typeof OS !== 'undefined' ? OS : Shim + import * as Prefs from '../../gen/preferences/meta' const PrefNames: Set = new Set(Object.keys(Prefs.defaults)) import { client } from '../../content/client' @@ -206,9 +209,9 @@ class Override { } const candidates = [ - OS.Path.basename(this.exportPath).replace(/\.[^.]+$/, '') + extension, + $OS.Path.basename(this.exportPath).replace(/\.[^.]+$/, '') + extension, override, - ].map(filename => OS.Path.join(this.exportDir, filename)) + ].map(filename => $OS.Path.join(this.exportDir, filename)) for (const candidate of candidates) { Zotero.debug(`better-bibtex: looking for override ${preference} in ${candidate}`) From cfbc29c234cdf163ec7f89d17e2d615bfe392e60 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Wed, 10 Apr 2024 20:54:05 +0200 Subject: [PATCH 019/177] upgrades --- package-lock.json | 1994 +++++++++++++++++++++++++++++---------------- package.json | 20 +- submodules/zotero | 2 +- 3 files changed, 1325 insertions(+), 691 deletions(-) diff --git a/package-lock.json b/package-lock.json index e8c7bc120c..a5ea621137 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,7 +32,7 @@ "emittery": "^1.0.3", "fast-safe-stringify": "^2.1.1", "fold-to-ascii": "^5.0.1", - "fracturedjsonjs": "^3.1.1", + "fracturedjsonjs": "^4.0.0", "html-to-md": "^0.8.5", "i": "^0.3.7", "jieba-zh-cn": "^1.0.12", @@ -46,7 +46,7 @@ "pinyin": "^3.1.0", "punycode2": "^1.0.1", "puqeue": "^1.1.4", - "remeda": "^1.48.0", + "remeda": "^1.58.0", "sprintf-js": "^1.1.3", "tar-js": "^0.3.0", "text-title-case": "^1.0.2", @@ -58,11 +58,11 @@ "zotero-plugin": "2.0.14" }, "devDependencies": { - "@retorquere/bibtex-parser": "^7.0.16", + "@retorquere/bibtex-parser": "^8.0.12", "@retorquere/zotero-sync": "^1.0.27", "@types/bluebird": "^3.5.42", "@types/lokijs": "^1.5.14", - "@types/node": "^20.11.27", + "@types/node": "^20.12.7", "@xmldom/xmldom": "^0.8.10", "ajv-keywords": "^5.1.0", "archiver": "^7.0.1", @@ -79,10 +79,10 @@ "dom-parser": "^1.1.5", "dotenv": "^16.4.5", "ejs": "^3.1.9", - "esbuild": "^0.20.1", - "eslint": "^8.57.0", + "esbuild": "^0.20.2", + "eslint": "^9.0.0", "estrace": "^5.0.1", - "eta": "^3.2.0", + "eta": "^3.4.0", "fast-json-patch": "^3.1.1", "file-path-filter": "^3.0.2", "find-up": "^7.0.0", @@ -113,7 +113,7 @@ "process": "^0.11.10", "properties-reader": "^2.3.0", "pug": "^3.0.2", - "putout": "^35.7.3", + "putout": "^35.12.0", "recast": "^0.23.6", "regenerate": "^1.4.2", "rimraf": "^5.0.5", @@ -122,9 +122,9 @@ "string-template": "^1.0.0", "ts-node": "^10.9.2", "tslib": "^2.6.2", - "typescript": "^5.4.2", + "typescript": "^5.4.5", "unicode-11.0.0": "^0.7.8", - "unicode2latex": "^5.0.16", + "unicode2latex": "^6.0.4", "uri-templates": "^0.2.0", "util": "^0.12.5", "xml-parser": "^1.2.1", @@ -487,9 +487,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.1.tgz", - "integrity": "sha512-m55cpeupQ2DbuRGQMMZDzbv9J9PgVelPjlcmM5kxHnrBdBx6REaEd7LamYV7Dm8N7rCyR/XwU6rVP8ploKtIkA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", + "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", "cpu": [ "ppc64" ], @@ -503,9 +503,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.1.tgz", - "integrity": "sha512-4j0+G27/2ZXGWR5okcJi7pQYhmkVgb4D7UKwxcqrjhvp5TKWx3cUjgB1CGj1mfdmJBQ9VnUGgUhign+FPF2Zgw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", "cpu": [ "arm" ], @@ -519,9 +519,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.1.tgz", - "integrity": "sha512-hCnXNF0HM6AjowP+Zou0ZJMWWa1VkD77BXe959zERgGJBBxB+sV+J9f/rcjeg2c5bsukD/n17RKWXGFCO5dD5A==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", "cpu": [ "arm64" ], @@ -535,9 +535,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.1.tgz", - "integrity": "sha512-MSfZMBoAsnhpS+2yMFYIQUPs8Z19ajwfuaSZx+tSl09xrHZCjbeXXMsUF/0oq7ojxYEpsSo4c0SfjxOYXRbpaA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", "cpu": [ "x64" ], @@ -551,9 +551,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.1.tgz", - "integrity": "sha512-Ylk6rzgMD8klUklGPzS414UQLa5NPXZD5tf8JmQU8GQrj6BrFA/Ic9tb2zRe1kOZyCbGl+e8VMbDRazCEBqPvA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", "cpu": [ "arm64" ], @@ -567,9 +567,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.1.tgz", - "integrity": "sha512-pFIfj7U2w5sMp52wTY1XVOdoxw+GDwy9FsK3OFz4BpMAjvZVs0dT1VXs8aQm22nhwoIWUmIRaE+4xow8xfIDZA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", "cpu": [ "x64" ], @@ -583,9 +583,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.1.tgz", - "integrity": "sha512-UyW1WZvHDuM4xDz0jWun4qtQFauNdXjXOtIy7SYdf7pbxSWWVlqhnR/T2TpX6LX5NI62spt0a3ldIIEkPM6RHw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", "cpu": [ "arm64" ], @@ -599,9 +599,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.1.tgz", - "integrity": "sha512-itPwCw5C+Jh/c624vcDd9kRCCZVpzpQn8dtwoYIt2TJF3S9xJLiRohnnNrKwREvcZYx0n8sCSbvGH349XkcQeg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", "cpu": [ "x64" ], @@ -615,9 +615,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.1.tgz", - "integrity": "sha512-LojC28v3+IhIbfQ+Vu4Ut5n3wKcgTu6POKIHN9Wpt0HnfgUGlBuyDDQR4jWZUZFyYLiz4RBBBmfU6sNfn6RhLw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", "cpu": [ "arm" ], @@ -631,9 +631,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.1.tgz", - "integrity": "sha512-cX8WdlF6Cnvw/DO9/X7XLH2J6CkBnz7Twjpk56cshk9sjYVcuh4sXQBy5bmTwzBjNVZze2yaV1vtcJS04LbN8w==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", "cpu": [ "arm64" ], @@ -647,9 +647,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.1.tgz", - "integrity": "sha512-4H/sQCy1mnnGkUt/xszaLlYJVTz3W9ep52xEefGtd6yXDQbz/5fZE5dFLUgsPdbUOQANcVUa5iO6g3nyy5BJiw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", "cpu": [ "ia32" ], @@ -663,9 +663,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.1.tgz", - "integrity": "sha512-c0jgtB+sRHCciVXlyjDcWb2FUuzlGVRwGXgI+3WqKOIuoo8AmZAddzeOHeYLtD+dmtHw3B4Xo9wAUdjlfW5yYA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", "cpu": [ "loong64" ], @@ -679,9 +679,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.1.tgz", - "integrity": "sha512-TgFyCfIxSujyuqdZKDZ3yTwWiGv+KnlOeXXitCQ+trDODJ+ZtGOzLkSWngynP0HZnTsDyBbPy7GWVXWaEl6lhA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", "cpu": [ "mips64el" ], @@ -695,9 +695,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.1.tgz", - "integrity": "sha512-b+yuD1IUeL+Y93PmFZDZFIElwbmFfIKLKlYI8M6tRyzE6u7oEP7onGk0vZRh8wfVGC2dZoy0EqX1V8qok4qHaw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", "cpu": [ "ppc64" ], @@ -711,9 +711,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.1.tgz", - "integrity": "sha512-wpDlpE0oRKZwX+GfomcALcouqjjV8MIX8DyTrxfyCfXxoKQSDm45CZr9fanJ4F6ckD4yDEPT98SrjvLwIqUCgg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", "cpu": [ "riscv64" ], @@ -727,9 +727,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.1.tgz", - "integrity": "sha512-5BepC2Au80EohQ2dBpyTquqGCES7++p7G+7lXe1bAIvMdXm4YYcEfZtQrP4gaoZ96Wv1Ute61CEHFU7h4FMueQ==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", "cpu": [ "s390x" ], @@ -743,9 +743,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.1.tgz", - "integrity": "sha512-5gRPk7pKuaIB+tmH+yKd2aQTRpqlf1E4f/mC+tawIm/CGJemZcHZpp2ic8oD83nKgUPMEd0fNanrnFljiruuyA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", + "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", "cpu": [ "x64" ], @@ -759,9 +759,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.1.tgz", - "integrity": "sha512-4fL68JdrLV2nVW2AaWZBv3XEm3Ae3NZn/7qy2KGAt3dexAgSVT+Hc97JKSZnqezgMlv9x6KV0ZkZY7UO5cNLCg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", "cpu": [ "x64" ], @@ -775,9 +775,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.1.tgz", - "integrity": "sha512-GhRuXlvRE+twf2ES+8REbeCb/zeikNqwD3+6S5y5/x+DYbAQUNl0HNBs4RQJqrechS4v4MruEr8ZtAin/hK5iw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", "cpu": [ "x64" ], @@ -791,9 +791,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.1.tgz", - "integrity": "sha512-ZnWEyCM0G1Ex6JtsygvC3KUUrlDXqOihw8RicRuQAzw+c4f1D66YlPNNV3rkjVW90zXVsHwZYWbJh3v+oQFM9Q==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", "cpu": [ "x64" ], @@ -807,9 +807,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.1.tgz", - "integrity": "sha512-QZ6gXue0vVQY2Oon9WyLFCdSuYbXSoxaZrPuJ4c20j6ICedfsDilNPYfHLlMH7vGfU5DQR0czHLmJvH4Nzis/A==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", "cpu": [ "arm64" ], @@ -823,9 +823,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.1.tgz", - "integrity": "sha512-HzcJa1NcSWTAU0MJIxOho8JftNp9YALui3o+Ny7hCh0v5f90nprly1U3Sj1Ldj/CvKKdvvFsCRvDkpsEMp4DNw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", "cpu": [ "ia32" ], @@ -839,9 +839,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.1.tgz", - "integrity": "sha512-0MBh53o6XtI6ctDnRMeQ+xoCN8kD2qI1rY1KgF/xdWQwoFeKou7puvDfV8/Wv4Ctx2rRpET/gGdz3YlNtNACSA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", + "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", "cpu": [ "x64" ], @@ -877,14 +877,14 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.0.2.tgz", + "integrity": "sha512-wV19ZEGEMAC1eHgrS7UQPqsdEiCIbTKTasEfcXAigzoXICcqZSjBZEHlZwNVvKg6UBCjSlos84XiLqsRJnIcIg==", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -892,7 +892,7 @@ "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -919,19 +919,19 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.0.0.tgz", + "integrity": "sha512-RThY/MnKrhubF6+s1JflwUjPEsnCEmYCWwqa/aRISKWNXGZ9epUwft4bUMM35SdKF9xvBrLydAM1RDHd1Z//ZQ==", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.12.3.tgz", + "integrity": "sha512-jsNnTBlMWuTpDkeE3on7+dWJi0D6fdDfeANj/w7MpS8ztROCoLvIO2nG0CcFj+E4k8j4QrSTh4Oryi3i2G669g==", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", + "@humanwhocodes/object-schema": "^2.0.3", "debug": "^4.3.1", "minimatch": "^3.0.5" }, @@ -960,9 +960,9 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", - "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==" }, "node_modules/@isaacs/cliui": { "version": "8.0.2", @@ -1648,32 +1648,6 @@ "node": ">=18" } }, - "node_modules/@putout/cli-cache/node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@putout/cli-cache/node_modules/flat-cache": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.0.tgz", - "integrity": "sha512-EryKbCE/wxpxKniQlyas6PY1I9vwtF3uCBweX+N8KYTCn3Y12RTGtQAJ/bd5pl7kxUAc8v/R3Ake/N17OZiFqA==", - "dev": true, - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4", - "rimraf": "^5.0.5" - }, - "engines": { - "node": ">=16" - } - }, "node_modules/@putout/cli-choose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@putout/cli-choose/-/cli-choose-2.0.0.tgz", @@ -2285,6 +2259,21 @@ "putout": ">=20" } }, + "node_modules/@putout/operator-rename-files": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@putout/operator-rename-files/-/operator-rename-files-1.0.0.tgz", + "integrity": "sha512-arXIWGffDV1YDVGREdcB5a9WVFENQ5R6F0HTOwpTs0s9Uy9YVFvoLQETzczJ9M0PWVfFC0fv+sr/GxhMbAT4LA==", + "dev": true, + "dependencies": { + "@putout/operator-filesystem": "^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "putout": ">=35" + } + }, "node_modules/@putout/plugin-apply-at": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@putout/plugin-apply-at/-/plugin-apply-at-2.0.0.tgz", @@ -2310,15 +2299,15 @@ } }, "node_modules/@putout/plugin-apply-dot-notation": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@putout/plugin-apply-dot-notation/-/plugin-apply-dot-notation-1.1.0.tgz", - "integrity": "sha512-TEKrxwMk4eACIGoO8c3eW0fVnOJJPjdWmwVCGvPwXesvMS4m+SVlyBztslDFW9tBbnmenB81Ok2e8GZuWDkIwQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@putout/plugin-apply-dot-notation/-/plugin-apply-dot-notation-2.0.0.tgz", + "integrity": "sha512-Bo7MqwyFzH5FisSGsOP0rWjcebziKoaJkQhQXug27EmdCkEuuhacHgjv4k4j3E9/VuZMcJdsSM92i+vX2kR3Ag==", "dev": true, "engines": { - "node": ">=16" + "node": ">=18" }, "peerDependencies": { - "putout": ">=32" + "putout": ">=35" } }, "node_modules/@putout/plugin-apply-early-return": { @@ -2562,15 +2551,15 @@ } }, "node_modules/@putout/plugin-convert-template-to-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@putout/plugin-convert-template-to-string/-/plugin-convert-template-to-string-1.0.0.tgz", - "integrity": "sha512-Oh/MN4Irc6b3qafOSh3VQ+qw/DVZq2FSKt200XKpJw1HXcUk8RpPxNnG3xTpn2vTe/qK2e4VDtlLgdxUNo0onA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@putout/plugin-convert-template-to-string/-/plugin-convert-template-to-string-2.0.0.tgz", + "integrity": "sha512-+qlmSL5Clg51KFI+o9oQfeQxKkKsx9c2JuPjLsuejCn8rp9wFLh9f/7SzoL7PNaBwrG0atcQUlqN0a3W/aXU3A==", "dev": true, "engines": { - "node": ">=8.3.0" + "node": ">=18" }, "peerDependencies": { - "putout": ">=7" + "putout": ">=35" } }, "node_modules/@putout/plugin-convert-to-arrow-function": { @@ -2701,15 +2690,15 @@ } }, "node_modules/@putout/plugin-gitignore": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@putout/plugin-gitignore/-/plugin-gitignore-4.0.0.tgz", - "integrity": "sha512-AXzm21gzlh9Iw2cpIS9VRgMqc9ROOY1D6I9lD6X7Y+ToZ8MIeV2L9JNzqwP7mcz0/zn3oth95vOc95NDHCkuFg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@putout/plugin-gitignore/-/plugin-gitignore-5.0.0.tgz", + "integrity": "sha512-dQmAyR8P/VWxWdcJ7mSHrPDrsEDSnEcKvvQBSyutW8t73DFS9kZ5ehQ8o2uAvGhKjEW3HcoPK4F5+2DFB8+McA==", "dev": true, "engines": { - "node": ">=16" + "node": ">=18" }, "peerDependencies": { - "putout": ">=33" + "putout": ">=35" } }, "node_modules/@putout/plugin-logical-expressions": { @@ -2836,15 +2825,15 @@ } }, "node_modules/@putout/plugin-npmignore": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@putout/plugin-npmignore/-/plugin-npmignore-3.0.0.tgz", - "integrity": "sha512-r4Frs06vuHu9IFvUEQs1o5IHYL9hmTLAP2Y3Y2TT0GBk9NPICZZzVv+rBXXQ+W/LmFECU9stO4LgJcnxjXVBtQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@putout/plugin-npmignore/-/plugin-npmignore-4.1.0.tgz", + "integrity": "sha512-1cvHbg8EybIS242gL55eAovzZgAoFe+F9K9YLcPQf5mwH4Emj3ak0XIXQtIgbH9iPCJdUT8K+EkmlUfSDm2pMw==", "dev": true, "engines": { - "node": ">=16" + "node": ">=18" }, "peerDependencies": { - "putout": ">=33" + "putout": ">=35" } }, "node_modules/@putout/plugin-package-json": { @@ -2875,9 +2864,9 @@ } }, "node_modules/@putout/plugin-putout": { - "version": "18.7.0", - "resolved": "https://registry.npmjs.org/@putout/plugin-putout/-/plugin-putout-18.7.0.tgz", - "integrity": "sha512-R6uWPmIJhDiMZt9KTdmtIeqjNpyJ1UdIZx6yTma1LlRC1tUjuwDpI9PeWYC8eo0aiELl3/jW6BxCVooX40/N5g==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/@putout/plugin-putout/-/plugin-putout-19.0.0.tgz", + "integrity": "sha512-Qwl7G7MpujPL24WHw30Xk7HHLu/GwNqqDXX07/khOeMgfld2RSZGDK/xbCPlf37Db7wIWmkHgGoxVEa5Q8gnhw==", "dev": true, "dependencies": { "fullstore": "^3.0.0", @@ -2889,7 +2878,7 @@ "node": ">=18" }, "peerDependencies": { - "putout": ">=34" + "putout": ">=35" } }, "node_modules/@putout/plugin-putout-config": { @@ -3251,15 +3240,15 @@ } }, "node_modules/@putout/plugin-remove-useless-spread": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@putout/plugin-remove-useless-spread/-/plugin-remove-useless-spread-10.0.1.tgz", - "integrity": "sha512-VD83xGpNYQ3eih9Tb2TCH541PQHujwrzEzwZpmJ37SDeE9CK90HLIybowBa3sHojqX2ANF4rByq2V904V5+Qww==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@putout/plugin-remove-useless-spread/-/plugin-remove-useless-spread-11.0.0.tgz", + "integrity": "sha512-vMJBaer8ILjap1ao6kTviLi3nRSuRg9Yz7XDqmBQlRDM/cWz2v53aEzdOMqldezdewO4I/Mx0gOVOe9wjUyMlQ==", "dev": true, "engines": { "node": ">=18" }, "peerDependencies": { - "putout": ">=34" + "putout": ">=35" } }, "node_modules/@putout/plugin-remove-useless-template-expressions": { @@ -3371,15 +3360,15 @@ } }, "node_modules/@putout/plugin-tape": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/@putout/plugin-tape/-/plugin-tape-13.1.0.tgz", - "integrity": "sha512-5iXZEpO+25xYXzFyoaeobt8DmnmtAl/iqQ3RsoU3L+PhvybZIfr0ulvyZ+7+Alh07IeSntgQn9v+PTyBPCGyjA==", + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/@putout/plugin-tape/-/plugin-tape-14.2.0.tgz", + "integrity": "sha512-odoZS3Z+u1vO4jqpKCkOqRnBC/ZjzoEgSLJXSL1KWZAL6pBtnxnQnsNr5QPFdMmnpDyUu0iUQaV8ZpZ2UpJKxQ==", "dev": true, "engines": { "node": ">=18" }, "peerDependencies": { - "putout": ">=34" + "putout": ">=35" } }, "node_modules/@putout/plugin-try-catch": { @@ -3407,15 +3396,15 @@ } }, "node_modules/@putout/plugin-typescript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@putout/plugin-typescript/-/plugin-typescript-6.0.0.tgz", - "integrity": "sha512-9sQ/BK2XjndwjP9yJxkkjYk6ynxuQ3rctZVn2FcPoB+XA7/i4bYwmrs8Ve2TyEbm7Fgqhkzes3UB2271VGnJug==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@putout/plugin-typescript/-/plugin-typescript-7.3.0.tgz", + "integrity": "sha512-3+RbBpzcc2heOFK3t67FAXBwWU7E3NkWOg2KIweUe7a74WPA3CumUpm/ZFl81zRrczvm1bwzfaQNmVtTQtfT/A==", "dev": true, "engines": { "node": ">=18" }, "peerDependencies": { - "putout": ">=34" + "putout": ">=35" } }, "node_modules/@putout/plugin-webpack": { @@ -3590,12 +3579,19 @@ } }, "node_modules/@retorquere/bibtex-parser": { - "version": "7.0.16", - "resolved": "https://registry.npmjs.org/@retorquere/bibtex-parser/-/bibtex-parser-7.0.16.tgz", - "integrity": "sha512-8FyAzZZDQR3uXXwANgDkYaJVwTboES9FcPb2VPZxwuCODc7GPLSVeJpzrY7OC3NFc9BtNU7x8g6XFtUwPfGetg==", - "dev": true, - "dependencies": { - "unicode2latex": "^5.0.13", + "version": "8.0.12", + "resolved": "https://registry.npmjs.org/@retorquere/bibtex-parser/-/bibtex-parser-8.0.12.tgz", + "integrity": "sha512-Jf6t/v6RAwY7E2yHFTGWGxPSRBeueYgz5GopELi10VeWW0d2alyOqhoFloSBsixM6OHyjhm6kqTPO9hlC4ERCQ==", + "dev": true, + "dependencies": { + "@unified-latex/unified-latex-util-pegjs": "^1.7.1", + "@unified-latex/unified-latex-util-print-raw": "^1.7.1", + "@unified-latex/unified-latex-util-replace": "^1.7.1", + "@unified-latex/unified-latex-util-visit": "^1.7.1", + "compromise": "^14.13.0", + "unicode2latex": "^6.0.4", + "wink-eng-lite-web-model": "^1.6.0", + "wink-nlp": "^2.2.0", "xregexp": "^5.1.1" } }, @@ -4054,9 +4050,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.11.27", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.27.tgz", - "integrity": "sha512-qyUZfMnCg1KEz57r7pzFtSGt49f6RPkPBis3Vo4PbS7roQEDn22hiHzl/Lo1q4i4hDEgBJmBF/NTNg2XR0HbFg==", + "version": "20.12.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", + "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", "dependencies": { "undici-types": "~5.26.4" } @@ -4073,9 +4069,9 @@ "optional": true }, "node_modules/@types/semver": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.7.tgz", - "integrity": "sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg==" + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==" }, "node_modules/@types/tar-js": { "version": "0.3.5", @@ -4088,67 +4084,6 @@ "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", "dev": true }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", - "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", - "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/type-utils": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.4", - "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", - "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", - "dependencies": { - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, "node_modules/@typescript-eslint/scope-manager": { "version": "6.21.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", @@ -4165,32 +4100,6 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", - "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", - "dependencies": { - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, "node_modules/@typescript-eslint/types": { "version": "6.21.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", @@ -4252,30 +4161,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@typescript-eslint/utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", - "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "semver": "^7.5.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - } - }, "node_modules/@typescript-eslint/visitor-keys": { "version": "6.21.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", @@ -4297,49 +4182,180 @@ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" }, - "node_modules/@xmldom/xmldom": { - "version": "0.8.10", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", - "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "optional": true + "node_modules/@unified-latex/unified-latex-types": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-types/-/unified-latex-types-1.7.1.tgz", + "integrity": "sha512-WpwM9FxJi5gEvxYYWdbtcVutNgh52lHL3c1cU82pxRdJ4ltqdmDzLwZbqnWrQxOmsmVSeyaxAfOYQpv7B016CA==", + "dev": true }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "node_modules/@unified-latex/unified-latex-util-match": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-match/-/unified-latex-util-match-1.7.1.tgz", + "integrity": "sha512-UGZyuq3KQ8BPy+2W0Fm47/T2m6IzZ5AqdOPEzvAZrbanmAfUFfIcsXAFz7eZsxACQDebeIiBfyo/Mm5MKCw16Q==", "dev": true, "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" + "@unified-latex/unified-latex-types": "^1.7.1", + "@unified-latex/unified-latex-util-print-raw": "^1.7.1" } }, - "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" + "node_modules/@unified-latex/unified-latex-util-pegjs": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-pegjs/-/unified-latex-util-pegjs-1.7.1.tgz", + "integrity": "sha512-YTmUDUvcz5IdtuGgwyYXoIAmYB7hL1zwuCDifZnMn1mKSc6QNB1XcnpLm2J3msLp6PlBVM1ouPZ8JJJOzRktjw==", + "dev": true, + "dependencies": { + "@unified-latex/unified-latex-types": "^1.7.1", + "@unified-latex/unified-latex-util-match": "^1.7.1" } }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + "node_modules/@unified-latex/unified-latex-util-print-raw": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-print-raw/-/unified-latex-util-print-raw-1.7.1.tgz", + "integrity": "sha512-63Tgz85Q4YUrnqoba5xIE23eeGErVZqaTk/kFCth/1Cc/fMulU6LJtineDcjQta1nA2X08Srog4ugfanZMgevQ==", + "dev": true, + "dependencies": { + "@unified-latex/unified-latex-types": "^1.7.1" + } + }, + "node_modules/@unified-latex/unified-latex-util-replace": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-replace/-/unified-latex-util-replace-1.7.1.tgz", + "integrity": "sha512-4hrQqBMxt1eUQGoaohzNhl9XrCwsXEBeGu9BTb6oEn1GcsNrLDUCToiPvqHX9KipM8eh9grUJjqaTDPDt7FiZg==", + "dev": true, + "dependencies": { + "@unified-latex/unified-latex-types": "^1.7.1", + "@unified-latex/unified-latex-util-match": "^1.7.1", + "@unified-latex/unified-latex-util-split": "^1.7.1", + "@unified-latex/unified-latex-util-trim": "^1.7.1", + "@unified-latex/unified-latex-util-visit": "^1.7.1", + "unified": "^10.1.2" + } + }, + "node_modules/@unified-latex/unified-latex-util-replace/node_modules/@types/unist": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", + "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", + "dev": true + }, + "node_modules/@unified-latex/unified-latex-util-replace/node_modules/unified": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@unified-latex/unified-latex-util-split": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-split/-/unified-latex-util-split-1.7.1.tgz", + "integrity": "sha512-nWRP3ZZIOO/iKEldw/+9j/7jlTsyU3YFCNJJ9jQ/g53GTEWz72vj5vAM41mXOhzy8G0tkDOLUzu0thYKg0m+Iw==", + "dev": true, + "dependencies": { + "@unified-latex/unified-latex-types": "^1.7.1", + "@unified-latex/unified-latex-util-match": "^1.7.1" + } + }, + "node_modules/@unified-latex/unified-latex-util-trim": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-trim/-/unified-latex-util-trim-1.7.1.tgz", + "integrity": "sha512-qFj8pG8jIGPXXl5gFKQ+J1crdQOm+1Q3qv6aF0rtaN9qZdiTKc3E8zptR0JHWVK1lo4kkt9yMP8f84nnpBsCMw==", + "dev": true, + "dependencies": { + "@unified-latex/unified-latex-types": "^1.7.1", + "@unified-latex/unified-latex-util-match": "^1.7.1", + "@unified-latex/unified-latex-util-visit": "^1.7.1", + "unified": "^10.1.2" + } + }, + "node_modules/@unified-latex/unified-latex-util-trim/node_modules/@types/unist": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", + "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", + "dev": true + }, + "node_modules/@unified-latex/unified-latex-util-trim/node_modules/unified": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@unified-latex/unified-latex-util-visit": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-visit/-/unified-latex-util-visit-1.7.1.tgz", + "integrity": "sha512-G9DWrGTs3ZDlTxAhtlACIU1Nnuy6W13guIahtNPrmUkO24EPqnw2auwWjGbeTnf03hwoEopibst+ExrswDwt1A==", + "dev": true, + "dependencies": { + "@unified-latex/unified-latex-types": "^1.7.1", + "@unified-latex/unified-latex-util-match": "^1.7.1" + } + }, + "node_modules/@xmldom/xmldom": { + "version": "0.8.10", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", + "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "optional": true + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dev": true, + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/acorn-walk": { @@ -4648,14 +4664,15 @@ } }, "node_modules/array-includes": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", - "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", "is-string": "^1.0.7" }, "engines": { @@ -4682,33 +4699,16 @@ "node": ">=0.10.0" } }, - "node_modules/array.prototype.filter": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz", - "integrity": "sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/array.prototype.findlastindex": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz", - "integrity": "sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", + "es-abstract": "^1.23.2", "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "es-shim-unscopables": "^1.0.2" }, "engines": { @@ -5702,6 +5702,20 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/compromise": { + "version": "14.13.0", + "resolved": "https://registry.npmjs.org/compromise/-/compromise-14.13.0.tgz", + "integrity": "sha512-NqGgcBTRF7Zs3kBWJjKWoYdYTu0tZRcR4yKIA6Ve3KxpD9tgkbDHiVnFrkNYMt26jScrfKPGfVVkGaW++gq4VQ==", + "dev": true, + "dependencies": { + "efrt": "2.7.0", + "grad-school": "0.0.5", + "suffix-thumb": "5.0.2" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -5909,6 +5923,54 @@ "node": ">= 12" } }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -6202,6 +6264,15 @@ "resolved": "https://registry.npmjs.org/edtfy/-/edtfy-0.0.8.tgz", "integrity": "sha512-qhABI7FiyElTqKNMv4ETT3T4gRIPal3TxvNfx8Ekwhb2HlrWIiyQJJKVTJkVmsG6H6ape6fnZQbaH69bH31a8Q==" }, + "node_modules/efrt": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/efrt/-/efrt-2.7.0.tgz", + "integrity": "sha512-/RInbCy1d4P6Zdfa+TMVsf/ufZVotat5hCw3QXmWtjU+3pFEOvOQ7ibo3aIxyCJw2leIeAMjmPj+1SLJiCpdrQ==", + "dev": true, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/ejs": { "version": "3.1.9", "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", @@ -6276,17 +6347,21 @@ } }, "node_modules/es-abstract": { - "version": "1.22.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.4.tgz", - "integrity": "sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg==", + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", "dependencies": { "array-buffer-byte-length": "^1.0.1", "arraybuffer.prototype.slice": "^1.0.3", - "available-typed-arrays": "^1.0.6", + "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", "es-define-property": "^1.0.0", "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.2", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", "get-intrinsic": "^1.2.4", @@ -6294,15 +6369,16 @@ "globalthis": "^1.0.3", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.1", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "hasown": "^2.0.1", + "hasown": "^2.0.2", "internal-slot": "^1.0.7", "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", + "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", @@ -6310,17 +6386,17 @@ "object-keys": "^1.1.1", "object.assign": "^4.1.5", "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.0", + "safe-array-concat": "^1.1.2", "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.1", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.14" + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -6329,11 +6405,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" - }, "node_modules/es-define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", @@ -6353,6 +6424,17 @@ "node": ">= 0.4" } }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-set-tostringtag": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", @@ -6391,9 +6473,9 @@ } }, "node_modules/esbuild": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.1.tgz", - "integrity": "sha512-OJwEgrpWm/PCMsLVWXKqvcjme3bHNpOgN7Tb6cQnR5n0TPbQx1/Xrn7rqM+wn17bYeT6MGB5sn1Bh5YiGi70nA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", + "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", "dev": true, "hasInstallScript": true, "bin": { @@ -6403,29 +6485,29 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.20.1", - "@esbuild/android-arm": "0.20.1", - "@esbuild/android-arm64": "0.20.1", - "@esbuild/android-x64": "0.20.1", - "@esbuild/darwin-arm64": "0.20.1", - "@esbuild/darwin-x64": "0.20.1", - "@esbuild/freebsd-arm64": "0.20.1", - "@esbuild/freebsd-x64": "0.20.1", - "@esbuild/linux-arm": "0.20.1", - "@esbuild/linux-arm64": "0.20.1", - "@esbuild/linux-ia32": "0.20.1", - "@esbuild/linux-loong64": "0.20.1", - "@esbuild/linux-mips64el": "0.20.1", - "@esbuild/linux-ppc64": "0.20.1", - "@esbuild/linux-riscv64": "0.20.1", - "@esbuild/linux-s390x": "0.20.1", - "@esbuild/linux-x64": "0.20.1", - "@esbuild/netbsd-x64": "0.20.1", - "@esbuild/openbsd-x64": "0.20.1", - "@esbuild/sunos-x64": "0.20.1", - "@esbuild/win32-arm64": "0.20.1", - "@esbuild/win32-ia32": "0.20.1", - "@esbuild/win32-x64": "0.20.1" + "@esbuild/aix-ppc64": "0.20.2", + "@esbuild/android-arm": "0.20.2", + "@esbuild/android-arm64": "0.20.2", + "@esbuild/android-x64": "0.20.2", + "@esbuild/darwin-arm64": "0.20.2", + "@esbuild/darwin-x64": "0.20.2", + "@esbuild/freebsd-arm64": "0.20.2", + "@esbuild/freebsd-x64": "0.20.2", + "@esbuild/linux-arm": "0.20.2", + "@esbuild/linux-arm64": "0.20.2", + "@esbuild/linux-ia32": "0.20.2", + "@esbuild/linux-loong64": "0.20.2", + "@esbuild/linux-mips64el": "0.20.2", + "@esbuild/linux-ppc64": "0.20.2", + "@esbuild/linux-riscv64": "0.20.2", + "@esbuild/linux-s390x": "0.20.2", + "@esbuild/linux-x64": "0.20.2", + "@esbuild/netbsd-x64": "0.20.2", + "@esbuild/openbsd-x64": "0.20.2", + "@esbuild/sunos-x64": "0.20.2", + "@esbuild/win32-arm64": "0.20.2", + "@esbuild/win32-ia32": "0.20.2", + "@esbuild/win32-x64": "0.20.2" } }, "node_modules/escalade": { @@ -6448,40 +6530,36 @@ } }, "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.0.0.tgz", + "integrity": "sha512-IMryZ5SudxzQvuod6rUdIUz29qFItWx281VhtFVc2Psy/ZhlCeD/5DT6lBIJ4H3G+iamGJoTln1v+QSuPw0p7Q==", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", + "@eslint/eslintrc": "^3.0.2", + "@eslint/js": "9.0.0", + "@humanwhocodes/config-array": "^0.12.3", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", + "eslint-scope": "^8.0.1", + "eslint-visitor-keys": "^4.0.0", + "espree": "^10.0.1", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.19.0", "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", @@ -6495,7 +6573,7 @@ "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -6520,9 +6598,9 @@ } }, "node_modules/eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", + "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", "dependencies": { "debug": "^3.2.7" }, @@ -6543,84 +6621,27 @@ "ms": "^2.1.1" } }, - "node_modules/eslint-plugin-import": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", - "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", - "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", - "semver": "^6.3.1", - "tsconfig-paths": "^3.15.0" - }, - "engines": { - "node": ">=4" - }, + "node_modules/eslint-plugin-prefer-arrow": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-prefer-arrow/-/eslint-plugin-prefer-arrow-1.2.3.tgz", + "integrity": "sha512-J9I5PKCOJretVuiZRGvPQxCbllxGAV/viI20JO3LYblAodofBxyMnZAJ+WGeClHgANnSJberTNoFWWjrWKBuXQ==", "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + "eslint": ">=2.0.0" } }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/eslint-scope": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.1.tgz", + "integrity": "sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==", "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-prefer-arrow": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-prefer-arrow/-/eslint-plugin-prefer-arrow-1.2.3.tgz", - "integrity": "sha512-J9I5PKCOJretVuiZRGvPQxCbllxGAV/viI20JO3LYblAodofBxyMnZAJ+WGeClHgANnSJberTNoFWWjrWKBuXQ==", - "peerDependencies": { - "eslint": ">=2.0.0" - } - }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-visitor-keys": { @@ -6649,6 +6670,17 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", + "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/eslint/node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -6731,16 +6763,27 @@ } }, "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.0.1.tgz", + "integrity": "sha512-MWkrWZbJsL2UwnjxTX3gG8FneachS/Mwg7tdGXce011sJd5b0JG54vat5KHnfSBODZ3Wvzd2WnjxyzsRoVv+ww==", "dependencies": { - "acorn": "^8.9.0", + "acorn": "^8.11.3", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "eslint-visitor-keys": "^4.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", + "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -6823,9 +6866,9 @@ } }, "node_modules/eta": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eta/-/eta-3.2.0.tgz", - "integrity": "sha512-Qzc3it7nLn49dbOb9+oHV9rwtt9qN8oShRztqkZ3gXPqQflF0VLin5qhWk0g/2ioibBwT4DU6OIMVft7tg/rVg==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/eta/-/eta-3.4.0.tgz", + "integrity": "sha512-tCsc7WXTjrTx4ZjYLplcqrI3o4mYJ+Z6YspeuGL8tbt/hHoMchwBwtKfwM09svEY86iRapY93vUqQttcNuIO5Q==", "dev": true, "engines": { "node": ">=6.0.0" @@ -7253,14 +7296,14 @@ } }, "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dependencies": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0" } }, "node_modules/file-path-filter": { @@ -7429,55 +7472,21 @@ } }, "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dependencies": { "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flat-cache/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "keyv": "^4.5.4" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/flat-cache/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=16" } }, "node_modules/flatted": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.0.tgz", - "integrity": "sha512-noqGuLw158+DuD9UPRKHpJ2hGxpFyDlYYrfM0mWt4XhT4n0lwzTLh70Tkdyy4kyTmyTT9Bv7bWAJqw7cgkEXDg==" + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==" }, "node_modules/fold-to-ascii": { "version": "5.0.1", @@ -7555,9 +7564,9 @@ } }, "node_modules/fracturedjsonjs": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fracturedjsonjs/-/fracturedjsonjs-3.1.1.tgz", - "integrity": "sha512-CjedDVndDnRjqgvrQtJ1wB3JsPTS07WtkJ0bHz47e3+acsmS9GKm0AatxFsLCaYWFXTszz2z7PeARFsBJcbiWA==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fracturedjsonjs/-/fracturedjsonjs-4.0.0.tgz", + "integrity": "sha512-IFRM3y41/Wo8/JvpG6SHGiKxQRzG250BPn178T6C9p60vKihpMUeM4nT+ism8w+9eGoYqgPw45oKtSLJldPf3g==" }, "node_modules/fragment-cache": { "version": "0.2.1", @@ -7913,14 +7922,11 @@ } }, "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dependencies": { - "type-fest": "^0.20.2" - }, + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -7981,6 +7987,15 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, + "node_modules/grad-school": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/grad-school/-/grad-school-0.0.5.tgz", + "integrity": "sha512-rXunEHF9M9EkMydTBux7+IryYXEZinRk6g8OBOGDBzo/qWJjhTxy86i5q7lQYpCLHN8Sqv1XX3OIOc7ka2gtvQ==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", @@ -8188,9 +8203,9 @@ } }, "node_modules/hasown": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", - "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dependencies": { "function-bind": "^1.1.2" }, @@ -8557,6 +8572,20 @@ "node": ">= 0.4" } }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", @@ -8824,11 +8853,14 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -11533,13 +11565,14 @@ } }, "node_modules/object.fromentries": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", - "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -11549,15 +11582,16 @@ } }, "node_modules/object.groupby": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.2.tgz", - "integrity": "sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dependencies": { - "array.prototype.filter": "^1.0.3", - "call-bind": "^1.0.5", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.0.0" + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/object.pick": { @@ -11573,13 +11607,13 @@ } }, "node_modules/object.values": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", - "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -12316,9 +12350,9 @@ "integrity": "sha512-EkCRMV2w15w+9wylcpabacKK9VvTRX3TvhVQJBwIk4ThvllI2M6RlvdEZvJLhxsxy4x8IEDZneQhlGU0Pk5keg==" }, "node_modules/putout": { - "version": "35.7.3", - "resolved": "https://registry.npmjs.org/putout/-/putout-35.7.3.tgz", - "integrity": "sha512-hd74dP9X4xhDaFEI4tnqXDw45x8bTLTUUfesUTDrTrqo1ZX4gZfcin3gdGI6E2YxV/MeB4gX+/XbZxszD37msQ==", + "version": "35.12.0", + "resolved": "https://registry.npmjs.org/putout/-/putout-35.12.0.tgz", + "integrity": "sha512-B3IcyvfYgINqfbPPU6UE26of0rgLDSgUCmi051zJQI+G9zGUM1hRDcHiofziqohBipp/MKF3VYtj0AVYVdnPIw==", "dev": true, "dependencies": { "@putout/babel": "^2.0.0", @@ -12353,9 +12387,10 @@ "@putout/operator-json": "^2.0.0", "@putout/operator-match-files": "^3.0.0", "@putout/operator-regexp": "^1.0.0", + "@putout/operator-rename-files": "^1.0.0", "@putout/plugin-apply-at": "^2.0.0", "@putout/plugin-apply-destructuring": "^7.0.0", - "@putout/plugin-apply-dot-notation": "^1.0.0", + "@putout/plugin-apply-dot-notation": "^2.0.0", "@putout/plugin-apply-early-return": "^3.0.0", "@putout/plugin-apply-flat-map": "^2.0.0", "@putout/plugin-apply-optional-chaining": "^5.0.0", @@ -12376,7 +12411,7 @@ "@putout/plugin-convert-object-entries-to-array-entries": "^3.0.0", "@putout/plugin-convert-optional-to-logical": "^3.0.0", "@putout/plugin-convert-quotes-to-backticks": "^3.0.0", - "@putout/plugin-convert-template-to-string": "^1.0.0", + "@putout/plugin-convert-template-to-string": "^2.0.0", "@putout/plugin-convert-to-arrow-function": "^4.0.0", "@putout/plugin-declare": "^3.0.0", "@putout/plugin-declare-before-reference": "^3.0.0", @@ -12384,10 +12419,10 @@ "@putout/plugin-eslint": "^8.0.0", "@putout/plugin-extract-object-properties": "^9.0.0", "@putout/plugin-extract-sequence-expressions": "^3.0.0", - "@putout/plugin-filesystem": "^4.0.0", + "@putout/plugin-filesystem": "^5.0.0", "@putout/plugin-for-of": "^4.0.0", "@putout/plugin-github": "^12.0.0", - "@putout/plugin-gitignore": "^4.0.0", + "@putout/plugin-gitignore": "^5.0.0", "@putout/plugin-logical-expressions": "^5.0.0", "@putout/plugin-madrun": "^18.0.0", "@putout/plugin-math": "^2.0.0", @@ -12398,10 +12433,10 @@ "@putout/plugin-montag": "^2.0.0", "@putout/plugin-new": "^3.0.1", "@putout/plugin-nodejs": "^11.0.0", - "@putout/plugin-npmignore": "^3.0.0", + "@putout/plugin-npmignore": "^4.0.0", "@putout/plugin-package-json": "^7.0.0", "@putout/plugin-promises": "^14.0.0", - "@putout/plugin-putout": "^18.0.0", + "@putout/plugin-putout": "^19.0.0", "@putout/plugin-putout-config": "^5.0.0", "@putout/plugin-regexp": "^8.0.0", "@putout/plugin-remove-console": "^6.0.0", @@ -12431,7 +12466,7 @@ "@putout/plugin-remove-useless-operand": "^2.0.0", "@putout/plugin-remove-useless-replace": "^1.0.1", "@putout/plugin-remove-useless-return": "^6.0.0", - "@putout/plugin-remove-useless-spread": "^10.0.0", + "@putout/plugin-remove-useless-spread": "^11.0.0", "@putout/plugin-remove-useless-template-expressions": "^2.0.0", "@putout/plugin-remove-useless-variables": "^10.0.0", "@putout/plugin-reuse-duplicate-init": "^5.0.0", @@ -12441,10 +12476,10 @@ "@putout/plugin-sort-imports-by-specifiers": "^1.0.0", "@putout/plugin-split-nested-destructuring": "^3.0.0", "@putout/plugin-split-variable-declarations": "^3.0.0", - "@putout/plugin-tape": "^13.0.0", + "@putout/plugin-tape": "^14.0.0", "@putout/plugin-try-catch": "^3.0.0", "@putout/plugin-types": "^3.0.0", - "@putout/plugin-typescript": "^6.0.0", + "@putout/plugin-typescript": "^7.0.0", "@putout/plugin-webpack": "^3.0.0", "@putout/processor-css": "^9.0.0", "@putout/processor-filesystem": "^4.0.0", @@ -12497,6 +12532,24 @@ "putout": ">=35" } }, + "node_modules/putout/node_modules/@putout/plugin-filesystem": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@putout/plugin-filesystem/-/plugin-filesystem-5.0.0.tgz", + "integrity": "sha512-y8g787NBtcr4MVxdSUpdRidz96fRRHsGk5IWYCiZQB4Zs05vkyVjNgNAyXYJ6J6a0QadOJes64+I5aA/V4XpzQ==", + "dev": true, + "dependencies": { + "@putout/babel": "^2.0.0", + "@putout/operate": "^12.0.0", + "@putout/operator-filesystem": "^4.0.0", + "@putout/operator-json": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "putout": ">=35" + } + }, "node_modules/putout/node_modules/chalk": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", @@ -13896,9 +13949,9 @@ } }, "node_modules/remeda": { - "version": "1.48.0", - "resolved": "https://registry.npmjs.org/remeda/-/remeda-1.48.0.tgz", - "integrity": "sha512-u0XLpaNB/qNY1icmUcosmpGKObmGuJtw7UYN+bS+Hiq0b8KRWvq3gkuqy/VCLalGUrlPrMLbt079Gg5WTuTYQw==" + "version": "1.58.0", + "resolved": "https://registry.npmjs.org/remeda/-/remeda-1.58.0.tgz", + "integrity": "sha512-YZT2U7B6fpZfOYVsT4bJT9SKXhh+jdzMmtoMX2u4+xro/bIXXaloDslnpAOHC4UHGsYegNMbi6hlXrdIzH45kA==" }, "node_modules/remove-blank-lines": { "version": "1.4.1", @@ -14130,12 +14183,12 @@ } }, "node_modules/safe-array-concat": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz", - "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dependencies": { - "call-bind": "^1.0.5", - "get-intrinsic": "^1.2.2", + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -14847,13 +14900,14 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -14863,26 +14917,29 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -15076,18 +15133,6 @@ "node": ">=8" } }, - "node_modules/stylelint/node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, "node_modules/stylelint/node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -15100,20 +15145,6 @@ "node": ">=8" } }, - "node_modules/stylelint/node_modules/flat-cache": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.0.tgz", - "integrity": "sha512-EryKbCE/wxpxKniQlyas6PY1I9vwtF3uCBweX+N8KYTCn3Y12RTGtQAJ/bd5pl7kxUAc8v/R3Ake/N17OZiFqA==", - "dev": true, - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4", - "rimraf": "^5.0.5" - }, - "engines": { - "node": ">=16" - } - }, "node_modules/stylelint/node_modules/global-modules": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", @@ -15228,6 +15259,12 @@ "which": "bin/which" } }, + "node_modules/suffix-thumb": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/suffix-thumb/-/suffix-thumb-5.0.2.tgz", + "integrity": "sha512-I5PWXAFKx3FYnI9a+dQMWNqTxoRt6vdBdb0O+BJ1sxXCWtSoQCusc13E58f+9p4MYx/qCnEMkD5jac6K2j3dgA==", + "dev": true + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -15700,14 +15737,15 @@ } }, "node_modules/typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -15736,9 +15774,9 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.5.tgz", - "integrity": "sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", @@ -15755,9 +15793,9 @@ } }, "node_modules/typescript": { - "version": "5.4.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.2.tgz", - "integrity": "sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==", + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -15814,9 +15852,9 @@ "dev": true }, "node_modules/unicode2latex": { - "version": "5.0.16", - "resolved": "https://registry.npmjs.org/unicode2latex/-/unicode2latex-5.0.16.tgz", - "integrity": "sha512-q2GDtUcl24esEErwwJUxWLC5rPSee12SjLO9KLGw3XIGB2cOn2KQ800FGz4MvQ19A7zsIG7bya9aDBeKcCyp1A==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/unicode2latex/-/unicode2latex-6.0.4.tgz", + "integrity": "sha512-P9xJAuUU3wtOPVq4fxitEZJSNI0W1ttj2Vudf4SX+RI1SM9j1lgAyjMLSumuksoADi0mg9CADz4af25XcwV8FA==", "dev": true }, "node_modules/unicorn-magic": { @@ -16441,15 +16479,15 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz", - "integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dependencies": { - "available-typed-arrays": "^1.0.6", - "call-bind": "^1.0.5", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.1" + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -16467,6 +16505,24 @@ "string-width": "^1.0.2 || 2 || 3 || 4" } }, + "node_modules/wink-eng-lite-web-model": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/wink-eng-lite-web-model/-/wink-eng-lite-web-model-1.6.0.tgz", + "integrity": "sha512-j4DaUTWnX3OzFFbTnY4v9RUeebghAd4mEWiJx9rZ29jfyW1OdK6H9UPbY8QrFb6sRIV1wJP2FGe2phA6MSEfwQ==", + "dev": true, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "wink-nlp": ">2.1.0" + } + }, + "node_modules/wink-nlp": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/wink-nlp/-/wink-nlp-2.2.0.tgz", + "integrity": "sha512-q2BFBauhMS/4f+grni6hL+a0RxHJzmWT7Vj4nbaz7Ihr7ro/fLfrW+qHy16LlP1Oqsv1TacThKNDXmSm6F+PnA==", + "dev": true + }, "node_modules/with": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", @@ -16759,9 +16815,107 @@ "zotero-start": "bin/start.py" } }, - "node_modules/zotero-plugin/node_modules/@octokit/auth-token": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", + "node_modules/zotero-plugin/node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/zotero-plugin/node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/zotero-plugin/node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/zotero-plugin/node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/zotero-plugin/node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/zotero-plugin/node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/zotero-plugin/node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/zotero-plugin/node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/zotero-plugin/node_modules/@octokit/auth-token": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", "engines": { "node": ">= 18" @@ -16902,6 +17056,117 @@ "@octokit/openapi-types": "^19.1.0" } }, + "node_modules/zotero-plugin/node_modules/@typescript-eslint/eslint-plugin": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", + "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", + "dependencies": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/type-utils": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/zotero-plugin/node_modules/@typescript-eslint/parser": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", + "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", + "dependencies": { + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/zotero-plugin/node_modules/@typescript-eslint/type-utils": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", + "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", + "dependencies": { + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/zotero-plugin/node_modules/@typescript-eslint/utils": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", + "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "semver": "^7.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, "node_modules/zotero-plugin/node_modules/archiver": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/archiver/-/archiver-6.0.2.tgz", @@ -17014,25 +17279,347 @@ "node": ">= 12.0.0" } }, - "node_modules/zotero-plugin/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "node_modules/zotero-plugin/node_modules/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" }, "bin": { - "glob": "dist/esm/bin.mjs" + "eslint": "bin/eslint.js" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/zotero-plugin/node_modules/eslint-plugin-import": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "dependencies": { + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/zotero-plugin/node_modules/eslint-plugin-import/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/zotero-plugin/node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/zotero-plugin/node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/zotero-plugin/node_modules/eslint-plugin-import/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/zotero-plugin/node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/zotero-plugin/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/zotero-plugin/node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/zotero-plugin/node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/zotero-plugin/node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/zotero-plugin/node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/zotero-plugin/node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/zotero-plugin/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zotero-plugin/node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/zotero-plugin/node_modules/flat-cache/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/zotero-plugin/node_modules/flat-cache/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/zotero-plugin/node_modules/flat-cache/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/zotero-plugin/node_modules/flat-cache/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/zotero-plugin/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/zotero-plugin/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zotero-plugin/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/zotero-plugin/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/zotero-plugin/node_modules/minimatch": { @@ -17049,6 +17636,42 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/zotero-plugin/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zotero-plugin/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zotero-plugin/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, "node_modules/zotero-plugin/node_modules/peggy": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/peggy/-/peggy-3.0.2.tgz", @@ -17064,6 +17687,17 @@ "node": ">=14" } }, + "node_modules/zotero-plugin/node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/zotero-plugin/node_modules/zip-stream": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-5.0.2.tgz", diff --git a/package.json b/package.json index 529c98ebe8..74e065b52f 100644 --- a/package.json +++ b/package.json @@ -86,7 +86,7 @@ "emittery": "^1.0.3", "fast-safe-stringify": "^2.1.1", "fold-to-ascii": "^5.0.1", - "fracturedjsonjs": "^3.1.1", + "fracturedjsonjs": "^4.0.0", "html-to-md": "^0.8.5", "i": "^0.3.7", "jieba-zh-cn": "^1.0.12", @@ -100,7 +100,7 @@ "pinyin": "^3.1.0", "punycode2": "^1.0.1", "puqeue": "^1.1.4", - "remeda": "^1.48.0", + "remeda": "^1.58.0", "sprintf-js": "^1.1.3", "tar-js": "^0.3.0", "text-title-case": "^1.0.2", @@ -112,11 +112,11 @@ "zotero-plugin": "2.0.14" }, "devDependencies": { - "@retorquere/bibtex-parser": "^7.0.16", + "@retorquere/bibtex-parser": "^8.0.12", "@retorquere/zotero-sync": "^1.0.27", "@types/bluebird": "^3.5.42", "@types/lokijs": "^1.5.14", - "@types/node": "^20.11.27", + "@types/node": "^20.12.7", "@xmldom/xmldom": "^0.8.10", "ajv-keywords": "^5.1.0", "archiver": "^7.0.1", @@ -133,10 +133,10 @@ "dom-parser": "^1.1.5", "dotenv": "^16.4.5", "ejs": "^3.1.9", - "esbuild": "^0.20.1", - "eslint": "^8.57.0", + "esbuild": "^0.20.2", + "eslint": "^9.0.0", "estrace": "^5.0.1", - "eta": "^3.2.0", + "eta": "^3.4.0", "fast-json-patch": "^3.1.1", "file-path-filter": "^3.0.2", "find-up": "^7.0.0", @@ -167,7 +167,7 @@ "process": "^0.11.10", "properties-reader": "^2.3.0", "pug": "^3.0.2", - "putout": "^35.7.3", + "putout": "^35.12.0", "recast": "^0.23.6", "regenerate": "^1.4.2", "rimraf": "^5.0.5", @@ -176,9 +176,9 @@ "string-template": "^1.0.0", "ts-node": "^10.9.2", "tslib": "^2.6.2", - "typescript": "^5.4.2", + "typescript": "^5.4.5", "unicode-11.0.0": "^0.7.8", - "unicode2latex": "^5.0.16", + "unicode2latex": "^6.0.4", "uri-templates": "^0.2.0", "util": "^0.12.5", "xml-parser": "^1.2.1", diff --git a/submodules/zotero b/submodules/zotero index 8b37a9889a..878fc20cec 160000 --- a/submodules/zotero +++ b/submodules/zotero @@ -1 +1 @@ -Subproject commit 8b37a9889a8201724e771f84994f05687ebcbd1b +Subproject commit 878fc20cecccf73147816aef212574427c21d6bf From a179c1a52c2907cec2efd6a8693212e0fc410366 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Wed, 10 Apr 2024 21:19:21 +0200 Subject: [PATCH 020/177] merge --- .ncurc.json | 4 + content/auto-export.ts | 2 - content/db/store/file.ts | 4 - content/os.ts | 2 +- package-lock.json | 2320 +++++++++++------------------ package.json | 4 +- setup/setup.py | 4 +- site/content/exporting/unicode.md | 1216 +++++++-------- 8 files changed, 1475 insertions(+), 2081 deletions(-) create mode 100644 .ncurc.json diff --git a/.ncurc.json b/.ncurc.json new file mode 100644 index 0000000000..0fc7bb2ba3 --- /dev/null +++ b/.ncurc.json @@ -0,0 +1,4 @@ +{ + "reject": [ "eslint" ] +} + diff --git a/content/auto-export.ts b/content/auto-export.ts index c042fa01c4..6cf4ac312d 100644 --- a/content/auto-export.ts +++ b/content/auto-export.ts @@ -2,8 +2,6 @@ Components.utils.import('resource://gre/modules/FileUtils.jsm') declare const FileUtils: any import { log } from './logger' -import { Shim } from './os' -const $OS = typeof OS !== 'undefined' ? OS : Shim import { Shim } from './os' import { is7 } from './client' diff --git a/content/db/store/file.ts b/content/db/store/file.ts index 9b18c5ae83..0d068493b9 100644 --- a/content/db/store/file.ts +++ b/content/db/store/file.ts @@ -1,10 +1,6 @@ /* eslint-disable @typescript-eslint/member-ordering */ import { log } from '../../logger' -import { is7 } from '../../client' -import { Shim } from '../../os' -if (!is7) Components.utils.import('resource://gre/modules/osfile.jsm') -const $OS = typeof OS !== 'undefined' ? OS : Shim import { Shim } from '../../os' import { is7 } from '../../client' diff --git a/content/os.ts b/content/os.ts index 8c1ff61d54..95c1bd1e20 100644 --- a/content/os.ts +++ b/content/os.ts @@ -1,6 +1,6 @@ import { is7 } from './client' -import { $OS } from '../gen/osfile-shim' +import { OS as $OS } from '../gen/osfile' export const Shim: any = is7 ? $OS : undefined if (is7 && !Shim.Path.split) { diff --git a/package-lock.json b/package-lock.json index a5ea621137..eb8179a14d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -58,7 +58,7 @@ "zotero-plugin": "2.0.14" }, "devDependencies": { - "@retorquere/bibtex-parser": "^8.0.12", + "@retorquere/bibtex-parser": "^7.0.16", "@retorquere/zotero-sync": "^1.0.27", "@types/bluebird": "^3.5.42", "@types/lokijs": "^1.5.14", @@ -80,7 +80,7 @@ "dotenv": "^16.4.5", "ejs": "^3.1.9", "esbuild": "^0.20.2", - "eslint": "^9.0.0", + "eslint": "^8.57.0", "estrace": "^5.0.1", "eta": "^3.4.0", "fast-json-patch": "^3.1.1", @@ -150,85 +150,21 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", + "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" + "@babel/highlight": "^7.24.2", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/code-frame/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/code-frame/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/helper-string-parser": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", - "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", + "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", "engines": { "node": ">=6.9.0" } @@ -242,13 +178,14 @@ } }, "node_modules/@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", + "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" @@ -319,9 +256,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz", - "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.4.tgz", + "integrity": "sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==", "bin": { "parser": "bin/babel-parser.js" }, @@ -330,9 +267,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz", - "integrity": "sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.4.tgz", + "integrity": "sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==", "devOptional": true, "dependencies": { "regenerator-runtime": "^0.14.0" @@ -342,9 +279,9 @@ } }, "node_modules/@babel/runtime-corejs3": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.23.9.tgz", - "integrity": "sha512-oeOFTrYWdWXCvXGB5orvMTJ6gCZ9I6FBjR+M38iKNXCsPxr4xT0RTdg5uz1H7QP8pp74IzPtwritEr+JscqHXQ==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.24.4.tgz", + "integrity": "sha512-VOQOexSilscN24VEY810G/PqtpFvx/z6UqDIjIWbDe2368HhDLkYN5TYwaEz/+eRCUkhJ2WaNLLmQAlxzfWj4w==", "dependencies": { "core-js-pure": "^3.30.2", "regenerator-runtime": "^0.14.0" @@ -354,9 +291,9 @@ } }, "node_modules/@babel/types": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz", - "integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", + "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", "dependencies": { "@babel/helper-string-parser": "^7.23.4", "@babel/helper-validator-identifier": "^7.22.20", @@ -383,9 +320,9 @@ } }, "node_modules/@csstools/css-parser-algorithms": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.0.tgz", - "integrity": "sha512-YfEHq0eRH98ffb5/EsrrDspVWAuph6gDggAE74ZtjecsmyyWpW768hOyiONa8zwWGbIWYfa2Xp4tRTrpQQ00CQ==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.1.tgz", + "integrity": "sha512-ubEkAaTfVZa+WwGhs5jbo5Xfqpeaybr/RvWzvFxRs4jfq16wH8l8Ty/QEEpINxll4xhuGfdMbipRyz5QZh9+FA==", "dev": true, "funding": [ { @@ -401,13 +338,13 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-tokenizer": "^2.2.3" + "@csstools/css-tokenizer": "^2.2.4" } }, "node_modules/@csstools/css-tokenizer": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.3.tgz", - "integrity": "sha512-pp//EvZ9dUmGuGtG1p+n17gTHEOqu9jO+FiCUjNN3BDmyhdA2Jq9QsVeR7K8/2QCK17HSsioPlTW9ZkzoWb3Lg==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.4.tgz", + "integrity": "sha512-PuWRAewQLbDhGeTvFuq2oClaSCKPIBmHyIobCV39JHRYN0byDcUWJl5baPeNUcqrjtdMNqFooE0FGl31I3JOqw==", "dev": true, "funding": [ { @@ -424,9 +361,9 @@ } }, "node_modules/@csstools/media-query-list-parser": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.8.tgz", - "integrity": "sha512-DiD3vG5ciNzeuTEoh74S+JMjQDs50R3zlxHnBnfd04YYfA/kh2KiBCGhzqLxlJcNq+7yNQ3stuZZYLX6wK/U2g==", + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.9.tgz", + "integrity": "sha512-qqGuFfbn4rUmyOB0u8CVISIp5FfJ5GAR3mBrZ9/TKndHakdnm6pY0L/fbLcpPnrzwCyyTEZl1nUcXAYHEWneTA==", "dev": true, "funding": [ { @@ -442,14 +379,14 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.6.0", - "@csstools/css-tokenizer": "^2.2.3" + "@csstools/css-parser-algorithms": "^2.6.1", + "@csstools/css-tokenizer": "^2.2.4" } }, "node_modules/@csstools/selector-specificity": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.2.tgz", - "integrity": "sha512-RpHaZ1h9LE7aALeQXmXrJkRG84ZxIsctEN2biEUmFyKpzFM3zZ35eUMcIzZFsw/2olQE6v69+esEqU2f1MKycg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.3.tgz", + "integrity": "sha512-KEPNw4+WW5AVEIyzC80rTbWEUatTW2lXpN8+8ILC8PiPeWPjwUzrPZDIOZ2wwqDmeqOYTdSGyL3+vE5GC3FB3Q==", "dev": true, "funding": [ { @@ -468,19 +405,29 @@ "postcss-selector-parser": "^6.0.13" } }, + "node_modules/@dual-bundle/import-meta-resolve": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.0.0.tgz", + "integrity": "sha512-ZKXyJeFAzcpKM2kk8ipoGIPUqx9BX52omTGnfwjJvxOCaZTM2wtDK7zN0aIgPRbT9XYAlha0HtmZ+XKteuh0Gw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/@emnapi/core": { - "version": "0.45.0", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-0.45.0.tgz", - "integrity": "sha512-DPWjcUDQkCeEM4VnljEOEcXdAD7pp8zSZsgOujk/LGIwCXWbXJngin+MO4zbH429lzeC3WbYLGjE2MaUOwzpyw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.1.1.tgz", + "integrity": "sha512-eu4KjHfXg3I+UUR7vSuwZXpRo4c8h4Rtb5Lu2F7Z4JqJFl/eidquONEBiRs6viXKpWBC3BaJBy68xGJ2j56idw==", "optional": true, "dependencies": { "tslib": "^2.4.0" } }, "node_modules/@emnapi/runtime": { - "version": "0.45.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-0.45.0.tgz", - "integrity": "sha512-Txumi3td7J4A/xTTwlssKieHKTGl3j4A1tglBx72auZ49YK7ePY6XZricgIg9mnZT4xPfA+UPCUdnhRuEFDL+w==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.1.1.tgz", + "integrity": "sha512-3bfqkzuR1KLx57nZfjr2NLnFOobvyS0aTszaEGCGqmYMVDRaGvgIZbjGSV/MHSSmLgQ/b9JFHQ5xm5WRZYd+XQ==", "optional": true, "dependencies": { "tslib": "^2.4.0" @@ -877,14 +824,14 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.0.2.tgz", - "integrity": "sha512-wV19ZEGEMAC1eHgrS7UQPqsdEiCIbTKTasEfcXAigzoXICcqZSjBZEHlZwNVvKg6UBCjSlos84XiLqsRJnIcIg==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^10.0.1", - "globals": "^14.0.0", + "espree": "^9.6.0", + "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -892,7 +839,7 @@ "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -919,19 +866,19 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "node_modules/@eslint/js": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.0.0.tgz", - "integrity": "sha512-RThY/MnKrhubF6+s1JflwUjPEsnCEmYCWwqa/aRISKWNXGZ9epUwft4bUMM35SdKF9xvBrLydAM1RDHd1Z//ZQ==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.12.3.tgz", - "integrity": "sha512-jsNnTBlMWuTpDkeE3on7+dWJi0D6fdDfeANj/w7MpS8ztROCoLvIO2nG0CcFj+E4k8j4QrSTh4Oryi3i2G669g==", + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", + "@humanwhocodes/object-schema": "^2.0.2", "debug": "^4.3.1", "minimatch": "^3.0.5" }, @@ -1168,20 +1115,20 @@ } }, "node_modules/@napi-rs/wasm-runtime": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.1.1.tgz", - "integrity": "sha512-ATj9ua659JgrkICjJscaeZdmPr44cb/KFjNWuD0N6pux0SpzaM7+iOuuK11mAnQM2N9q0DT4REu6NkL8ZEhopw==", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.1.2.tgz", + "integrity": "sha512-8JuczewTFIZ/XIjHQ+YlQUydHvlKx2hkcxtuGwh+t/t5zWyZct6YG4+xjHcq8xyc/e7FmFwf42Zj2YgICwmlvA==", "optional": true, "dependencies": { - "@emnapi/core": "^0.45.0", - "@emnapi/runtime": "^0.45.0", + "@emnapi/core": "^1.1.0", + "@emnapi/runtime": "^1.1.0", "@tybys/wasm-util": "^0.8.1" } }, "node_modules/@node-rs/jieba": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@node-rs/jieba/-/jieba-1.9.2.tgz", - "integrity": "sha512-H7/Pv9RBEgzcxVAM4yg6L4G10ZoiqVnNcUCs01yV9XIRwLmShUkdthkTqG8heyx2dAMRua+kofd28JtDWBHMfA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@node-rs/jieba/-/jieba-1.10.0.tgz", + "integrity": "sha512-9oZMCvZVnrAMeWTSnEjJ0OSw7YcV4dJJKSioqq80oUNf3eYLGdEXsgYwCe1AYEMcfUfNVgvjznItJKrsoud0IA==", "optional": true, "engines": { "node": ">= 10" @@ -1191,26 +1138,26 @@ "url": "https://github.com/sponsors/Brooooooklyn" }, "optionalDependencies": { - "@node-rs/jieba-android-arm-eabi": "1.9.2", - "@node-rs/jieba-android-arm64": "1.9.2", - "@node-rs/jieba-darwin-arm64": "1.9.2", - "@node-rs/jieba-darwin-x64": "1.9.2", - "@node-rs/jieba-freebsd-x64": "1.9.2", - "@node-rs/jieba-linux-arm-gnueabihf": "1.9.2", - "@node-rs/jieba-linux-arm64-gnu": "1.9.2", - "@node-rs/jieba-linux-arm64-musl": "1.9.2", - "@node-rs/jieba-linux-x64-gnu": "1.9.2", - "@node-rs/jieba-linux-x64-musl": "1.9.2", - "@node-rs/jieba-wasm32-wasi": "1.9.2", - "@node-rs/jieba-win32-arm64-msvc": "1.9.2", - "@node-rs/jieba-win32-ia32-msvc": "1.9.2", - "@node-rs/jieba-win32-x64-msvc": "1.9.2" + "@node-rs/jieba-android-arm-eabi": "1.10.0", + "@node-rs/jieba-android-arm64": "1.10.0", + "@node-rs/jieba-darwin-arm64": "1.10.0", + "@node-rs/jieba-darwin-x64": "1.10.0", + "@node-rs/jieba-freebsd-x64": "1.10.0", + "@node-rs/jieba-linux-arm-gnueabihf": "1.10.0", + "@node-rs/jieba-linux-arm64-gnu": "1.10.0", + "@node-rs/jieba-linux-arm64-musl": "1.10.0", + "@node-rs/jieba-linux-x64-gnu": "1.10.0", + "@node-rs/jieba-linux-x64-musl": "1.10.0", + "@node-rs/jieba-wasm32-wasi": "1.10.0", + "@node-rs/jieba-win32-arm64-msvc": "1.10.0", + "@node-rs/jieba-win32-ia32-msvc": "1.10.0", + "@node-rs/jieba-win32-x64-msvc": "1.10.0" } }, "node_modules/@node-rs/jieba-android-arm-eabi": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@node-rs/jieba-android-arm-eabi/-/jieba-android-arm-eabi-1.9.2.tgz", - "integrity": "sha512-FbgUDCvek/KI4mJe5wqbbJi9kDE788YVvsA7DLTE0up+Tb/A7pNIJXq4Pg7zhsgHTVL7EfHHsyd89k+YoSU7Wg==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@node-rs/jieba-android-arm-eabi/-/jieba-android-arm-eabi-1.10.0.tgz", + "integrity": "sha512-bzusJSLHm7I0qL8aQXGLt7IQ51Px35yGGEcQ/Ps4SEt0AxRSJ2/rxNET/8mlwBpOCZ5xiKE3BOBRfQajiPiI3g==", "cpu": [ "arm" ], @@ -1223,9 +1170,9 @@ } }, "node_modules/@node-rs/jieba-android-arm64": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@node-rs/jieba-android-arm64/-/jieba-android-arm64-1.9.2.tgz", - "integrity": "sha512-o6cZz5APAUVBCTG9tNK3XEcLunjGo7Oon1N8+1EHOHPlx4Twzhn1msBtQ+VCgboHUOI+QgZzlY/sTXGfh8IuIA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@node-rs/jieba-android-arm64/-/jieba-android-arm64-1.10.0.tgz", + "integrity": "sha512-g89Oq5U2RPmtlvuQhjNj8YZc5Gq033ODb7Ot4Z/OdIHvg2WMxi2M1GQhcdKu60dO79/tazc53W6I8/y691DUfQ==", "cpu": [ "arm64" ], @@ -1238,9 +1185,9 @@ } }, "node_modules/@node-rs/jieba-darwin-arm64": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@node-rs/jieba-darwin-arm64/-/jieba-darwin-arm64-1.9.2.tgz", - "integrity": "sha512-68Pk5phmgn/k5w6nzZWYkDHwJ5wYagprVaSf/WgcPVucw9kAzVMZasGxXo2+Kqn2kMWhD7Dm2NT1TAromQq8Eg==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@node-rs/jieba-darwin-arm64/-/jieba-darwin-arm64-1.10.0.tgz", + "integrity": "sha512-IhR5r+XxFcfhVsF93zQ3uCJy8ndotRntXzoW/JCyKqOahUo/ITQRT6vTKHKMyD9xNmjl222OZonBSo2+mlI2fQ==", "cpu": [ "arm64" ], @@ -1253,9 +1200,9 @@ } }, "node_modules/@node-rs/jieba-darwin-x64": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@node-rs/jieba-darwin-x64/-/jieba-darwin-x64-1.9.2.tgz", - "integrity": "sha512-TXms+q4l7/0a7T+O9t5fQ0m6Qi+4XKgtaRmg089iYbvSp4JfX+XIg+ZLJG+9uc25oWpOgpt+z4bsz9rrHnW/6Q==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@node-rs/jieba-darwin-x64/-/jieba-darwin-x64-1.10.0.tgz", + "integrity": "sha512-MBIs8ixKY4FPnifdZ7eTx6ht85TXE4kFBK4c8A/VDAbnmzBzpEyuV7tHUA2wAdfR0muC9j7/5FB4kQGZgYfc8g==", "cpu": [ "x64" ], @@ -1268,9 +1215,9 @@ } }, "node_modules/@node-rs/jieba-freebsd-x64": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@node-rs/jieba-freebsd-x64/-/jieba-freebsd-x64-1.9.2.tgz", - "integrity": "sha512-U4p8PSm+1onheBJUKlEyP4VRE42UrH+gXDYMJlWiJDqriAjZLvA+MdF5xiqeppH0dWc/tQu/ECLoj1WXkJKfvg==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@node-rs/jieba-freebsd-x64/-/jieba-freebsd-x64-1.10.0.tgz", + "integrity": "sha512-MuY+1QEXONxo3I/uFLFju0/pSN5bzQORhJkIdP8CYv+jZaVB4Uz6rC7A5HrgjiAXOna6QsKlRgx2bYyHfaBUrA==", "cpu": [ "x64" ], @@ -1283,9 +1230,9 @@ } }, "node_modules/@node-rs/jieba-linux-arm-gnueabihf": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@node-rs/jieba-linux-arm-gnueabihf/-/jieba-linux-arm-gnueabihf-1.9.2.tgz", - "integrity": "sha512-pelyUy0uFzR7dsnleN8A+4yiNRIRQYFDufbOapP9qkgpEOSvJaD6zYOi3HDm4GdXD5jD0UFNEYMCbi2+Ed2zIg==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@node-rs/jieba-linux-arm-gnueabihf/-/jieba-linux-arm-gnueabihf-1.10.0.tgz", + "integrity": "sha512-QfSBnwISdVuTqsi4iThAO1LSbKRSqSsIWiIJgCduhYsTDDiG9+pHyfiZtcTwSf73SDXHZ400QuBNONWLQ/dSag==", "cpu": [ "arm" ], @@ -1298,9 +1245,9 @@ } }, "node_modules/@node-rs/jieba-linux-arm64-gnu": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@node-rs/jieba-linux-arm64-gnu/-/jieba-linux-arm64-gnu-1.9.2.tgz", - "integrity": "sha512-qgrEyYbzXyqoIcl2iLXMvIv4PC1Z84O5TGCGKwGibblHAOpWIVQzkquDhty/aE9Ju1OSJiNZGtE9ISlJXB/PJA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@node-rs/jieba-linux-arm64-gnu/-/jieba-linux-arm64-gnu-1.10.0.tgz", + "integrity": "sha512-vzA2tX/6dReEd/7tZ9927glWQmKDausM6R9S5CqZx4BA4NSaWAK0xFdWsz0K7np459FXqNavLdNB5FVFJb4zzA==", "cpu": [ "arm64" ], @@ -1313,9 +1260,9 @@ } }, "node_modules/@node-rs/jieba-linux-arm64-musl": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@node-rs/jieba-linux-arm64-musl/-/jieba-linux-arm64-musl-1.9.2.tgz", - "integrity": "sha512-FMl9EYCJSKCfJb8rrk+9mmi44SwDyNCMLvxMzG/va59D0BRItmm4EP9Zd2QoKnGawV6Bw4BAXIrNhSg9gWedxg==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@node-rs/jieba-linux-arm64-musl/-/jieba-linux-arm64-musl-1.10.0.tgz", + "integrity": "sha512-gxqoAVOQsn9sgYK6mFO9dsMZ/yOMvVecLZW5rGvLErjiugVvYUlESXIvCqxp2GSws8RtTqJj6p9u/lBmCCuvaw==", "cpu": [ "arm64" ], @@ -1328,9 +1275,9 @@ } }, "node_modules/@node-rs/jieba-linux-x64-gnu": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@node-rs/jieba-linux-x64-gnu/-/jieba-linux-x64-gnu-1.9.2.tgz", - "integrity": "sha512-+7wcz5+3HzOH8+PbNwOPuelTo6ik5jgrz8SFbd+JL6sZLap2pjpKWol5nJyNYNv90yRq1A6p8TrhFXCtVZujFA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@node-rs/jieba-linux-x64-gnu/-/jieba-linux-x64-gnu-1.10.0.tgz", + "integrity": "sha512-rS5Shs8JITxJjFIjoIZ5a9O+GO21TJgKu03g2qwFE3QaN5ZOvXtz+/AqqyfT4GmmMhCujD83AGqfOGXDmItF9w==", "cpu": [ "x64" ], @@ -1343,9 +1290,9 @@ } }, "node_modules/@node-rs/jieba-linux-x64-musl": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@node-rs/jieba-linux-x64-musl/-/jieba-linux-x64-musl-1.9.2.tgz", - "integrity": "sha512-ims1jOq99zTvcwcUXKuD+WT36KHHVNTq9Fm663YzMMBO+5sqLleQtQkZgbh0BHJI25jvW9IrBCvuS1ZwKZ6kOA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@node-rs/jieba-linux-x64-musl/-/jieba-linux-x64-musl-1.10.0.tgz", + "integrity": "sha512-BvSiF2rR8Birh2oEVHcYwq0WGC1cegkEdddWsPrrSmpKmukJE2zyjcxaOOggq2apb8fIRsjyeeUh6X3R5AgjvA==", "cpu": [ "x64" ], @@ -1358,9 +1305,9 @@ } }, "node_modules/@node-rs/jieba-wasm32-wasi": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@node-rs/jieba-wasm32-wasi/-/jieba-wasm32-wasi-1.9.2.tgz", - "integrity": "sha512-h/lWDJCYlsH3VUNWBCO2exite7VDPgjpOmaQgTQ6aNI5x8rR3NEkyXfmy/yWIev63tdMr9nD3sXw38QQp4ddIA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@node-rs/jieba-wasm32-wasi/-/jieba-wasm32-wasi-1.10.0.tgz", + "integrity": "sha512-EzeAAbRrFTdYw61rd8Mfwdp/fA21d58z9vLY06CDbI+dqANfMFn1IUdwzKWi8S5J/MRhvbzonbbh3yHlz6F43Q==", "cpu": [ "wasm32" ], @@ -1373,9 +1320,9 @@ } }, "node_modules/@node-rs/jieba-win32-arm64-msvc": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@node-rs/jieba-win32-arm64-msvc/-/jieba-win32-arm64-msvc-1.9.2.tgz", - "integrity": "sha512-a3BkMcvW9sedSA1XlYvGEQSNQQrK4kUMULKTXmqboLjFbwI9v6flpDCiJyw2pXYs+1WT6XjTHvEyVsoGCVMRlQ==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@node-rs/jieba-win32-arm64-msvc/-/jieba-win32-arm64-msvc-1.10.0.tgz", + "integrity": "sha512-eZjRLFUAvq1/E5+xXfJRqIB99Gu6BA+6+EXf/rCLuvEjXrDQuUunhmrSoOL5MjmUXTtazS+bXq9PXV5EFYyOPw==", "cpu": [ "arm64" ], @@ -1388,9 +1335,9 @@ } }, "node_modules/@node-rs/jieba-win32-ia32-msvc": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@node-rs/jieba-win32-ia32-msvc/-/jieba-win32-ia32-msvc-1.9.2.tgz", - "integrity": "sha512-k8xPkEOMJM3ic4UzvmvKELjPQsIFSo7mw1wx4tNrUN5mu5ANIhk1Fq0zXOcTbpIe7jHPsWaB5jYtBeeJ0h09iA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@node-rs/jieba-win32-ia32-msvc/-/jieba-win32-ia32-msvc-1.10.0.tgz", + "integrity": "sha512-DrfbeCN7UcLN+MiocZabWo74XZIjfpQsJ/WMOItZzVbU2gDcJSkSyAhML9+OqId66DhGCMFFlGinocElM8iIAw==", "cpu": [ "ia32" ], @@ -1403,9 +1350,9 @@ } }, "node_modules/@node-rs/jieba-win32-x64-msvc": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@node-rs/jieba-win32-x64-msvc/-/jieba-win32-x64-msvc-1.9.2.tgz", - "integrity": "sha512-wIseuWUK+WdikhMFPLvr80D0I4wQJSdFsRIljiUhKwnNQESG20zIxSYE1qy7BNBd7s8fAn1BC6PGeg7S/2KliQ==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@node-rs/jieba-win32-x64-msvc/-/jieba-win32-x64-msvc-1.10.0.tgz", + "integrity": "sha512-RjBkBmjjHmj+bofiq5/han8wzbCkDk24OAPJ+YX8PX20GFSHmdjCiWapv3AooN8/RiKqlBfgodjS1JUngNWo5g==", "cpu": [ "x64" ], @@ -1623,9 +1570,9 @@ } }, "node_modules/@putout/babel": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@putout/babel/-/babel-2.2.0.tgz", - "integrity": "sha512-SSZFFiWrszC6x5J4anX2IrMKSipIL2IwrZHmjXFAThTwrlVmx5H8jcQbKhhkMz9bXMFRtKIlmXp/Zy5VD9tEDg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@putout/babel/-/babel-2.4.0.tgz", + "integrity": "sha512-o2nsxmyOI206J4NdyCRg78pwhBRLGvBp/UktOG3XZyxGGOwKYS/+zl24004ZUPBF0xY+VwxyPrq4WN1kIhv42A==", "dev": true, "engines": { "node": ">=16" @@ -1648,6 +1595,31 @@ "node": ">=18" } }, + "node_modules/@putout/cli-cache/node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@putout/cli-cache/node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/@putout/cli-choose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@putout/cli-choose/-/cli-choose-2.0.0.tgz", @@ -1753,13 +1725,13 @@ } }, "node_modules/@putout/compare": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@putout/compare/-/compare-14.1.0.tgz", - "integrity": "sha512-ISxdPgWA2evPAJ1HDo9UrtJKCX1ENMvU3YAANc5IxkjhS7kIHSvJQ0+i+JYl+o4TI9BXBPhNMKTmL6m3Lrev7Q==", + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/@putout/compare/-/compare-14.2.0.tgz", + "integrity": "sha512-Ojp8FedcZ131S7sgI8k61mrROXaW7IRsK+hoslmuFoBFYi1osJjSiOkNurxD82MX0IVbbG51PCNDKLznwnRbFA==", "dev": true, "dependencies": { "@putout/babel": "^2.0.0", - "@putout/engine-parser": "^10.0.0", + "@putout/engine-parser": "^10.3.0", "@putout/operate": "^12.0.0", "debug": "^4.1.1", "jessy": "^3.0.0", @@ -1790,9 +1762,9 @@ } }, "node_modules/@putout/engine-parser": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/@putout/engine-parser/-/engine-parser-10.1.0.tgz", - "integrity": "sha512-5zyOJrbdFMwCJHd38nY4KV/Ttb5jVhDZZ+xedZROPLeJIRCY+KiZnt+qK4l0O6EugHnlhyKhe24VJOp48Xs9bA==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/@putout/engine-parser/-/engine-parser-10.4.0.tgz", + "integrity": "sha512-86kg8rwBFjkl13Dc5pSrNbpuARpsmYKv4Q7igNt0ne5VDNdGPuJZRopRRh4GSO7LfdTIPeZ7kc6obVBi02FeoA==", "dev": true, "dependencies": { "@putout/babel": "^2.0.0", @@ -1846,9 +1818,9 @@ } }, "node_modules/@putout/engine-runner": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/@putout/engine-runner/-/engine-runner-21.0.1.tgz", - "integrity": "sha512-nDzDPvocqh/7V2Kr6xb1fVXgAU/umJkdvrzdtfzIZfiuU5uzrg78IYu5/8Xp6T/Boa+Ut/p93ohMgIIhHFK0FQ==", + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@putout/engine-runner/-/engine-runner-21.0.3.tgz", + "integrity": "sha512-AXxcPeM7y185joWeu1yAK7yoZX4EfROOVtMmIxjggpRnMyW4DNT0N08lOdOmJdgxGUwSVv6tE/agBWThNvfgvQ==", "dev": true, "dependencies": { "@putout/babel": "^2.0.0", @@ -1858,7 +1830,7 @@ "@putout/operator-declare": "^9.0.0", "@putout/operator-filesystem": "^4.0.0", "@putout/operator-json": "^2.0.0", - "@putout/plugin-filesystem": "^4.0.1", + "@putout/plugin-filesystem": "^5.0.0", "debug": "^4.1.1", "fullstore": "^3.0.0", "jessy": "^3.0.0", @@ -1918,20 +1890,32 @@ } }, "node_modules/@putout/formatter-dump": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@putout/formatter-dump/-/formatter-dump-4.0.1.tgz", - "integrity": "sha512-jTuobQDleBZzfMIq0Ckrh++g7S6DOjHfK537uqgM/BhARtW1qH/SoLZfONRxxR6Rz4nVvRH6D/nsNnh4/EO00Q==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@putout/formatter-dump/-/formatter-dump-5.0.0.tgz", + "integrity": "sha512-txlOnphn2pfvbkyYmKbw+zAc+T/Q01958zy0e5jR+AQcWCGyCgjBAeVMh+pUBZ7+Zyl/CAnou0zG87t7hTYA9Q==", "dev": true, "dependencies": { "@putout/formatter-json": "^2.0.0", - "chalk": "^4.0.0", + "chalk": "^5.3.0", "table": "^6.0.1" }, "engines": { - "node": ">=16" + "node": ">=18" }, "peerDependencies": { - "putout": ">=25" + "putout": ">=35" + } + }, + "node_modules/@putout/formatter-dump/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/@putout/formatter-frame": { @@ -1974,12 +1958,12 @@ } }, "node_modules/@putout/formatter-memory": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@putout/formatter-memory/-/formatter-memory-4.0.0.tgz", - "integrity": "sha512-ldjb1cWyeMPbrf/NUnaOIioWTKJJBSwqpkY5UNWt8vdlWb+9BJYGnD/uqbsrML0uKlPEZ46mN/Fb2JGhDEEivw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@putout/formatter-memory/-/formatter-memory-4.0.1.tgz", + "integrity": "sha512-S3ctALHkGQRbr6zJ4kPoo7ZNBnfxXZi66XTMc/Md8k5enS0H1ATNKcwDNdA06CB0QrC5P866VX6wPRB1PHr4Mg==", "dev": true, "dependencies": { - "@putout/formatter-dump": "^4.0.0", + "@putout/formatter-dump": "^5.0.0", "chalk": "^5.3.0", "cli-progress": "^3.8.2", "format-io": "^2.0.0", @@ -2021,12 +2005,12 @@ } }, "node_modules/@putout/formatter-progress-bar": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@putout/formatter-progress-bar/-/formatter-progress-bar-4.0.0.tgz", - "integrity": "sha512-M2jsFJyXgef0ZAPc1KULAOFYB5Q0fqL06oGqRvCME2D/cimCyBG6kRUophXWscgqwUf/YQTSWjGEjfbAcNKccw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@putout/formatter-progress-bar/-/formatter-progress-bar-4.0.1.tgz", + "integrity": "sha512-sqnCwTPliKb4ln8Ss8h/KVx539u4qDc7cqCjSzQda2zQO+rfBAMhOS4Km4MUnbglOVw89JM5fbQ25x2tRjFpmQ==", "dev": true, "dependencies": { - "@putout/formatter-dump": "^4.0.0", + "@putout/formatter-dump": "^5.0.0", "chalk": "^5.3.0", "cli-progress": "^3.8.2", "once": "^1.4.0" @@ -2050,35 +2034,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@putout/formatter-progress/node_modules/@putout/formatter-dump": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@putout/formatter-dump/-/formatter-dump-5.0.0.tgz", - "integrity": "sha512-txlOnphn2pfvbkyYmKbw+zAc+T/Q01958zy0e5jR+AQcWCGyCgjBAeVMh+pUBZ7+Zyl/CAnou0zG87t7hTYA9Q==", - "dev": true, - "dependencies": { - "@putout/formatter-json": "^2.0.0", - "chalk": "^5.3.0", - "table": "^6.0.1" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "putout": ">=35" - } - }, - "node_modules/@putout/formatter-progress/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "dev": true, - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/@putout/formatter-stream": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/@putout/formatter-stream/-/formatter-stream-5.0.0.tgz", @@ -2108,12 +2063,12 @@ } }, "node_modules/@putout/formatter-time": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@putout/formatter-time/-/formatter-time-3.0.0.tgz", - "integrity": "sha512-zQ9/P9SzQJIyZ//+CUKGO5tST3iH0vn7wqpgq0DP/On4Ljw7fUrHuhofOE72MZQZOYbQRvYnjF9qpsygB7XOnQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@putout/formatter-time/-/formatter-time-3.0.1.tgz", + "integrity": "sha512-qxxgiinxbf9BCdz7kSKiKZ/lJtfQtU1IpOB3iHCDSVfBn7gAJ2Tk5m6Dwc5wC6Cqe+1aO1pjR/JTp9skCXKf9A==", "dev": true, "dependencies": { - "@putout/formatter-dump": "^4.0.0", + "@putout/formatter-dump": "^5.0.0", "chalk": "^5.3.0", "cli-progress": "^3.8.2", "format-io": "^2.0.0", @@ -2150,9 +2105,9 @@ } }, "node_modules/@putout/operate": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/@putout/operate/-/operate-12.3.0.tgz", - "integrity": "sha512-OnKEC9mlMxlP0107i7+ZaA3PJUfjEuCF23lZ/W9qrU0E7IEojoZPTAsD0pG6dzn/crd1oMOB9ozNfcBMtfI9mg==", + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/@putout/operate/-/operate-12.4.0.tgz", + "integrity": "sha512-hg7JDFuthWPPB/V/dI0NW66assgNdPHJpqJRyUTZP205D57oLtxylIywjlXKRBe6uxrmNMrxjQx9C3XoGN3Omg==", "dev": true, "dependencies": { "@putout/babel": "^2.0.0" @@ -2575,9 +2530,9 @@ } }, "node_modules/@putout/plugin-declare": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@putout/plugin-declare/-/plugin-declare-3.0.0.tgz", - "integrity": "sha512-pw0j3fybEVYnNP7tQeOLQe+D2j1yNYPjQruYcb15QfNOjy5aluL3GpvlfmSoYyJfYlcykh8S9/WqEzOCAaXklA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@putout/plugin-declare/-/plugin-declare-3.1.0.tgz", + "integrity": "sha512-Jk+lxWiSUU98ZF0Gs8RkzbgNtpJp9ZkfM0B10VUnzIOpkwX0nzY7t5tuQLbKCmyc7ZInd/T4Usuogy8ZhKdu7Q==", "dev": true, "engines": { "node": ">=18" @@ -2611,9 +2566,9 @@ } }, "node_modules/@putout/plugin-eslint": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@putout/plugin-eslint/-/plugin-eslint-8.0.0.tgz", - "integrity": "sha512-efaDVpS+u3bg3+2Q5DSisoUm2of6YHpa3sFAm3i8IaX5HotEj7Rget3By3jnZ7bp644iEFgC10HPKM+xA9MsGQ==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@putout/plugin-eslint/-/plugin-eslint-8.2.0.tgz", + "integrity": "sha512-3h1NTLUvXBJFYM3NASaFKtEzAsiopvWyPYE1PqGMxO0PLmklRfTOwEJZpKwI9IIUwK71BFPDrM66qp4LtzgeWQ==", "dev": true, "engines": { "node": ">=18" @@ -2647,16 +2602,15 @@ } }, "node_modules/@putout/plugin-filesystem": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@putout/plugin-filesystem/-/plugin-filesystem-4.2.0.tgz", - "integrity": "sha512-LlX8tc20fLiN/iSWvYi2u3SScwKWUk7NkIH7zMsFgn1EsQQe/2WggrZYb5ZhKUaj2s2uP3U/6m/5uIUC803PDQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@putout/plugin-filesystem/-/plugin-filesystem-5.0.0.tgz", + "integrity": "sha512-y8g787NBtcr4MVxdSUpdRidz96fRRHsGk5IWYCiZQB4Zs05vkyVjNgNAyXYJ6J6a0QadOJes64+I5aA/V4XpzQ==", "dev": true, "dependencies": { "@putout/babel": "^2.0.0", "@putout/operate": "^12.0.0", "@putout/operator-filesystem": "^4.0.0", - "@putout/operator-json": "^2.0.0", - "clean-css": "^5.3.3" + "@putout/operator-json": "^2.0.0" }, "engines": { "node": ">=18" @@ -2678,9 +2632,9 @@ } }, "node_modules/@putout/plugin-github": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/@putout/plugin-github/-/plugin-github-12.0.2.tgz", - "integrity": "sha512-B63nUwiofKmXmRjbPQ3xczNdItWWFGc3rWOZAenekckT36AHRDhypvK7YCiaWWHKIpr+MSBmDKumqpm4neDlCA==", + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/@putout/plugin-github/-/plugin-github-12.1.1.tgz", + "integrity": "sha512-6AkvFK9DuaIxjia1NiXQxUgwSUSPIQxbanY+otTR1VfWaF2nh5hbDZEEPcKkq1QP//9tPlGMVkjxXFvAIC3f0A==", "dev": true, "engines": { "node": ">=18" @@ -2810,9 +2764,9 @@ } }, "node_modules/@putout/plugin-nodejs": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/@putout/plugin-nodejs/-/plugin-nodejs-11.0.0.tgz", - "integrity": "sha512-IqBwhKeo3buqkO01o/awTDRnYLMHmb5F7y3K+A5JvY3MsZTBvhW+gjnvIcvjj8bKFxiUBBI8PEVOc49GsdfhSg==", + "version": "11.7.1", + "resolved": "https://registry.npmjs.org/@putout/plugin-nodejs/-/plugin-nodejs-11.7.1.tgz", + "integrity": "sha512-vygGe44MKWLtYmSEyDomX8laIVQWML+DA11Xy0jJ+hegZvBJK86sOnijgVcWgd5uorJ9B+/3FOD8rdjiZRyKpw==", "dev": true, "dependencies": { "just-camel-case": "^6.2.0" @@ -3324,10 +3278,13 @@ } }, "node_modules/@putout/plugin-sort-imports-by-specifiers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@putout/plugin-sort-imports-by-specifiers/-/plugin-sort-imports-by-specifiers-1.0.0.tgz", - "integrity": "sha512-XJ1vZ+942dMfQpZhBEfHl8eNExTXBPPRfkJ6hTtc2wpKHOboyruxcXZZ2akquAmvjpnIzIYwMCUXLL+W8R6wZg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@putout/plugin-sort-imports-by-specifiers/-/plugin-sort-imports-by-specifiers-1.1.0.tgz", + "integrity": "sha512-4LUqfe7NIBjmZe7LzjlYBAyFjlgEPUYASFd+fV9oe/f5g3jF0A/uM3BrlqZI+twmNQNpkIlo9orVALVqps+K6Q==", "dev": true, + "dependencies": { + "parse-import-specifiers": "^1.0.3" + }, "engines": { "node": ">=18" }, @@ -3420,9 +3377,9 @@ } }, "node_modules/@putout/printer": { - "version": "8.6.1", - "resolved": "https://registry.npmjs.org/@putout/printer/-/printer-8.6.1.tgz", - "integrity": "sha512-iQyvComqb1mZqoot+Vj2n23yz3a26ZsYhmq2mWZHULOwt1LN7ZJfe6L9APKezDn4YPbbDcLkVFu4qP1U95ZKzg==", + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/@putout/printer/-/printer-8.11.0.tgz", + "integrity": "sha512-l3dVdxUJigrYmX0hlodI0lvxrkxJ+G7xei74YUlQoQ8H4QWMA58xiqDAQNsIpLHLagLpgcfJrRNHg3sdhhKhhQ==", "dev": true, "dependencies": { "@putout/babel": "^2.0.0", @@ -3529,9 +3486,9 @@ } }, "node_modules/@putout/processor-yaml": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@putout/processor-yaml/-/processor-yaml-8.0.0.tgz", - "integrity": "sha512-OAHZh/fPq6hQ1XnA4kakxOlKfToh9RMIWGanCb3O/xSMITrrpz5M9aiyiD3KI+4Ls2FV0gTnazyQLvxpjd/YXw==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@putout/processor-yaml/-/processor-yaml-8.0.1.tgz", + "integrity": "sha512-D3rkwtQ55o9ZqmdZS/EF3TsUC6uM/Hbb8fsR4iQs4ycEW8+ZWj7mev9476fTzARbrAylOBw6fWw9qwZrlI8lJA==", "dev": true, "dependencies": { "@putout/operator-json": "^2.0.0", @@ -3550,15 +3507,15 @@ "dev": true }, "node_modules/@putout/recast": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@putout/recast/-/recast-1.13.0.tgz", - "integrity": "sha512-UILta9MHeFmlxs19SC/c3ivPZ6SEhoeYDxRXN/B44SgG8RG7wlLHvEy/Np0kT8Q2vbSot7ee788IaWJUolCXZA==", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/@putout/recast/-/recast-1.14.0.tgz", + "integrity": "sha512-8phu29K7AwvOrNlyI4mrvxcgndk6dQyB48KpmMbPvS08cxTg9KQAfF4gEJlt2ojHSuf3i/VBKgopHxd3HhP9Cg==", "dev": true, "dependencies": { - "assert": "^2.0.0", "ast-types": "^0.16.1", "esprima": "~4.0.0", "source-map": "~0.6.1", + "tiny-invariant": "^1.3.3", "tslib": "^2.0.1" }, "engines": { @@ -3579,22 +3536,21 @@ } }, "node_modules/@retorquere/bibtex-parser": { - "version": "8.0.12", - "resolved": "https://registry.npmjs.org/@retorquere/bibtex-parser/-/bibtex-parser-8.0.12.tgz", - "integrity": "sha512-Jf6t/v6RAwY7E2yHFTGWGxPSRBeueYgz5GopELi10VeWW0d2alyOqhoFloSBsixM6OHyjhm6kqTPO9hlC4ERCQ==", + "version": "7.0.16", + "resolved": "https://registry.npmjs.org/@retorquere/bibtex-parser/-/bibtex-parser-7.0.16.tgz", + "integrity": "sha512-8FyAzZZDQR3uXXwANgDkYaJVwTboES9FcPb2VPZxwuCODc7GPLSVeJpzrY7OC3NFc9BtNU7x8g6XFtUwPfGetg==", "dev": true, "dependencies": { - "@unified-latex/unified-latex-util-pegjs": "^1.7.1", - "@unified-latex/unified-latex-util-print-raw": "^1.7.1", - "@unified-latex/unified-latex-util-replace": "^1.7.1", - "@unified-latex/unified-latex-util-visit": "^1.7.1", - "compromise": "^14.13.0", - "unicode2latex": "^6.0.4", - "wink-eng-lite-web-model": "^1.6.0", - "wink-nlp": "^2.2.0", + "unicode2latex": "^5.0.13", "xregexp": "^5.1.1" } }, + "node_modules/@retorquere/bibtex-parser/node_modules/unicode2latex": { + "version": "5.0.18", + "resolved": "https://registry.npmjs.org/unicode2latex/-/unicode2latex-5.0.18.tgz", + "integrity": "sha512-/CX1f7nAv6QITIEZa5auBZ77c1nn7aIx2and/KNOlwzg67LDrEyMnk3K8q5VP8RCJ92qjGuSmCmSAMBoBNTqNg==", + "dev": true + }, "node_modules/@retorquere/zotero-sync": { "version": "1.0.27", "resolved": "https://registry.npmjs.org/@retorquere/zotero-sync/-/zotero-sync-1.0.27.tgz", @@ -3717,6 +3673,30 @@ "url": "https://opencollective.com/stdlib" } }, + "node_modules/@stdlib/error-tools-fmtprodmsg": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@stdlib/error-tools-fmtprodmsg/-/error-tools-fmtprodmsg-0.2.1.tgz", + "integrity": "sha512-SaxvGeGfWfda/O3rTNGRGBzAL9gsY/yd8n1hXwzOl/2aUHf8nxcf6Fz6/BQ5PguT0GiBkca19XEhHZZHxX3X/g==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/stdlib" + } + }, "node_modules/@stdlib/string-base-format-interpolate": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/@stdlib/string-base-format-interpolate/-/string-base-format-interpolate-0.2.1.tgz", @@ -3845,9 +3825,9 @@ } }, "node_modules/@stdlib/utils-define-property": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@stdlib/utils-define-property/-/utils-define-property-0.2.1.tgz", - "integrity": "sha512-1xDIWXS+Gq+dCU/codMhVj8HDNDqv9SEqQYqW8/mECdaMuQ1SrUnbMe2VK5n0J4+he+BPiWnM5mgeswm5n5mNQ==", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@stdlib/utils-define-property/-/utils-define-property-0.2.3.tgz", + "integrity": "sha512-+EzWImaQR/6XNFbXIITFi3PLQGTbKVIWSYxJfHXAuTtibAMnhHOWvEzKOumVe/Q4Cdsrc3/PIkpjJzliqAX9AA==", "os": [ "aix", "darwin", @@ -3860,6 +3840,7 @@ "windows" ], "dependencies": { + "@stdlib/error-tools-fmtprodmsg": "^0.2.1", "@stdlib/string-format": "^0.2.1" }, "engines": { @@ -3929,9 +3910,9 @@ } }, "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", @@ -3979,9 +3960,9 @@ "dev": true }, "node_modules/@types/estree-jsx": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.4.tgz", - "integrity": "sha512-5idy3hvI9lAMqsyilBM+N+boaCf1MgoefbDxN6KEO5aK17TOHwFAYT9sjxzeKAiIWRUBgLxmZ9mPcnzZXtTcRQ==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", "dev": true, "dependencies": { "@types/estree": "*" @@ -4084,13 +4065,22 @@ "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", "dev": true }, - "node_modules/@typescript-eslint/scope-manager": { + "node_modules/@typescript-eslint/eslint-plugin": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", - "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", + "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0" + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/type-utils": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -4098,18 +4088,96 @@ "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@typescript-eslint/types": { + "node_modules/@typescript-eslint/parser": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", - "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", + "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", + "dependencies": { + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", + "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", + "dependencies": { + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, "node_modules/@typescript-eslint/typescript-estree": { @@ -4161,6 +4229,30 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@typescript-eslint/utils": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", + "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "semver": "^7.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, "node_modules/@typescript-eslint/visitor-keys": { "version": "6.21.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", @@ -4182,137 +4274,6 @@ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" }, - "node_modules/@unified-latex/unified-latex-types": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-types/-/unified-latex-types-1.7.1.tgz", - "integrity": "sha512-WpwM9FxJi5gEvxYYWdbtcVutNgh52lHL3c1cU82pxRdJ4ltqdmDzLwZbqnWrQxOmsmVSeyaxAfOYQpv7B016CA==", - "dev": true - }, - "node_modules/@unified-latex/unified-latex-util-match": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-match/-/unified-latex-util-match-1.7.1.tgz", - "integrity": "sha512-UGZyuq3KQ8BPy+2W0Fm47/T2m6IzZ5AqdOPEzvAZrbanmAfUFfIcsXAFz7eZsxACQDebeIiBfyo/Mm5MKCw16Q==", - "dev": true, - "dependencies": { - "@unified-latex/unified-latex-types": "^1.7.1", - "@unified-latex/unified-latex-util-print-raw": "^1.7.1" - } - }, - "node_modules/@unified-latex/unified-latex-util-pegjs": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-pegjs/-/unified-latex-util-pegjs-1.7.1.tgz", - "integrity": "sha512-YTmUDUvcz5IdtuGgwyYXoIAmYB7hL1zwuCDifZnMn1mKSc6QNB1XcnpLm2J3msLp6PlBVM1ouPZ8JJJOzRktjw==", - "dev": true, - "dependencies": { - "@unified-latex/unified-latex-types": "^1.7.1", - "@unified-latex/unified-latex-util-match": "^1.7.1" - } - }, - "node_modules/@unified-latex/unified-latex-util-print-raw": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-print-raw/-/unified-latex-util-print-raw-1.7.1.tgz", - "integrity": "sha512-63Tgz85Q4YUrnqoba5xIE23eeGErVZqaTk/kFCth/1Cc/fMulU6LJtineDcjQta1nA2X08Srog4ugfanZMgevQ==", - "dev": true, - "dependencies": { - "@unified-latex/unified-latex-types": "^1.7.1" - } - }, - "node_modules/@unified-latex/unified-latex-util-replace": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-replace/-/unified-latex-util-replace-1.7.1.tgz", - "integrity": "sha512-4hrQqBMxt1eUQGoaohzNhl9XrCwsXEBeGu9BTb6oEn1GcsNrLDUCToiPvqHX9KipM8eh9grUJjqaTDPDt7FiZg==", - "dev": true, - "dependencies": { - "@unified-latex/unified-latex-types": "^1.7.1", - "@unified-latex/unified-latex-util-match": "^1.7.1", - "@unified-latex/unified-latex-util-split": "^1.7.1", - "@unified-latex/unified-latex-util-trim": "^1.7.1", - "@unified-latex/unified-latex-util-visit": "^1.7.1", - "unified": "^10.1.2" - } - }, - "node_modules/@unified-latex/unified-latex-util-replace/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", - "dev": true - }, - "node_modules/@unified-latex/unified-latex-util-replace/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@unified-latex/unified-latex-util-split": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-split/-/unified-latex-util-split-1.7.1.tgz", - "integrity": "sha512-nWRP3ZZIOO/iKEldw/+9j/7jlTsyU3YFCNJJ9jQ/g53GTEWz72vj5vAM41mXOhzy8G0tkDOLUzu0thYKg0m+Iw==", - "dev": true, - "dependencies": { - "@unified-latex/unified-latex-types": "^1.7.1", - "@unified-latex/unified-latex-util-match": "^1.7.1" - } - }, - "node_modules/@unified-latex/unified-latex-util-trim": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-trim/-/unified-latex-util-trim-1.7.1.tgz", - "integrity": "sha512-qFj8pG8jIGPXXl5gFKQ+J1crdQOm+1Q3qv6aF0rtaN9qZdiTKc3E8zptR0JHWVK1lo4kkt9yMP8f84nnpBsCMw==", - "dev": true, - "dependencies": { - "@unified-latex/unified-latex-types": "^1.7.1", - "@unified-latex/unified-latex-util-match": "^1.7.1", - "@unified-latex/unified-latex-util-visit": "^1.7.1", - "unified": "^10.1.2" - } - }, - "node_modules/@unified-latex/unified-latex-util-trim/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", - "dev": true - }, - "node_modules/@unified-latex/unified-latex-util-trim/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@unified-latex/unified-latex-util-visit": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-visit/-/unified-latex-util-visit-1.7.1.tgz", - "integrity": "sha512-G9DWrGTs3ZDlTxAhtlACIU1Nnuy6W13guIahtNPrmUkO24EPqnw2auwWjGbeTnf03hwoEopibst+ExrswDwt1A==", - "dev": true, - "dependencies": { - "@unified-latex/unified-latex-types": "^1.7.1", - "@unified-latex/unified-latex-util-match": "^1.7.1" - } - }, "node_modules/@xmldom/xmldom": { "version": "0.8.10", "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", @@ -4518,16 +4479,16 @@ } }, "node_modules/archiver-utils/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", + "jackspeak": "^2.3.6", "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" }, "bin": { "glob": "dist/esm/bin.mjs" @@ -4539,22 +4500,10 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/archiver-utils/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/archiver-utils/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -4566,36 +4515,13 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/archiver-utils/node_modules/readable-stream": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", - "dev": true, - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/archiver/node_modules/readable-stream": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", + "node_modules/archiver-utils/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", "dev": true, - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=16 || 14 >=14.17" } }, "node_modules/are-we-there-yet": { @@ -4611,6 +4537,20 @@ "node": ">=10" } }, + "node_modules/are-we-there-yet/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "optional": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/arg": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/arg/-/arg-1.0.0.tgz", @@ -5016,9 +4956,9 @@ "dev": true }, "node_modules/bare-events": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.2.0.tgz", - "integrity": "sha512-Yyyqff4PIFfSuthCZqLlPISTWHmnQxoPuAvkmgzsJEmG3CesdIv6Xweayl0JkCZJSB2yYIdJyEz97tpxNhgjbg==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.2.2.tgz", + "integrity": "sha512-h7z00dWdG0PYOQEvChhOSWvOfkIKsdZGkWr083FgN/HyoQuebSew/cgirYqh9SCuy/hRvxc5Vy6Fw8xAmYHLkQ==", "optional": true }, "node_modules/base": { @@ -5146,6 +5086,20 @@ "ieee754": "^1.1.13" } }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/blinkdb": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/blinkdb/-/blinkdb-0.14.0.tgz", @@ -5422,18 +5376,6 @@ "node": ">= 0.4" } }, - "node_modules/clean-css": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", - "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", - "dev": true, - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 10.0" - } - }, "node_modules/cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", @@ -5509,11 +5451,19 @@ "node": ">=4" } }, - "node_modules/clipboardy/node_modules/lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dependencies": { + "node_modules/clipboardy/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clipboardy/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dependencies": { "pseudomap": "^1.0.2", "yallist": "^2.1.2" } @@ -5674,48 +5624,6 @@ "node": ">= 14" } }, - "node_modules/compress-commons/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/compress-commons/node_modules/readable-stream": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", - "dev": true, - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/compromise": { - "version": "14.13.0", - "resolved": "https://registry.npmjs.org/compromise/-/compromise-14.13.0.tgz", - "integrity": "sha512-NqGgcBTRF7Zs3kBWJjKWoYdYTu0tZRcR4yKIA6Ve3KxpD9tgkbDHiVnFrkNYMt26jScrfKPGfVVkGaW++gq4VQ==", - "dev": true, - "dependencies": { - "efrt": "2.7.0", - "grad-school": "0.0.5", - "suffix-thumb": "5.0.2" - }, - "engines": { - "node": ">=12.0.0" - } - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -5753,9 +5661,9 @@ "hasInstallScript": true }, "node_modules/core-js-pure": { - "version": "3.36.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.36.0.tgz", - "integrity": "sha512-cN28qmhRNgbMZZMc/RFu5w8pK9VJzpb2rJVR/lHuZJKwmXnoWOpXmMkxqBB514igkp1Hu8WGROsiOAzUcKdHOQ==", + "version": "3.36.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.36.1.tgz", + "integrity": "sha512-NXCvHvSVYSrewP0L5OhltzXeWFJLo2AL2TYnj6iLV3Bw8mM62wAQMNgUCRI6EBu6hVVpbCxmOPlxh1Ikw2PfUA==", "hasInstallScript": true, "funding": { "type": "opencollective", @@ -5817,22 +5725,6 @@ "node": ">= 14" } }, - "node_modules/crc32-stream/node_modules/readable-stream": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", - "dev": true, - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, "node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", @@ -6130,9 +6022,9 @@ } }, "node_modules/detect-libc": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", - "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", "optional": true, "engines": { "node": ">=8" @@ -6264,15 +6156,6 @@ "resolved": "https://registry.npmjs.org/edtfy/-/edtfy-0.0.8.tgz", "integrity": "sha512-qhABI7FiyElTqKNMv4ETT3T4gRIPal3TxvNfx8Ekwhb2HlrWIiyQJJKVTJkVmsG6H6ape6fnZQbaH69bH31a8Q==" }, - "node_modules/efrt": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/efrt/-/efrt-2.7.0.tgz", - "integrity": "sha512-/RInbCy1d4P6Zdfa+TMVsf/ufZVotat5hCw3QXmWtjU+3pFEOvOQ7ibo3aIxyCJw2leIeAMjmPj+1SLJiCpdrQ==", - "dev": true, - "engines": { - "node": ">=12.0.0" - } - }, "node_modules/ejs": { "version": "3.1.9", "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", @@ -6530,36 +6413,40 @@ } }, "node_modules/eslint": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.0.0.tgz", - "integrity": "sha512-IMryZ5SudxzQvuod6rUdIUz29qFItWx281VhtFVc2Psy/ZhlCeD/5DT6lBIJ4H3G+iamGJoTln1v+QSuPw0p7Q==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^3.0.2", - "@eslint/js": "9.0.0", - "@humanwhocodes/config-array": "^0.12.3", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", + "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.0.1", - "eslint-visitor-keys": "^4.0.0", - "espree": "^10.0.1", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", + "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", "glob-parent": "^6.0.2", + "globals": "^13.19.0", "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", @@ -6573,7 +6460,7 @@ "eslint": "bin/eslint.js" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -6621,6 +6508,63 @@ "ms": "^2.1.1" } }, + "node_modules/eslint-plugin-import": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "dependencies": { + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/eslint-plugin-prefer-arrow": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/eslint-plugin-prefer-arrow/-/eslint-plugin-prefer-arrow-1.2.3.tgz", @@ -6630,15 +6574,15 @@ } }, "node_modules/eslint-scope": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.1.tgz", - "integrity": "sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -6670,17 +6614,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", - "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, "node_modules/eslint/node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -6763,27 +6696,16 @@ } }, "node_modules/espree": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.0.1.tgz", - "integrity": "sha512-MWkrWZbJsL2UwnjxTX3gG8FneachS/Mwg7tdGXce011sJd5b0JG54vat5KHnfSBODZ3Wvzd2WnjxyzsRoVv+ww==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dependencies": { - "acorn": "^8.11.3", + "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.0.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "eslint-visitor-keys": "^3.4.1" }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", - "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -6922,6 +6844,14 @@ "which": "^1.2.9" } }, + "node_modules/execa/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/execa/node_modules/lru-cache": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", @@ -7296,14 +7226,14 @@ } }, "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dependencies": { - "flat-cache": "^4.0.0" + "flat-cache": "^3.0.4" }, "engines": { - "node": ">=16.0.0" + "node": "^10.12.0 || >=12.0.0" } }, "node_modules/file-path-filter": { @@ -7472,15 +7402,49 @@ } }, "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dependencies": { "flatted": "^3.2.9", - "keyv": "^4.5.4" + "keyv": "^4.5.3", + "rimraf": "^3.0.2" }, "engines": { - "node": ">=16" + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flat-cache/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/flat-cache/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/flatted": { @@ -7922,11 +7886,14 @@ } }, "node_modules/globals": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dependencies": { + "type-fest": "^0.20.2" + }, "engines": { - "node": ">=18" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -7987,15 +7954,6 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, - "node_modules/grad-school": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/grad-school/-/grad-school-0.0.5.tgz", - "integrity": "sha512-rXunEHF9M9EkMydTBux7+IryYXEZinRk6g8OBOGDBzo/qWJjhTxy86i5q7lQYpCLHN8Sqv1XX3OIOc7ka2gtvQ==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", @@ -8258,9 +8216,9 @@ "integrity": "sha512-2AtBBJRrZ8WvhB1eDgTjW2TwVy1lat9FJW+XvVX836gsKi6qlhwaVG2jQZjbJAFr81/UW+6ABJSz/QOpeqgmuQ==" }, "node_modules/http-link-header": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-link-header/-/http-link-header-1.1.1.tgz", - "integrity": "sha512-mW3N/rTYpCn99s1do0zx6nzFZSwLH9HGfUM4ZqLWJ16ylmYaC2v5eYGqrNTQlByx8AzUgGI+V/32gXPugs1+Sw==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/http-link-header/-/http-link-header-1.1.3.tgz", + "integrity": "sha512-3cZ0SRL8fb9MUlU3mKM61FcQvPfXx2dBrZW3Vbg5CXa8jFlK8OaEpePenLe1oEXQduhz8b0QjsqfS59QP4AJDQ==", "dev": true, "engines": { "node": ">=6.0.0" @@ -8867,11 +8825,15 @@ } }, "node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-string": { @@ -9213,9 +9175,9 @@ } }, "node_modules/known-css-properties": { - "version": "0.29.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz", - "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==", + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.30.0.tgz", + "integrity": "sha512-VSWXYUnsPu9+WYKkfmJyLKtIvaRJi1kXUqVmBACORXZQxT5oZDsoZ2vQP+bQFDnWtpI/4eq3MLoRMjI2fnLzTQ==", "dev": true }, "node_modules/kuromoji": { @@ -11512,13 +11474,13 @@ } }, "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -11755,9 +11717,9 @@ } }, "node_modules/parse-import-specifiers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-import-specifiers/-/parse-import-specifiers-1.0.2.tgz", - "integrity": "sha512-MzJKeFIsoY0cTv/Y41TZipso3aYMz4+jpI1jCPhA9os6McI1cUUhI88WtmzdZ2ghfhuZ+1YF8lzx29eIhMexlA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/parse-import-specifiers/-/parse-import-specifiers-1.0.3.tgz", + "integrity": "sha512-jNtWL2DinOHUGnFEzeAyCJhacxwFkLzPnR3Foy3t2mOTIEgzZ3aaOakPw0PvoLaPZUy64CWYuhVFa/QkEMLJhA==", "dev": true, "engines": { "node": ">=16" @@ -11841,11 +11803,11 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", + "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", "dependencies": { - "lru-cache": "^9.1.1 || ^10.0.0", + "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { @@ -11913,13 +11875,12 @@ "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "node_modules/picomatch": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.1.tgz", - "integrity": "sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "dev": true, "engines": { "node": ">=12" @@ -12043,9 +12004,9 @@ } }, "node_modules/postcss": { - "version": "8.4.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", - "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "dev": true, "funding": [ { @@ -12064,7 +12025,7 @@ "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "source-map-js": "^1.2.0" }, "engines": { "node": "^10 || ^12 || >=14" @@ -12103,9 +12064,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.15", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", - "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", "dev": true, "dependencies": { "cssesc": "^3.0.0", @@ -12515,41 +12476,6 @@ "node": ">=18" } }, - "node_modules/putout/node_modules/@putout/formatter-dump": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@putout/formatter-dump/-/formatter-dump-5.0.0.tgz", - "integrity": "sha512-txlOnphn2pfvbkyYmKbw+zAc+T/Q01958zy0e5jR+AQcWCGyCgjBAeVMh+pUBZ7+Zyl/CAnou0zG87t7hTYA9Q==", - "dev": true, - "dependencies": { - "@putout/formatter-json": "^2.0.0", - "chalk": "^5.3.0", - "table": "^6.0.1" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "putout": ">=35" - } - }, - "node_modules/putout/node_modules/@putout/plugin-filesystem": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@putout/plugin-filesystem/-/plugin-filesystem-5.0.0.tgz", - "integrity": "sha512-y8g787NBtcr4MVxdSUpdRidz96fRRHsGk5IWYCiZQB4Zs05vkyVjNgNAyXYJ6J6a0QadOJes64+I5aA/V4XpzQ==", - "dev": true, - "dependencies": { - "@putout/babel": "^2.0.0", - "@putout/operate": "^12.0.0", - "@putout/operator-filesystem": "^4.0.0", - "@putout/operator-json": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "putout": ">=35" - } - }, "node_modules/putout/node_modules/chalk": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", @@ -12625,16 +12551,19 @@ } }, "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", + "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", + "dev": true, "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" }, "engines": { - "node": ">= 6" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/readdir-glob": { @@ -14114,15 +14043,15 @@ } }, "node_modules/rimraf/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", + "jackspeak": "^2.3.6", "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" }, "bin": { "glob": "dist/esm/bin.mjs" @@ -14135,9 +14064,9 @@ } }, "node_modules/rimraf/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -14148,6 +14077,14 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rimraf/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -14316,16 +14253,16 @@ "optional": true }, "node_modules/set-function-length": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", - "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dependencies": { - "define-data-property": "^1.1.2", + "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.3", + "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -14481,11 +14418,11 @@ } }, "node_modules/side-channel": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz", - "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dependencies": { - "call-bind": "^1.0.6", + "call-bind": "^1.0.7", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.4", "object-inspect": "^1.13.1" @@ -14694,9 +14631,9 @@ } }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "dev": true, "engines": { "node": ">=0.10.0" @@ -14883,14 +14820,15 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/string.prototype.padend": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.5.tgz", - "integrity": "sha512-DOB27b/2UTTD+4myKUFh+/fXWcu/UDyASIXfg+7VzoCNNGOfWvoyU/x5pvVHr++ztyt/oSYI1BcWBBG/hmlNjA==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.6.tgz", + "integrity": "sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -15005,15 +14943,16 @@ } }, "node_modules/stylelint": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.2.1.tgz", - "integrity": "sha512-SfIMGFK+4n7XVAyv50CpVfcGYWG4v41y6xG7PqOgQSY8M/PgdK0SQbjWFblxjJZlN9jNq879mB4BCZHJRIJ1hA==", + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.3.1.tgz", + "integrity": "sha512-/JOwQnBvxEKOT2RtNgGpBVXnCSMBgKOL2k7w0K52htwCyJls4+cHvc4YZgXlVoAZS9QJd2DgYAiRnja96pTgxw==", "dev": true, "dependencies": { - "@csstools/css-parser-algorithms": "^2.5.0", - "@csstools/css-tokenizer": "^2.2.3", - "@csstools/media-query-list-parser": "^2.1.7", - "@csstools/selector-specificity": "^3.0.1", + "@csstools/css-parser-algorithms": "^2.6.1", + "@csstools/css-tokenizer": "^2.2.4", + "@csstools/media-query-list-parser": "^2.1.9", + "@csstools/selector-specificity": "^3.0.2", + "@dual-bundle/import-meta-resolve": "^4.0.0", "balanced-match": "^2.0.0", "colord": "^2.9.3", "cosmiconfig": "^9.0.0", @@ -15027,19 +14966,19 @@ "globby": "^11.1.0", "globjoin": "^0.1.4", "html-tags": "^3.3.1", - "ignore": "^5.3.0", + "ignore": "^5.3.1", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", - "known-css-properties": "^0.29.0", + "known-css-properties": "^0.30.0", "mathml-tag-names": "^2.1.3", - "meow": "^13.1.0", + "meow": "^13.2.0", "micromatch": "^4.0.5", "normalize-path": "^3.0.0", "picocolors": "^1.0.0", - "postcss": "^8.4.33", + "postcss": "^8.4.38", "postcss-resolve-nested-selector": "^0.1.1", "postcss-safe-parser": "^7.0.0", - "postcss-selector-parser": "^6.0.15", + "postcss-selector-parser": "^6.0.16", "postcss-value-parser": "^4.2.0", "resolve-from": "^5.0.0", "string-width": "^4.2.3", @@ -15133,6 +15072,18 @@ "node": ">=8" } }, + "node_modules/stylelint/node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/stylelint/node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -15145,6 +15096,19 @@ "node": ">=8" } }, + "node_modules/stylelint/node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/stylelint/node_modules/global-modules": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", @@ -15259,12 +15223,6 @@ "which": "bin/which" } }, - "node_modules/suffix-thumb": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/suffix-thumb/-/suffix-thumb-5.0.2.tgz", - "integrity": "sha512-I5PWXAFKx3FYnI9a+dQMWNqTxoRt6vdBdb0O+BJ1sxXCWtSoQCusc13E58f+9p4MYx/qCnEMkD5jac6K2j3dgA==", - "dev": true - }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -15307,9 +15265,9 @@ "dev": true }, "node_modules/table": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", - "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "version": "6.8.2", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz", + "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==", "dev": true, "dependencies": { "ajv": "^8.0.1", @@ -15323,9 +15281,9 @@ } }, "node_modules/tar": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", - "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "optional": true, "dependencies": { "chownr": "^2.0.0", @@ -15620,9 +15578,9 @@ } }, "node_modules/ts-api-utils": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.2.1.tgz", - "integrity": "sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", "engines": { "node": ">=16" }, @@ -16505,24 +16463,6 @@ "string-width": "^1.0.2 || 2 || 3 || 4" } }, - "node_modules/wink-eng-lite-web-model": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/wink-eng-lite-web-model/-/wink-eng-lite-web-model-1.6.0.tgz", - "integrity": "sha512-j4DaUTWnX3OzFFbTnY4v9RUeebghAd4mEWiJx9rZ29jfyW1OdK6H9UPbY8QrFb6sRIV1wJP2FGe2phA6MSEfwQ==", - "dev": true, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "wink-nlp": ">2.1.0" - } - }, - "node_modules/wink-nlp": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/wink-nlp/-/wink-nlp-2.2.0.tgz", - "integrity": "sha512-q2BFBauhMS/4f+grni6hL+a0RxHJzmWT7Vj4nbaz7Ihr7ro/fLfrW+qHy16LlP1Oqsv1TacThKNDXmSm6F+PnA==", - "dev": true - }, "node_modules/with": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", @@ -16672,10 +16612,13 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/yaml": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", - "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz", + "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==", "dev": true, + "bin": { + "yaml": "bin.mjs" + }, "engines": { "node": ">= 14" } @@ -16739,22 +16682,6 @@ "node": ">= 14" } }, - "node_modules/zip-stream/node_modules/readable-stream": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", - "dev": true, - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, "node_modules/zlibjs": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/zlibjs/-/zlibjs-0.3.1.tgz", @@ -16815,104 +16742,6 @@ "zotero-start": "bin/start.py" } }, - "node_modules/zotero-plugin/node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/zotero-plugin/node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/zotero-plugin/node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/zotero-plugin/node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/zotero-plugin/node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/zotero-plugin/node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/zotero-plugin/node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/zotero-plugin/node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/zotero-plugin/node_modules/@octokit/auth-token": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", @@ -16922,15 +16751,15 @@ } }, "node_modules/zotero-plugin/node_modules/@octokit/core": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.1.0.tgz", - "integrity": "sha512-BDa2VAMLSh3otEiaMJ/3Y36GU4qf6GI+VivQ/P41NC6GHcdxpKlqV0ikSZ5gdQsmS3ojXeRx5vasgNTinF0Q4g==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.0.tgz", + "integrity": "sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg==", "dependencies": { "@octokit/auth-token": "^4.0.0", - "@octokit/graphql": "^7.0.0", - "@octokit/request": "^8.0.2", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^12.0.0", + "@octokit/graphql": "^7.1.0", + "@octokit/request": "^8.3.1", + "@octokit/request-error": "^5.1.0", + "@octokit/types": "^13.0.0", "before-after-hook": "^2.2.0", "universal-user-agent": "^6.0.0" }, @@ -16939,11 +16768,11 @@ } }, "node_modules/zotero-plugin/node_modules/@octokit/endpoint": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.4.tgz", - "integrity": "sha512-DWPLtr1Kz3tv8L0UvXTDP1fNwM0S+z6EJpRcvH66orY6Eld4XBMCSYsaWp4xIm61jTWxK68BrR7ibO+vSDnZqw==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.5.tgz", + "integrity": "sha512-ekqR4/+PCLkEBF6qgj8WqJfvDq65RH85OAgrtnVp1mSxaXF03u2xW/hUdweGS5654IlC0wkNYC18Z50tSYTAFw==", "dependencies": { - "@octokit/types": "^12.0.0", + "@octokit/types": "^13.1.0", "universal-user-agent": "^6.0.0" }, "engines": { @@ -16951,12 +16780,12 @@ } }, "node_modules/zotero-plugin/node_modules/@octokit/graphql": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.0.2.tgz", - "integrity": "sha512-OJ2iGMtj5Tg3s6RaXH22cJcxXRi7Y3EBqbHTBRq+PQAqfaS8f/236fUrWhfSn8P4jovyzqucxme7/vWSSZBX2Q==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.1.0.tgz", + "integrity": "sha512-r+oZUH7aMFui1ypZnAvZmn0KSqAUgE1/tUXIWaqUCa1758ts/Jio84GZuzsvUkme98kv0WFY8//n0J1Z+vsIsQ==", "dependencies": { - "@octokit/request": "^8.0.1", - "@octokit/types": "^12.0.0", + "@octokit/request": "^8.3.0", + "@octokit/types": "^13.0.0", "universal-user-agent": "^6.0.0" }, "engines": { @@ -16964,57 +16793,83 @@ } }, "node_modules/zotero-plugin/node_modules/@octokit/openapi-types": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-19.1.0.tgz", - "integrity": "sha512-6G+ywGClliGQwRsjvqVYpklIfa7oRPA0vyhPQG/1Feh+B+wU0vGH1JiJ5T25d3g1JZYBHzR2qefLi9x8Gt+cpw==" + "version": "22.0.1", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.0.1.tgz", + "integrity": "sha512-1yN5m1IMNXthoBDUXFF97N1gHop04B3H8ws7wtOr8GgRyDO1gKALjwMHARNBoMBiB/2vEe/vxstrApcJZzQbnQ==" }, "node_modules/zotero-plugin/node_modules/@octokit/plugin-paginate-rest": { - "version": "9.1.5", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.1.5.tgz", - "integrity": "sha512-WKTQXxK+bu49qzwv4qKbMMRXej1DU2gq017euWyKVudA6MldaSSQuxtz+vGbhxV4CjxpUxjZu6rM2wfc1FiWVg==", + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.2.1.tgz", + "integrity": "sha512-wfGhE/TAkXZRLjksFXuDZdmGnJQHvtU/joFQdweXUgzo1XwvBCD4o4+75NtFfjfLK5IwLf9vHTfSiU3sLRYpRw==", "dependencies": { - "@octokit/types": "^12.4.0" + "@octokit/types": "^12.6.0" }, "engines": { "node": ">= 18" }, "peerDependencies": { - "@octokit/core": ">=5" + "@octokit/core": "5" + } + }, + "node_modules/zotero-plugin/node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/openapi-types": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", + "integrity": "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==" + }, + "node_modules/zotero-plugin/node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/types": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.6.0.tgz", + "integrity": "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==", + "dependencies": { + "@octokit/openapi-types": "^20.0.0" } }, "node_modules/zotero-plugin/node_modules/@octokit/plugin-request-log": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-4.0.0.tgz", - "integrity": "sha512-2uJI1COtYCq8Z4yNSnM231TgH50bRkheQ9+aH8TnZanB6QilOnx8RMD2qsnamSOXtDj0ilxvevf5fGsBhBBzKA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-4.0.1.tgz", + "integrity": "sha512-GihNqNpGHorUrO7Qa9JbAl0dbLnqJVrV8OXe2Zm5/Y4wFkZQDfTreBzVmiRfJVfE4mClXdihHnbpyyO9FSX4HA==", "engines": { "node": ">= 18" }, "peerDependencies": { - "@octokit/core": ">=5" + "@octokit/core": "5" } }, "node_modules/zotero-plugin/node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-10.3.0.tgz", - "integrity": "sha512-c/fjpoHispRvBZuRoTVt/uALg7pXa9RQbXWJiDMk6NDkGNomuAZG7YuYYpZoxeoXv+kVRjIDTsO0e1z0pei+PQ==", + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-10.4.1.tgz", + "integrity": "sha512-xV1b+ceKV9KytQe3zCVqjg+8GTGfDYwaT1ATU5isiUyVtlVAO3HNdzpS4sr4GBx4hxQ46s7ITtZrAsxG22+rVg==", "dependencies": { - "@octokit/types": "^12.4.0" + "@octokit/types": "^12.6.0" }, "engines": { "node": ">= 18" }, "peerDependencies": { - "@octokit/core": ">=5" + "@octokit/core": "5" + } + }, + "node_modules/zotero-plugin/node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/openapi-types": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", + "integrity": "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==" + }, + "node_modules/zotero-plugin/node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.6.0.tgz", + "integrity": "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==", + "dependencies": { + "@octokit/openapi-types": "^20.0.0" } }, "node_modules/zotero-plugin/node_modules/@octokit/request": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.2.0.tgz", - "integrity": "sha512-exPif6x5uwLqv1N1irkLG1zZNJkOtj8bZxuVHd71U5Ftuxf2wGNvAJyNBcPbPC+EBzwYEbBDdSFb8EPcjpYxPQ==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.4.0.tgz", + "integrity": "sha512-9Bb014e+m2TgBeEJGEbdplMVWwPmL1FPtggHQRkV+WVsMggPtEkLKPlcVYm/o8xKLkpJ7B+6N8WfQMtDLX2Dpw==", "dependencies": { - "@octokit/endpoint": "^9.0.0", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^12.0.0", + "@octokit/endpoint": "^9.0.1", + "@octokit/request-error": "^5.1.0", + "@octokit/types": "^13.1.0", "universal-user-agent": "^6.0.0" }, "engines": { @@ -17022,11 +16877,11 @@ } }, "node_modules/zotero-plugin/node_modules/@octokit/request-error": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.0.1.tgz", - "integrity": "sha512-X7pnyTMV7MgtGmiXBwmO6M5kIPrntOXdyKZLigNfQWSEQzVxR4a4vo49vJjTWX70mPndj8KhfT4Dx+2Ng3vnBQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.1.0.tgz", + "integrity": "sha512-GETXfE05J0+7H2STzekpKObFe765O5dlAKUTLNGeH+x47z7JjXHfsHKo5z21D/o/IOZTUEI6nyWyR+bZVP/n5Q==", "dependencies": { - "@octokit/types": "^12.0.0", + "@octokit/types": "^13.1.0", "deprecation": "^2.0.0", "once": "^1.4.0" }, @@ -17035,142 +16890,31 @@ } }, "node_modules/zotero-plugin/node_modules/@octokit/rest": { - "version": "20.0.2", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-20.0.2.tgz", - "integrity": "sha512-Ux8NDgEraQ/DMAU1PlAohyfBBXDwhnX2j33Z1nJNziqAfHi70PuxkFYIcIt8aIAxtRE7KVuKp8lSR8pA0J5iOQ==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-20.1.0.tgz", + "integrity": "sha512-STVO3itHQLrp80lvcYB2UIKoeil5Ctsgd2s1AM+du3HqZIR35ZH7WE9HLwUOLXH0myA0y3AGNPo8gZtcgIbw0g==", "dependencies": { - "@octokit/core": "^5.0.0", - "@octokit/plugin-paginate-rest": "^9.0.0", + "@octokit/core": "^5.0.2", + "@octokit/plugin-paginate-rest": "^9.1.5", "@octokit/plugin-request-log": "^4.0.0", - "@octokit/plugin-rest-endpoint-methods": "^10.0.0" + "@octokit/plugin-rest-endpoint-methods": "^10.2.0" }, "engines": { "node": ">= 18" } }, "node_modules/zotero-plugin/node_modules/@octokit/types": { - "version": "12.5.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.5.0.tgz", - "integrity": "sha512-YJEKcb0KkJlIUNU/zjnZwHEP8AoVh/OoIcP/1IyR4UHxExz7fzpe/a8IG4wBtQi7QDEqiomVLX88S6FpxxAJtg==", + "version": "13.4.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.4.0.tgz", + "integrity": "sha512-WlMegy3lPXYWASe3k9Jslc5a0anrYAYMWtsFrxBTdQjS70hvLH6C+PGvHbOsgy3RA3LouGJoU/vAt4KarecQLQ==", "dependencies": { - "@octokit/openapi-types": "^19.1.0" + "@octokit/openapi-types": "^22.0.1" } }, - "node_modules/zotero-plugin/node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", - "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", - "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/type-utils": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.4", - "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/zotero-plugin/node_modules/@typescript-eslint/parser": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", - "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", - "dependencies": { - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/zotero-plugin/node_modules/@typescript-eslint/type-utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", - "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", - "dependencies": { - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/zotero-plugin/node_modules/@typescript-eslint/utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", - "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "semver": "^7.5.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - } - }, - "node_modules/zotero-plugin/node_modules/archiver": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-6.0.2.tgz", - "integrity": "sha512-UQ/2nW7NMl1G+1UnrLypQw1VdT9XZg/ECcKPq7l+STzStrSivFIXIp34D8M5zeNGW5NoOupdYCHv6VySCPNNlw==", + "node_modules/zotero-plugin/node_modules/archiver": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-6.0.2.tgz", + "integrity": "sha512-UQ/2nW7NMl1G+1UnrLypQw1VdT9XZg/ECcKPq7l+STzStrSivFIXIp34D8M5zeNGW5NoOupdYCHv6VySCPNNlw==", "dependencies": { "archiver-utils": "^4.0.1", "async": "^3.2.4", @@ -17279,305 +17023,16 @@ "node": ">= 12.0.0" } }, - "node_modules/zotero-plugin/node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/zotero-plugin/node_modules/eslint-plugin-import": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", - "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", - "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", - "semver": "^6.3.1", - "tsconfig-paths": "^3.15.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/zotero-plugin/node_modules/eslint-plugin-import/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/zotero-plugin/node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/zotero-plugin/node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/zotero-plugin/node_modules/eslint-plugin-import/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/zotero-plugin/node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/zotero-plugin/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/zotero-plugin/node_modules/eslint/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/zotero-plugin/node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/zotero-plugin/node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/zotero-plugin/node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/zotero-plugin/node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/zotero-plugin/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zotero-plugin/node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/zotero-plugin/node_modules/flat-cache/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/zotero-plugin/node_modules/flat-cache/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/zotero-plugin/node_modules/flat-cache/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/zotero-plugin/node_modules/flat-cache/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/zotero-plugin/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", + "jackspeak": "^2.3.6", "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" }, "bin": { "glob": "dist/esm/bin.mjs" @@ -17589,43 +17044,10 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/zotero-plugin/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zotero-plugin/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/zotero-plugin/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/zotero-plugin/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -17636,40 +17058,12 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/zotero-plugin/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zotero-plugin/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dependencies": { - "p-limit": "^3.0.2" - }, + "node_modules/zotero-plugin/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zotero-plugin/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" } }, "node_modules/zotero-plugin/node_modules/peggy": { @@ -17687,15 +17081,17 @@ "node": ">=14" } }, - "node_modules/zotero-plugin/node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "engines": { - "node": ">=10" + "node_modules/zotero-plugin/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 6" } }, "node_modules/zotero-plugin/node_modules/zip-stream": { diff --git a/package.json b/package.json index 74e065b52f..9067dac0cf 100644 --- a/package.json +++ b/package.json @@ -112,7 +112,7 @@ "zotero-plugin": "2.0.14" }, "devDependencies": { - "@retorquere/bibtex-parser": "^8.0.12", + "@retorquere/bibtex-parser": "^7.0.16", "@retorquere/zotero-sync": "^1.0.27", "@types/bluebird": "^3.5.42", "@types/lokijs": "^1.5.14", @@ -134,7 +134,7 @@ "dotenv": "^16.4.5", "ejs": "^3.1.9", "esbuild": "^0.20.2", - "eslint": "^9.0.0", + "eslint": "^8.57.0", "estrace": "^5.0.1", "eta": "^3.4.0", "fast-json-patch": "^3.1.1", diff --git a/setup/setup.py b/setup/setup.py index 868d3f48a4..a806e4eb34 100755 --- a/setup/setup.py +++ b/setup/setup.py @@ -13,5 +13,5 @@ import ftl2dtd import unicode -with open('submodules/zotero/chrome/content/zotero/osfile.mjs') as src, open('gen/osfile-shim.js', 'w') as tgt: - tgt.write(src.read().replace('export let OS =', 'export let $OS =')) +import shutil +shutil.copyfile('submodules/zotero/chrome/content/zotero/osfile.mjs', 'gen/osfile.js') diff --git a/site/content/exporting/unicode.md b/site/content/exporting/unicode.md index 6687bb9f32..6212fdbdfa 100644 --- a/site/content/exporting/unicode.md +++ b/site/content/exporting/unicode.md @@ -11,613 +11,571 @@ Some of us though are bound to outlets that still demand BibTeX, and there's gee -### mathrsfs +### wasysym | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | |---------------|----------|----------|---------------|----------|----------|---------------|----------|----------|---------------|----------|----------| -| 𝓏 | | \mathscr{z} | 𝓎 | | \mathscr{y} | 𝓍 | | \mathscr{x} | 𝓌 | | \mathscr{w} | -| 𝓋 | | \mathscr{v} | 𝓊 | | \mathscr{u} | 𝓉 | | \mathscr{t} | 𝓈 | | \mathscr{s} | -| 𝓇 | | \mathscr{r} | 𝓆 | | \mathscr{q} | 𝓅 | | \mathscr{p} | 𝓃 | | \mathscr{n} | -| 𝓂 | | \mathscr{m} | 𝓁 | | \mathscr{l} | 𝓀 | | \mathscr{k} | 𝒿 | | \mathscr{j} | -| 𝒾 | | \mathscr{i} | 𝒽 | | \mathscr{h} | 𝒻 | | \mathscr{f} | 𝒹 | | \mathscr{d} | -| 𝒸 | | \mathscr{c} | 𝒷 | | \mathscr{b} | 𝒶 | | \mathscr{a} | 𝒵 | | \mathscr{Z} | -| 𝒴 | | \mathscr{Y} | 𝒳 | | \mathscr{X} | 𝒲 | | \mathscr{W} | 𝒱 | | \mathscr{V} | -| 𝒰 | | \mathscr{U} | 𝒯 | | \mathscr{T} | 𝒮 | | \mathscr{S} | 𝒬 | | \mathscr{Q} | -| 𝒫 | | \mathscr{P} | 𝒪 | | \mathscr{O} | 𝒩 | | \mathscr{N} | 𝒦 | | \mathscr{K} | -| 𝒥 | | \mathscr{J} | 𝒢 | | \mathscr{G} | 𝒟 | | \mathscr{D} | 𝒞 | | \mathscr{C} | -| 𝒜 | | \mathscr{A} | ℴ | | \mathscr{o} | ℳ | | \mathscr{M} | ℱ | | \mathscr{F} | -| ℰ | | \mathscr{E} | ℯ | | \mathscr{e} | ℬ | | \mathscr{B} | ℛ | | \mathscr{R} | -| ℒ | | \mathscr{L} | ℐ | | \mathscr{I} | ℋ | | \mathscr{H} | ℊ | | \mathscr{g} | +| ♓ | \pisces | \pisces | ☽ | \rightmoon | | ☾ | \leftmoon | | | | | ### unicode-math | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | |---------------|----------|----------|---------------|----------|----------|---------------|----------|----------|---------------|----------|----------| -| 〰 | | \hzigzag | 〒 | | \postalmark | ⭔ | | \rightpentagon | ⭓ | | \rightpentagonblack | -| ⭒ | | \smwhitestar | ⭑ | | \medblackstar | ⭐ | | \medwhitestar | ⭌ | | \rightarrowbsimilar | -| ⭋ | | \leftarrowbsimilar | ⭊ | | \leftarrowapprox | ⭉ | | \similarleftarrow | ⭈ | | \rightarrowbackapprox | -| ⭇ | | \bsimilarrightarrow | ⭆ | | \RRightarrow | ⭅ | | \LLeftarrow | ⭄ | | \rightarrowsupset | -| ⭃ | | \rightarrowgtr | ⭂ | | \leftarrowbackapprox | ⭁ | | \bsimilarleftarrow | ⭀ | | \equalleftarrow | -| ⬿ | | \leftcurvedarrow | ⬾ | | \leftarrowx | ⬽ | | \nVtwoheadleftarrowtail | ⬼ | | \nvtwoheadleftarrowtail | -| ⬻ | | \twoheadleftarrowtail | ⬺ | | \nVleftarrowtail | ⬹ | | \nvleftarrowtail | ⬸ | | \leftdotarrow | -| ⬷ | | \twoheadleftdbkarrow | ⬶ | | \twoheadmapsfrom | ⬵ | | \nVtwoheadleftarrow | ⬴ | | \nvtwoheadleftarrow | -| ⬳ | | \longleftsquigarrow | ⬲ | | \leftarrowonoplus | ⬱ | | \leftthreearrows | ⬰ | | \circleonleftarrow | -| ⬯ | | \whtvertoval | ⬮ | | \blkvertoval | ⬭ | | \whthorzoval | ⬬ | | \blkhorzoval | -| ⬫ | | \smwhtlozenge | ⬪ | | \smblklozenge | ⬩ | | \smblkdiamond | ⬨ | | \mdwhtlozenge | -| ⬧ | | \mdblklozenge | ⬦ | | \mdwhtdiamond | ⬥ | | \mdblkdiamond | ⬤ | | \lgblkcircle | -| ⬣ | | \hexagonblack | ⬢ | | \varhexagonblack | ⬡ | | \varhexagon | ⬠ | | \pentagon | -| ⬟ | | \pentagonblack | ⬞ | | \vysmwhtsquare | ⬝ | | \vysmblksquare | ⬜ | | \lgwhtsquare | -| ⬛ | | \lgblksquare | ⬚ | | \dottedsquare | ⬙ | | \diamondbotblack | ⬘ | | \diamondtopblack | -| ⬗ | | \diamondrightblack | ⬖ | | \diamondleftblack | ⬕ | | \squarellblack | ⬔ | | \squareurblack | -| ⬓ | | \squarebotblack | ⬒ | | \squaretopblack | ⫿ | | \bigtalloblong | ⫾ | | \talloblong | -| ⫼ | | \biginterleave | ⫻ | | \trslash | ⫺ | | \geqqslant | ⫹ | | \leqqslant | -| ⫸ | | \gggnest | ⫷ | | \lllnest | ⫶ | | \threedotcolon | ⫵ | | \nhVvert | -| ⫴ | | \interleave | ⫳ | | \parsim | ⫲ | | \nhpar | ⫱ | | \topcir | -| ⫰ | | \midcir | ⫯ | | \cirmid | ⫮ | | \revnmid | ⫭ | | \bNot | -| ⫬ | | \Not | ⫫ | | \Vbar | ⫩ | | \vBarv | ⫨ | | \vBar | -| ⫧ | | \Barv | ⫦ | | \varVdash | ⫥ | | \DashV | ⫤ | | \Dashv | -| ⫣ | | \dashV | ⫢ | | \vDdash | ⫡ | | \perps | ⫠ | | \shortuptack | -| ⫟ | | \shortdowntack | ⫞ | | \shortlefttack | ⫝ | | \forksnot | ⫝̸ | | \forks | -| ⫛ | | \mlcp | ⫚ | | \topfork | ⫙ | | \forkv | ⫘ | | \supdsub | -| ⫗ | | \suphsub | ⫖ | | \supsup | ⫕ | | \subsub | ⫔ | | \supsub | -| ⫓ | | \subsup | ⫒ | | \csupe | ⫑ | | \csube | ⫐ | | \csup | -| ⫏ | | \csub | ⫎ | | \rsqhook | ⫍ | | \lsqhook | ⫌ | | \supsetneqq | -| ⫋ | | \subsetneqq | ⫊ | | \supsetapprox | ⫉ | | \subsetapprox | ⫈ | | \supsim | -| ⫇ | | \subsim | ⫆ | | \supseteqq | ⫅ | | \subseteqq | ⫄ | | \supedot | -| ⫃ | | \subedot | ⫂ | | \supmult | ⫁ | | \submult | ⫀ | | \supsetplus | -| ⪿ | | \subsetplus | ⪾ | | \supsetdot | ⪽ | | \subsetdot | ⪺ | | \succnapprox | -| ⪹ | | \precnapprox | ⪸ | | \succapprox | ⪷ | | \precapprox | ⪶ | | \succneqq | -| ⪵ | | \precneqq | ⪴ | | \succeqq | ⪳ | | \preceqq | ⪲ | | \succneq | -| ⪱ | | \precneq | ⪮ | | \bumpeqq | ⪭ | | \late | ⪬ | | \smte | -| ⪫ | | \lat | ⪪ | | \smt | ⪩ | | \gescc | ⪨ | | \lescc | -| ⪥ | | \gla | ⪤ | | \glj | ⪣ | | \partialmeetcontraction | ⪠ | | \simgE | -| ⪟ | | \simlE | ⪞ | | \simgtr | ⪝ | | \simless | ⪜ | | \eqqslantgtr | -| ⪛ | | \eqqslantless | ⪚ | | \eqqgtr | ⪙ | | \eqqless | ⪘ | | \egsdot | -| ⪗ | | \elsdot | ⪖ | | \eqslantgtr | ⪕ | | \eqslantless | ⪔ | | \gesles | -| ⪓ | | \lesges | ⪒ | | \glE | ⪑ | | \lgE | ⪐ | | \gsiml | -| ⪏ | | \lsimg | ⪎ | | \gsime | ⪍ | | \lsime | ⪌ | | \gtreqqless | -| ⪋ | | \lesseqqgtr | ⪊ | | \gnapprox | ⪉ | | \lnapprox | ⪈ | | \gneq | -| ⪇ | | \lneq | ⪆ | | \gtrapprox | ⪅ | | \lessapprox | ⪄ | | \gesdotol | -| ⪃ | | \lesdotor | ⪂ | | \gesdoto | ⪁ | | \lesdoto | ⪀ | | \gesdot | -| ⩿ | | \lesdot | ⩾ | | \geqslant | ⩽ | | \leqslant | ⩼ | | \gtquest | -| ⩻ | | \ltquest | ⩺ | | \gtcir | ⩹ | | \ltcir | ⩸ | | \equivDD | -| ⩷ | | \ddotseq | ⩴ | | \Coloneqq | ⩳ | | \eqqsim | ⩲ | | \pluseqq | -| ⩱ | | \eqqplus | ⩰ | | \approxeqq | ⩯ | | \hatapprox | ⩭ | | \congdot | -| ⩬ | | \simminussim | ⩫ | | \simrdots | ⩪ | | \dotsim | ⩩ | | \equivVvert | -| ⩨ | | \equivVert | ⩧ | | \dotequiv | ⩦ | | \eqdot | ⩥ | | \rsub | -| ⩤ | | \dsub | ⩣ | | \veedoublebar | ⩢ | | \doublebarvee | ⩡ | | \varveebar | -| ⩠ | | \wedgedoublebar | ⩟ | | \wedgebar | ⩝ | | \midbarvee | ⩜ | | \midbarwedge | -| ⩛ | | \veemidvert | ⩚ | | \wedgemidvert | ⩙ | | \veeonwedge | ⩘ | | \bigslopedwedge | -| ⩗ | | \bigslopedvee | ⩕ | | \wedgeonwedge | ⩔ | | \Vee | ⩓ | | \Wedge | -| ⩒ | | \veeodot | ⩑ | | \wedgeodot | ⩐ | | \closedvarcupsmashprod | ⩏ | | \Sqcup | -| ⩎ | | \Sqcap | ⩍ | | \closedvarcap | ⩌ | | \closedvarcup | ⩋ | | \twocaps | -| ⩊ | | \twocups | ⩉ | | \capbarcup | ⩈ | | \cupbarcap | ⩇ | | \capovercup | -| ⩆ | | \cupovercap | ⩅ | | \cupvee | ⩄ | | \capwedge | ⩃ | | \barcap | -| ⩂ | | \barcup | ⩁ | | \uminus | ⩀ | | \capdot | ⨾ | | \fcmp | -| ⨽ | | \intprodr | ⨼ | | \intprod | ⨻ | | \triangletimes | ⨺ | | \triangleminus | -| ⨹ | | \triangleplus | ⨸ | | \odiv | ⨷ | | \Otimes | ⨶ | | \otimeshat | -| ⨵ | | \otimesrhrim | ⨴ | | \otimeslhrim | ⨳ | | \smashtimes | ⨲ | | \btimes | -| ⨱ | | \timesbar | ⨰ | | \dottimes | ⨯ | | \vectimes | ⨮ | | \oplusrhrim | -| ⨭ | | \opluslhrim | ⨬ | | \minusrdots | ⨫ | | \minusfdots | ⨪ | | \minusdot | -| ⨩ | | \commaminus | ⨨ | | \plustrif | ⨧ | | \plussubtwo | ⨦ | | \plussim | -| ⨥ | | \plusdot | ⨤ | | \simplus | ⨣ | | \plushat | ⨢ | | \ringplus | -| ⨡ | | \zproject | ⨠ | | \zpipe | ⨟ | | \zcmp | ⨞ | | \bigtriangleleft | -| ⨝ | | \Join | ⨜ | | \lowint | ⨛ | | \upint | ⨚ | | \intcup | -| ⨙ | | \intcap | ⨘ | | \intx | ⨗ | | \intlarhk | ⨕ | | \pointint | -| ⨔ | | \npolint | ⨓ | | \scpolint | ⨒ | | \rppolint | ⨑ | | \awint | -| ⨐ | | \cirfnint | ⨎ | | \intBar | ⨍ | | \intbar | ⨌ | | \iiiint | -| ⨋ | | \sumint | ⨊ | | \modtwosum | ⨈ | | \disjquant | ⨇ | | \conjquant | -| ⨅ | | \bigsqcap | ⨄ | | \Elxuplus | ⨃ | | \bigcupdot | ⧿ | | \tminus | -| ⧾ | | \tplus | ⧽ | | \rcurvyangle | ⧼ | | \lcurvyangle | ⧻ | | \tripleplus | -| ⧺ | | \doubleplus | ⧸ | | \xsol | ⧷ | | \rsolbar | ⧶ | | \dsol | -| ⧴ | | \RuleDelayed | ⧳ | | \errbarblackcircle | ⧲ | | \errbarcircle | ⧱ | | \errbarblackdiamond | -| ⧰ | | \errbardiamond | ⧯ | | \errbarblacksquare | ⧮ | | \errbarsquare | ⧭ | | \blackcircledownarrow | -| ⧬ | | \circledownarrow | ⧫ | | \blacklozenge | ⧪ | | \blackdiamonddownarrow | ⧩ | | \downtrianglerightblack | -| ⧨ | | \downtriangleleftblack | ⧧ | | \thermod | ⧦ | | \gleichstark | ⧥ | | \eqvparsl | -| ⧤ | | \smeparsl | ⧣ | | \eparsl | ⧢ | | \shuffle | ⧡ | | \lrtriangleeq | -| ⧠ | | \laplac | ⧞ | | \nvinfty | ⧝ | | \tieinfty | ⧜ | | \iinfin | -| ⧛ | | \Rvzigzag | ⧚ | | \Lvzigzag | ⧙ | | \rvzigzag | ⧘ | | \lvzigzag | -| ⧗ | | \blackhourglass | ⧖ | | \hourglass | ⧕ | | \rftimes | ⧔ | | \lftimes | -| ⧓ | | \fbowtie | ⧒ | | \rfbowtie | ⧑ | | \lfbowtie | ⧎ | | \rtriltri | -| ⧍ | | \triangleserifs | ⧌ | | \triangles | ⧋ | | \triangleubar | ⧊ | | \triangleodot | -| ⧉ | | \boxonbox | ⧈ | | \boxbox | ⧇ | | \boxcircle | ⧆ | | \boxast | -| ⧅ | | \boxbslash | ⧃ | | \cirE | ⧂ | | \cirscir | ⧁ | | \circledgtr | -| ⧀ | | \circledless | ⦿ | | \circledbullet | ⦾ | | \circledwhitebullet | ⦽ | | \uparrowoncircle | -| ⦼ | | \odotslashdot | ⦻ | | \olcross | ⦺ | | \obot | ⦹ | | \operp | -| ⦸ | | \circledbslash | ⦷ | | \circledparallel | ⦶ | | \circledvert | ⦵ | | \circlehbar | -| ⦴ | | \emptysetoarrl | ⦳ | | \emptysetoarr | ⦲ | | \emptysetocirc | ⦱ | | \emptysetobar | -| ⦰ | | \revemptyset | ⦯ | | \measangledltosw | ⦮ | | \measangledrtose | ⦭ | | \measangleultonw | -| ⦬ | | \measangleurtone | ⦫ | | \measangleldtosw | ⦪ | | \measanglerdtose | ⦩ | | \measanglelutonw | -| ⦨ | | \measanglerutone | ⦧ | | \wideangleup | ⦦ | | \wideangledown | ⦥ | | \revangleubar | -| ⦤ | | \angleubar | ⦣ | | \revangle | ⦢ | | \turnangle | ⦡ | | \sphericalangleup | -| ⦠ | | \gtlpar | ⦟ | | \angdnr | ⦞ | | \angles | ⦝ | | \rightanglemdot | -| ⦛ | | \measuredangleleft | ⦚ | | \vzigzag | ⦙ | | \fourvdots | ⦘ | | \rblkbrbrak | -| ⦗ | | \lblkbrbrak | ⦖ | | \Rparenless | ⦕ | | \Lparengtr | ⦔ | | \rparengtr | -| ⦓ | | \lparenless | ⦒ | | \rangledot | ⦑ | | \langledot | ⦐ | | \rbrackurtick | -| ⦏ | | \lbracklltick | ⦎ | | \rbracklrtick | ⦍ | | \lbrackultick | ⦌ | | \rbrackubar | -| ⦋ | | \lbrackubar | ⦇ | | \limg | ⦆ | | \Elroang | ⦅ | | \lParen | -| ⦄ | | \rBrace | ⦃ | | \lBrace | ⦂ | | \typecolon | ⦁ | | \spot | -| ⦀ | | \Vvert | ⥿ | | \downfishtail | ⥾ | | \upfishtail | ⥽ | | \rightfishtail | -| ⥼ | | \leftfishtail | ⥻ | | \suplarr | ⥺ | | \leftarrowsubset | ⥹ | | \subrarr | -| ⥸ | | \gtrarr | ⥷ | | \leftarrowless | ⥶ | | \ltlarr | ⥵ | | \rightarrowapprox | -| ⥴ | | \rightarrowsimilar | ⥳ | | \leftarrowsimilar | ⥲ | | \similarrightarrow | ⥱ | | \equalrightarrow | -| ⥩ | | \rightleftharpoonsdown | ⥨ | | \rightleftharpoonsup | ⥧ | | \leftrightharpoonsdown | ⥦ | | \leftrightharpoonsup | -| ⥐ | | \DownLeftRightVector | ⥎ | | \leftrightharpoonupup | ⥍ | | \updownharpoonleftright | ⥌ | | \updownharpoonrightleft | -| ⥉ | | \twoheaduparrowcircle | ⥈ | | \leftrightarrowcircle | ⥇ | | \rightarrowx | ⥆ | | \leftarrowplus | -| ⥅ | | \rightarrowplus | ⥄ | | \shortrightarrowleftarrow | ⥃ | | \leftarrowshortrightarrow | ⥂ | | \rightarrowshortleftarrow | -| ⤿ | | \ccwundercurvearrow | ⤾ | | \cwundercurvearrow | ⤽ | | \curvearrowleftplus | ⤼ | | \curvearrowrightminus | -| ⤻ | | \acwunderarcarrow | ⤺ | | \acwoverarcarrow | ⤹ | | \acwleftarcarrow | ⤸ | | \cwrightarcarrow | -| ⤷ | | \rightdowncurvedarrow | ⤶ | | \leftdowncurvedarrow | ⤵ | | \downrightcurvedarrow | ⤴ | | \uprightcurvearrow | -| ⤳ | | \rightcurvedarrow | ⤲ | | \nwovnearrow | ⤱ | | \neovnwarrow | ⤰ | | \rdiagovsearrow | -| ⤯ | | \fdiagovnearrow | ⤮ | | \neovsearrow | ⤭ | | \seovnearrow | ⤬ | | \fdiagovrdiag | -| ⤫ | | \rdiagovfdiag | ⤪ | | \towa | ⤩ | | \tosa | ⤨ | | \toea | -| ⤧ | | \tona | ⤦ | | \hkswarrow | ⤥ | | \hksearrow | ⤤ | | \hknearrow | -| ⤣ | | \hknwarrow | ⤢ | | \neswarrow | ⤡ | | \nwsearrow | ⤠ | | \barrightarrowdiamond | -| ⤟ | | \diamondleftarrowbar | ⤞ | | \rightarrowdiamond | ⤝ | | \diamondleftarrow | ⤜ | | \rightdbltail | -| ⤛ | | \leftdbltail | ⤚ | | \righttail | ⤙ | | \lefttail | ⤘ | | \nVtwoheadrightarrowtail | -| ⤗ | | \nvtwoheadrightarrowtail | ⤑ | | \rightdotarrow | ⤐ | | \drbkarrow | ⤏ | | \dbkarrow | -| ⤎ | | \leftdbkarrow | ⤍ | | \rightbkarrow | ⤌ | | \leftbkarrow | ⤋ | | \Ddownarrow | -| ⤊ | | \Uuparrow | ⤉ | | \uparrowbarred | ⤈ | | \downarrowbarred | ⤇ | | \Mapsto | -| ⤆ | | \Mapsfrom | ⤅ | | \twoheadmapsto | ⤄ | | \nvLeftrightarrow | ⤃ | | \nvRightarrow | -| ⤂ | | \nvLeftarrow | ⤁ | | \nVtwoheadrightarrow | ⟿ | | \longrightsquigarrow | ⟾ | | \Longmapsto | -| ⟽ | | \Longmapsfrom | ⟻ | | \longmapsfrom | ⟴ | | \rightarrowonoplus | ⟳ | | \cwgapcirclearrow | -| ⟲ | | \acwgapcirclearrow | ⟱ | | \DDownarrow | ⟰ | | \UUparrow | ⟭ | | \Rbrbrak | -| ⟬ | | \Lbrbrak | ⟫ | | \rang | ⟥ | | \whitesquaretickright | ⟤ | | \whitesquaretickleft | -| ⟣ | | \concavediamondtickright | ⟢ | | \concavediamondtickleft | ⟡ | | \concavediamond | ⟠ | | \lozengeminus | -| ⟟ | | \cirbot | ⟞ | | \longdashv | ⟝ | | \vlongdash | ⟜ | | \multimapinv | -| ⟛ | | \dashVdash | ⟚ | | \DashVDash | ⟙ | | \bigtop | ⟘ | | \bigbot | -| ⟗ | | \fullouterjoin | ⟖ | | \rightouterjoin | ⟕ | | \leftouterjoin | ⟔ | | \pushout | -| ⟓ | | \pullback | ⟒ | | \upin | ⟑ | | \wedgedot | ⟍ | | \diagdown | -| ⟌ | | \longdivision | ⟋ | | \diagup | ⟉ | | \suphsol | ⟈ | | \bsolhsub | -| ⟇ | | \veedot | ⟄ | | \supsetcirc | ⟃ | | \subsetcirc | ⟁ | | \whiteinwhitetriangle | -| ⟀ | | \threedangle | ➛ | | \draftingarrow | ❳ | | \rbrbrak | ❲ | | \lbrbrak | -| ✽ | | \dingasterisk | ✶ | | \varstar | ✪ | | \circledstar | ✠ | | \maltese | -| ✓ | | \checkmark | ⚲ | | \neuter | ⚬ | | \mdsmwhtcircle | ⚥ | | \Hermaphrodite | -| ⚉ | | \blackcircledtwodots | ⚈ | | \blackcircledrightdot | ⚇ | | \circledtwodots | ⚆ | | \circledrightdot | -| ⚅ | | \dicevi | ⚄ | | \dicev | ⚃ | | \diceiv | ⚂ | | \diceiii | -| ⚁ | | \diceii | ⚀ | | \dicei | ♾ | | \acidfree | ♬ | | \sixteenthnote | -| ♫ | | \twonotes | ♪ | | \eighthnote | ♩ | | \quarternote | ♧ | | \varclubsuit | -| ♦ | | \vardiamondsuit | ♥ | | \varheartsuit | ♤ | | \varspadesuit | ♂ | | \male | -| ♀ | | \female | ☾ | | \leftmoon | ☽ | | \rightmoon | ☼ | | \sun | -| ☻ | | \blacksmiley | ☡ | | \danger | ☆ | | \bigwhitestar | ★ | | \bigstar | -| ◿ | | \lrtriangle | ◾ | | \mdsmblksquare | ◽ | | \mdsmwhtsquare | ◼ | | \mdblksquare | -| ◻ | | \mdwhtsquare | ◺ | | \lltriangle | ◹ | | \urtriangle | ◸ | | \ultriangle | -| ◷ | | \circleurquad | ◶ | | \circlelrquad | ◵ | | \circlellquad | ◴ | | \circleulquad | -| ◳ | | \squareurquad | ◲ | | \squarelrquad | ◱ | | \squarellquad | ◰ | | \squareulquad | -| ◮ | | \trianglerightblack | ◭ | | \triangleleftblack | ◬ | | \trianglecdot | ◫ | | \boxbar | -| ◪ | | \squarelrblack | ◩ | | \squareulblack | ◨ | | \squarerightblack | ◧ | | \squareleftblack | -| ◦ | | \smwhtcircle | ◥ | | \urblacktriangle | ◤ | | \ulblacktriangle | ◣ | | \llblacktriangle | -| ◢ | | \lrblacktriangle | ◡ | | \botsemicircle | ◠ | | \topsemicircle | ◟ | | \llarc | -| ◞ | | \lrarc | ◝ | | \urarc | ◜ | | \ularc | ◛ | | \invwhitelowerhalfcircle | -| ◚ | | \invwhiteupperhalfcircle | ◙ | | \inversewhitecircle | ◘ | | \inversebullet | ◗ | | \blackrighthalfcircle | -| ◖ | | \blacklefthalfcircle | ◕ | | \blackcircleulquadwhite | ◔ | | \circleurquadblack | ◓ | | \circletophalfblack | -| ◒ | | \circlebottomhalfblack | ◑ | | \circlerighthalfblack | ◐ | | \circlelefthalfblack | ◎ | | \bullseye | -| ◍ | | \circlevertfill | ◌ | | \dottedcircle | ◊ | | \lozenge | ◉ | | \fisheye | -| ◈ | | \blackinwhitediamond | ◅ | | \whitepointerleft | ◄ | | \blackpointerleft | ◃ | | \smalltriangleleft | -| ◂ | | \smallblacktriangleleft | ▿ | | \triangledown | ▾ | | \blacktriangledown | ▼ | | \bigblacktriangledown | -| ▻ | | \whitepointerright | ► | | \blackpointerright | ▹ | | \smalltriangleright | ▸ | | \smallblacktriangleright | -| ▵ | | \vartriangle | ▴ | | \blacktriangle | △ | | \bigtriangleup | ▲ | | \bigblacktriangleup | -| ▱ | | \parallelogram | ▰ | | \parallelogramblack | ▯ | | \vrectangle | ▮ | | \vrectangleblack | -| ▭ | | \hrectangle | ▬ | | \hrectangleblack | ▫ | | \smwhtsquare | ▪ | | \smblksquare | -| ▩ | | \squarecrossfill | ▨ | | \squareneswfill | ▧ | | \squarenwsefill | ▦ | | \squarehvfill | -| ▥ | | \squarevfill | ▤ | | \squarehfill | ▣ | | \blackinwhitesquare | ▢ | | \squoval | -| ■ | | \mdlgblksquare | ▓ | | \blockthreeqtrshaded | ▒ | | \blockhalfshaded | ░ | | \blockqtrshaded | -| ▐ | | \blockrighthalf | ▌ | | \blocklefthalf | █ | | \blockfull | ▄ | | \blocklowhalf | -| ▀ | | \blockuphalf | ┆ | | \bdtriplevdash | ␣ | | \mathvisiblespace | ␢ | | \blanksymbol | -| ⏧ | | \elinters | ⏦ | | \accurrent | ⏥ | | \fltns | ⏤ | | \strns | -| ⏣ | | \benzenr | ⏢ | | \trapezium | ⏡ | | \ubrbrak | ⏠ | | \obrbrak | -| ⏟ | | \underbrace | ⏞ | | \overbrace | ⏝ | | \underparen | ⏜ | | \overparen | -| ⏎ | | \varcarriagereturn | ⎹ | | \rvboxline | ⎸ | | \lvboxline | ⎷ | | \sqrtbottom | -| ⎶ | | \bbrktbrk | ⎵ | | \underbracket | ⎴ | | \overbracket | ⎳ | | \sumbottom | -| ⎲ | | \sumtop | ⎯ | | \harrowextender | ⎮ | | \intextender | ⎭ | | \rbracelend | -| ⎬ | | \rbracemid | ⎫ | | \rbraceuend | ⎪ | | \vbraceextender | ⎩ | | \lbracelend | -| ⎨ | | \lbracemid | ⎧ | | \lbraceuend | ⎦ | | \rbracklend | ⎥ | | \rbrackextender | -| ⎤ | | \rbrackuend | ⎣ | | \lbracklend | ⎢ | | \lbrackextender | ⎡ | | \lbrackuend | -| ⎠ | | \rparenlend | ⎟ | | \rparenextender | ⎞ | | \rparenuend | ⎝ | | \lparenlend | -| ⎜ | | \lparenextender | ⎛ | | \lparenuend | ⎔ | | \hexagon | ⍼ | | \rangledownzigzagarrow | -| ⍰ | | \APLboxquestion | ⍓ | | \APLboxupcaret | ⌽ | | \obar | ⌶ | | \topbot | -| ⌲ | | \conictaper | ⌬ | | \varhexagonlrbonds | ⌡ | | \intbottom | ⌠ | | \inttop | -| ⌟ | | \lrcorner | ⌞ | | \llcorner | ⌝ | | \urcorner | ⌜ | | \ulcorner | -| ⌙ | | \turnednot | ⌗ | | \viewdata | ⌓ | | \profsurf | ⌒ | | \profline | -| ⌐ | | \invneg | ⌅ | \barwedge | \varbarwedge | ⌂ | | \house | ⌀ | | \diameter | -| ⋿ | | \bagmember | ⋾ | | \niobar | ⋽ | | \varniobar | ⋼ | | \nis | -| ⋻ | | \varnis | ⋺ | | \nisd | ⋹ | | \isinE | ⋸ | | \isinvb | -| ⋷ | | \isinobar | ⋵ | | \isindot | ⋴ | | \isins | ⋳ | | \varisins | -| ⋲ | | \disin | ⋭ | | \ntrianglerighteq | ⋬ | | \ntrianglelefteq | ⋩ | | \succnsim | -| ⋨ | | \precedesnotsimilar | ⋧ | | \gnsim | ⋦ | | \lnsim | ⋥ | | \sqsupsetneq | -| ⋤ | | \sqsubsetneq | ⋡ | | \nsucceq | ⋠ | | \npreceq | ⋟ | | \curlyeqsucc | -| ⋞ | | \curlyeqprec | ⋝ | | \eqgtr | ⋜ | | \eqless | ⋛ | | \gtreqless | -| ⋚ | | \lesseqgtr | ⋗ | | \gtrdot | ⋖ | | \lessdot | ⋕ | | \hash | -| ⋔ | | \pitchfork | ⋓ | | \Cup | ⋒ | | \Cap | ⋑ | | \Supset | -| ⋐ | | \Subset | ⋏ | | \curlywedge | ⋎ | | \curlyvee | ⋍ | | \backsimeq | -| ⋌ | | \rightthreetimes | ⋋ | | \leftthreetimes | ⋊ | | \rtimes | ⋉ | | \ltimes | -| ⋇ | | \divideontimes | ⊿ | | \varlrtriangle | ⊽ | | \barvee | ⊼ | | \barwedge | -| ⊻ | | \veebar | ⊺ | | \intercal | ⊸ | | \multimap | ⊵ | | \trianglerighteq | -| ⊴ | | \trianglelefteq | ⊳ | | \vartriangleright | ⊲ | | \vartriangleleft | ⊱ | | \scurel | -| ⊰ | | \prurel | ⊯ | | \nVDash | ⊮ | | \nVdash | ⊭ | | \nvDash | -| ⊬ | | \nvdash | ⊫ | | \VDash | ⊪ | | \Vvdash | ⊩ | | \Vdash | -| ⊦ | | \assert | ⊡ | | \boxdot | ⊠ | | \boxtimes | ⊟ | | \boxminus | -| ⊞ | | \boxplus | ⊝ | | \circleddash | ⊜ | | \circledequal | ⊛ | | \circledast | -| ⊚ | | \circledcirc | ⊐ | | \sqsupset | ⊏ | | \sqsubset | ⊍ | | \cupdot | -| ⊌ | | \cupleftarrow | ⊋ | | \supsetneq | ⊊ | | \subsetneq | ≽ | | \succcurlyeq | -| ≼ | | \preccurlyeq | ≷ | | \gtrless | ≶ | | \lessgtr | ≵ | | \ngtrsim | -| ≴ | | \nlesssim | ≭ | | \nasymp | ≬ | | \between | ≩ | | \gneqq | -| ≨ | | \lneqq | ≣ | | \Equiv | ≟ | | \questeq | ≞ | | \measeq | -| ≝ | | \eqdef | ≜ | | \triangleq | ≚ | | \veeeq | ≘ | | \arceq | -| ≗ | | \circeq | ≖ | | \eqcirc | ≔ | | \coloneq | ≓ | | \risingdotseq | -| ≒ | | \fallingdotseq | ≏ | | \bumpeq | ≎ | | \Bumpeq | ≊ | | \approxeq | -| ∽ | | \backsim | ∹ | | \eqcolon | ∷ | | \Colon | ∵ | | \because | -| ∴ | | \therefore | ∲ | | \lcirclerightint | ∦ | | \nparallel | ∤ | | \nmid | -| ∢ | | \sphericalangle | ∡ | | \measuredangle | ∟ | | \rightangle | √ | | \sqrt | -| ∕ | | \divslash | ∔ | | \dotplus | ∎ | | \QED | ∍ | | \smallni | -| ∊ | | \smallin | ∇ | | \nabla | ∆ | | \increment | ∅ | | \varnothing | -| ∄ | | \nexists | ∁ | | \complement | ⇿ | | \leftrightarrowtriangle | ⇾ | | \rightarrowtriangle | -| ⇽ | | \leftarrowtriangle | ⇼ | | \nVleftrightarrow | ⇺ | | \nVleftarrow | ⇹ | | \nvleftrightarrow | -| ⇷ | | \nvleftarrow | ⇶ | | \rightthreearrows | ⇴ | | \circleonrightarrow | ⇪ | | \whitearrowupfrombar | -| ⇩ | | \downwhitearrow | ⇨ | | \rightwhitearrow | ⇧ | | \upwhitearrow | ⇦ | | \leftwhitearrow | -| ⇣ | | \downdasharrow | ⇡ | | \updasharrow | ⇟ | | \nHdownarrow | ⇞ | | \nHuparrow | -| ⇝ | | \rightsquigarrow | ⇜ | | \leftsquigarrow | ⇛ | | \Rrightarrow | ⇚ | | \Lleftarrow | -| ⇙ | | \Swarrow | ⇘ | | \Searrow | ⇗ | | \Nearrow | ⇖ | | \Nwarrow | -| ⇏ | | \nRightarrow | ⇎ | | \nLeftrightarrow | ⇍ | | \nLeftarrow | ⇋ | | \leftrightharpoons | -| ⇊ | | \downdownarrows | ⇉ | | \rightrightarrows | ⇈ | | \upuparrows | ⇇ | | \leftleftarrows | -| ⇆ | | \leftrightarrows | ⇄ | | \rightleftarrows | ⇃ | | \downharpoonleft | ⇂ | | \downharpoonright | -| ⇁ | | \rightharpoondown | ↿ | | \upharpoonleft | ↾ | | \upharpoonright | ↺ | | \circlearrowleft | -| ↹ | | \barleftarrowrightarrowbar | ↸ | | \barovernorthwestarrow | ↷ | | \curvearrowright | ↶ | | \curvearrowleft | -| ↵ | | \carriagereturn | ↴ | | \linefeed | ↳ | \reflectbox{\carriagereturn} | \Rdsh | ↱ | | \Rsh | -| ↰ | | \Lsh | ↮ | | \nleftrightarrow | ↭ | | \leftrightsquigarrow | ↬ | | \looparrowright | -| ↫ | | \looparrowleft | ↨ | | \updownarrowbar | ↧ | | \mapsdown | ↥ | | \mapsup | -| ↤ | | \mapsfrom | ↣ | | \rightarrowtail | ↢ | | \leftarrowtail | ↡ | | \twoheaddownarrow | -| ↠ | | \twoheadrightarrow | ↟ | | \twoheaduparrow | ↞ | | \twoheadleftarrow | ↛ | | \nrightarrow | -| ↚ | | \nleftarrow | ⅊ | | \PropertyLine | ⅅ | | \CapitalDifferentialD | ⅄ | | \Yup | -| ⅃ | | \sansLmirrored | ⅂ | | \sansLturned | ⅁ | | \Game | ℸ | | \daleth | -| ℷ | | \gimel | ℶ | | \beth | Ⅎ | | \Finv | ℩ | | \turnediota | -| ℧ | | \mho | ℛ | | \mscrR | ℒ | | \mscrL | ℏ | | \hslash | -| ℎ | | \Planckconst | ⃰ | | \asteraccent | ⃯ | | \underrightarrow | ⃮ | | \underleftarrow | -| ⃭ | | \underleftharpoondown | ⃬ | | \underrightharpoondown | ⃩ | | \widebridgeabove | ⃨ | | \threeunderdot | -| ⃧ | | \annuity | ⃤ | | \enclosetriangle | ⃡ | | \overleftrightarrow | ⃟ | | \enclosediamond | -| ⃞ | | \enclosesquare | ⃝ | | \enclosecircle | ⃜ | | \ddddot | ⃛ | | \dddot | -| ⃗ | | \vec | ⃒ | | \vertoverlay | ⁗ | | \qprime | ⁐ | | \closure | -| ⁇ | | \Question | ⁄ | | \fracslash | ⁃ | | \hyphenbullet | ⁀ | | \tieconcat | -| ‼ | | \Exclam | ‸ | | \caretinsert | ‷ | | \backtrprime | ‶ | | \backdprime | -| ‵ | | \backprime | ‴ | | \trprime | ″ | | \dprime | ‥ | | \enleadertwodots | -| ‗ | | \twolowline | ― | | \horizbar | ‐ | | \mathhyphen | ữ1 | | \arabichad | -| ữ0 | | \arabicmaj | 𝟿 | | \mttnine | 𝟾 | | \mtteight | 𝟽 | | \mttseven | -| 𝟼 | | \mttsix | 𝟻 | | \mttfive | 𝟺 | | \mttfour | 𝟹 | | \mttthree | -| 𝟸 | | \mtttwo | 𝟷 | | \mttone | 𝟶 | | \mttzero | 𝟵 | | \mbfsansnine | -| 𝟴 | | \mbfsanseight | 𝟳 | | \mbfsansseven | 𝟲 | | \mbfsanssix | 𝟱 | | \mbfsansfive | -| 𝟰 | | \mbfsansfour | 𝟯 | | \mbfsansthree | 𝟮 | | \mbfsanstwo | 𝟭 | | \mbfsansone | -| 𝟬 | | \mbfsanszero | 𝟫 | | \msansnine | 𝟪 | | \msanseight | 𝟩 | | \msansseven | -| 𝟨 | | \msanssix | 𝟧 | | \msansfive | 𝟦 | | \msansfour | 𝟥 | | \msansthree | -| 𝟤 | | \msanstwo | 𝟣 | | \msansone | 𝟢 | | \msanszero | 𝟡 | | \Bbbnine | -| 𝟠 | | \Bbbeight | 𝟟 | | \Bbbseven | 𝟞 | | \Bbbsix | 𝟝 | | \Bbbfive | -| 𝟜 | | \Bbbfour | 𝟛 | | \Bbbthree | 𝟚 | | \Bbbtwo | 𝟙 | | \Bbbone | -| 𝟘 | | \Bbbzero | 𝟗 | | \mbfnine | 𝟖 | | \mbfeight | 𝟕 | | \mbfseven | -| 𝟔 | | \mbfsix | 𝟓 | | \mbffive | 𝟒 | | \mbffour | 𝟑 | | \mbfthree | -| 𝟐 | | \mbftwo | 𝟏 | | \mbfone | 𝟎 | | \mbfzero | 𝟋 | | \mbfdigamma | -| 𝟊 | | \mbfDigamma | 𝟉 | | \mbfitsansvarpi | 𝟈 | | \mbfitsansvarrho | 𝟇 | | \mbfitsansphi | -| 𝟆 | | \mbfitsansvarkappa | 𝟅 | | \mbfitsansvartheta | 𝟄 | | \mbfitsansepsilon | 𝟃 | | \mbfitsanspartial | -| 𝟂 | | \mbfitsansomega | 𝟁 | | \mbfitsanspsi | 𝟀 | | \mbfitsanschi | 𝞿 | | \mbfitsansvarphi | -| 𝞾 | | \mbfitsansupsilon | 𝞽 | | \mbfitsanstau | 𝞼 | | \mbfitsanssigma | 𝞻 | | \mbfitsansvarsigma | -| 𝞺 | | \mbfitsansrho | 𝞹 | | \mbfitsanspi | 𝞸 | | \mbfitsansomicron | 𝞷 | | \mbfitsansxi | -| 𝞶 | | \mbfitsansnu | 𝞵 | | \mbfitsansmu | 𝞴 | | \mbfitsanslambda | 𝞳 | | \mbfitsanskappa | -| 𝞲 | | \mbfitsansiota | 𝞱 | | \mbfitsanstheta | 𝞰 | | \mbfitsanseta | 𝞯 | | \mbfitsanszeta | -| 𝞮 | | \mbfitsansvarepsilon | 𝞭 | | \mbfitsansdelta | 𝞬 | | \mbfitsansgamma | 𝞫 | | \mbfitsansbeta | -| 𝞪 | | \mbfitsansalpha | 𝞩 | | \mbfitsansnabla | 𝞨 | | \mbfitsansOmega | 𝞧 | | \mbfitsansPsi | -| 𝞦 | | \mbfitsansChi | 𝞥 | | \mbfitsansPhi | 𝞤 | | \mbfitsansUpsilon | 𝞣 | | \mbfitsansTau | -| 𝞢 | | \mbfitsansSigma | 𝞡 | | \mbfitsansvarTheta | 𝞠 | | \mbfitsansRho | 𝞟 | | \mbfitsansPi | -| 𝞞 | | \mbfitsansOmicron | 𝞝 | | \mbfitsansXi | 𝞜 | | \mbfitsansNu | 𝞛 | | \mbfitsansMu | -| 𝞚 | | \mbfitsansLambda | 𝞙 | | \mbfitsansKappa | 𝞘 | | \mbfitsansIota | 𝞗 | | \mbfitsansTheta | -| 𝞖 | | \mbfitsansEta | 𝞕 | | \mbfitsansZeta | 𝞔 | | \mbfitsansEpsilon | 𝞓 | | \mbfitsansDelta | -| 𝞒 | | \mbfitsansGamma | 𝞑 | | \mbfitsansBeta | 𝞐 | | \mbfitsansAlpha | 𝞏 | | \mbfsansvarpi | -| 𝞎 | | \mbfsansvarrho | 𝞍 | | \mbfsansphi | 𝞌 | | \mbfsansvarkappa | 𝞋 | | \mbfsansvartheta | -| 𝞊 | | \mbfsansepsilon | 𝞉 | | \mbfsanspartial | 𝞈 | | \mbfsansomega | 𝞇 | | \mbfsanspsi | -| 𝞆 | | \mbfsanschi | 𝞅 | | \mbfsansvarphi | 𝞄 | | \mbfsansupsilon | 𝞃 | | \mbfsanstau | -| 𝞂 | | \mbfsanssigma | 𝞁 | | \mbfsansvarsigma | 𝞀 | | \mbfsansrho | 𝝿 | | \mbfsanspi | -| 𝝾 | | \mbfsansomicron | 𝝽 | | \mbfsansxi | 𝝼 | | \mbfsansnu | 𝝻 | | \mbfsansmu | -| 𝝺 | | \mbfsanslambda | 𝝹 | | \mbfsanskappa | 𝝸 | | \mbfsansiota | 𝝷 | | \mbfsanstheta | -| 𝝶 | | \mbfsanseta | 𝝵 | | \mbfsanszeta | 𝝴 | | \mbfsansvarepsilon | 𝝳 | | \mbfsansdelta | -| 𝝲 | | \mbfsansgamma | 𝝱 | | \mbfsansbeta | 𝝰 | | \mbfsansalpha | 𝝯 | | \mbfsansnabla | -| 𝝮 | | \mbfsansOmega | 𝝭 | | \mbfsansPsi | 𝝬 | | \mbfsansChi | 𝝫 | | \mbfsansPhi | -| 𝝪 | | \mbfsansUpsilon | 𝝩 | | \mbfsansTau | 𝝨 | | \mbfsansSigma | 𝝧 | | \mbfsansvarTheta | -| 𝝦 | | \mbfsansRho | 𝝥 | | \mbfsansPi | 𝝤 | | \mbfsansOmicron | 𝝣 | | \mbfsansXi | -| 𝝢 | | \mbfsansNu | 𝝡 | | \mbfsansMu | 𝝠 | | \mbfsansLambda | 𝝟 | | \mbfsansKappa | -| 𝝞 | | \mbfsansIota | 𝝝 | | \mbfsansTheta | 𝝜 | | \mbfsansEta | 𝝛 | | \mbfsansZeta | -| 𝝚 | | \mbfsansEpsilon | 𝝙 | | \mbfsansDelta | 𝝘 | | \mbfsansGamma | 𝝗 | | \mbfsansBeta | -| 𝝖 | | \mbfsansAlpha | 𝝕 | | \mbfitvarpi | 𝝔 | | \mbfitvarrho | 𝝓 | | \mbfitphi | -| 𝝒 | | \mbfitvarkappa | 𝝑 | | \mbfitvartheta | 𝝐 | | \mbfitepsilon | 𝝏 | | \mbfitpartial | -| 𝝎 | | \mbfitomega | 𝝍 | | \mbfitpsi | 𝝌 | | \mbfitchi | 𝝋 | | \mbfitvarphi | -| 𝝊 | | \mbfitupsilon | 𝝉 | | \mbfittau | 𝝈 | | \mbfitsigma | 𝝇 | | \mbfitvarsigma | -| 𝝆 | | \mbfitrho | 𝝅 | | \mbfitpi | 𝝄 | | \mbfitomicron | 𝝃 | | \mbfitxi | -| 𝝂 | | \mbfitnu | 𝝁 | | \mbfitmu | 𝝀 | | \mbfitlambda | 𝜿 | | \mbfitkappa | -| 𝜾 | | \mbfitiota | 𝜽 | | \mbfittheta | 𝜼 | | \mbfiteta | 𝜻 | | \mbfitzeta | -| 𝜺 | | \mbfitvarepsilon | 𝜹 | | \mbfitdelta | 𝜸 | | \mbfitgamma | 𝜷 | | \mbfitbeta | -| 𝜶 | | \mbfitalpha | 𝜵 | | \mbfitnabla | 𝜴 | | \mbfitOmega | 𝜳 | | \mbfitPsi | -| 𝜲 | | \mbfitChi | 𝜱 | | \mbfitPhi | 𝜰 | | \mbfitUpsilon | 𝜯 | | \mbfitTau | -| 𝜮 | | \mbfitSigma | 𝜭 | | \mbfitvarTheta | 𝜬 | | \mbfitRho | 𝜫 | | \mbfitPi | -| 𝜪 | | \mbfitOmicron | 𝜩 | | \mbfitXi | 𝜨 | | \mbfitNu | 𝜧 | | \mbfitMu | -| 𝜦 | | \mbfitLambda | 𝜥 | | \mbfitKappa | 𝜤 | | \mbfitIota | 𝜣 | | \mbfitTheta | -| 𝜢 | | \mbfitEta | 𝜡 | | \mbfitZeta | 𝜠 | | \mbfitEpsilon | 𝜟 | | \mbfitDelta | -| 𝜞 | | \mbfitGamma | 𝜝 | | \mbfitBeta | 𝜜 | | \mbfitAlpha | 𝜛 | | \mitvarpi | -| 𝜚 | | \mitvarrho | 𝜙 | | \mitphi | 𝜘 | | \mitvarkappa | 𝜗 | | \mitvartheta | -| 𝜖 | | \mitepsilon | 𝜕 | | \mitpartial | 𝜔 | | \mitomega | 𝜓 | | \mitpsi | -| 𝜒 | | \mitchi | 𝜑 | | \mitvarphi | 𝜐 | | \mitupsilon | 𝜏 | | \mittau | -| 𝜎 | | \mitsigma | 𝜍 | | \mitvarsigma | 𝜌 | | \mitrho | 𝜋 | | \mitpi | -| 𝜊 | | \mitomicron | 𝜉 | | \mitxi | 𝜈 | | \mitnu | 𝜇 | | \mitmu | -| 𝜆 | | \mitlambda | 𝜅 | | \mitkappa | 𝜄 | | \mitiota | 𝜃 | | \mittheta | -| 𝜂 | | \miteta | 𝜁 | | \mitzeta | 𝜀 | | \mitvarepsilon | 𝛿 | | \mitdelta | -| 𝛾 | | \mitgamma | 𝛽 | | \mitbeta | 𝛼 | | \mitalpha | 𝛻 | | \mitnabla | -| 𝛺 | | \mitOmega | 𝛹 | | \mitPsi | 𝛸 | | \mitChi | 𝛷 | | \mitPhi | -| 𝛶 | | \mitUpsilon | 𝛵 | | \mitTau | 𝛴 | | \mitSigma | 𝛳 | | \mitvarTheta | -| 𝛲 | | \mitRho | 𝛱 | | \mitPi | 𝛰 | | \mitOmicron | 𝛯 | | \mitXi | -| 𝛮 | | \mitNu | 𝛭 | | \mitMu | 𝛬 | | \mitLambda | 𝛫 | | \mitKappa | -| 𝛪 | | \mitIota | 𝛩 | | \mitTheta | 𝛨 | | \mitEta | 𝛧 | | \mitZeta | -| 𝛦 | | \mitEpsilon | 𝛥 | | \mitDelta | 𝛤 | | \mitGamma | 𝛣 | | \mitBeta | -| 𝛢 | | \mitAlpha | 𝛡 | | \mbfvarpi | 𝛠 | | \mbfvarrho | 𝛟 | | \mbfphi | -| 𝛞 | | \mbfvarkappa | 𝛝 | | \mbfvartheta | 𝛜 | | \mbfepsilon | 𝛛 | | \mbfpartial | -| 𝛚 | | \mbfomega | 𝛙 | | \mbfpsi | 𝛘 | | \mbfchi | 𝛗 | | \mbfvarphi | -| 𝛖 | | \mbfupsilon | 𝛕 | | \mbftau | 𝛔 | | \mbfsigma | 𝛓 | | \mbfvarsigma | -| 𝛒 | | \mbfrho | 𝛑 | | \mbfpi | 𝛐 | | \mbfomicron | 𝛏 | | \mbfxi | -| 𝛎 | | \mbfnu | 𝛍 | | \mbfmu | 𝛌 | | \mbflambda | 𝛋 | | \mbfkappa | -| 𝛊 | | \mbfiota | 𝛉 | | \mbftheta | 𝛈 | | \mbfeta | 𝛇 | | \mbfzeta | -| 𝛆 | | \mbfvarepsilon | 𝛅 | | \mbfdelta | 𝛄 | | \mbfgamma | 𝛃 | | \mbfbeta | -| 𝛂 | | \mbfalpha | 𝛁 | | \mbfnabla | 𝛀 | | \mbfOmega | 𝚿 | | \mbfPsi | -| 𝚾 | | \mbfChi | 𝚽 | | \mbfPhi | 𝚼 | | \mbfUpsilon | 𝚻 | | \mbfTau | -| 𝚺 | | \mbfSigma | 𝚹 | | \mbfvarTheta | 𝚸 | | \mbfRho | 𝚷 | | \mbfPi | -| 𝚶 | | \mbfOmicron | 𝚵 | | \mbfXi | 𝚴 | | \mbfNu | 𝚳 | | \mbfMu | -| 𝚲 | | \mbfLambda | 𝚱 | | \mbfKappa | 𝚰 | | \mbfIota | 𝚯 | | \mbfTheta | -| 𝚮 | | \mbfEta | 𝚭 | | \mbfZeta | 𝚬 | | \mbfEpsilon | 𝚫 | | \mbfDelta | -| 𝚪 | | \mbfGamma | 𝚩 | | \mbfBeta | 𝚨 | | \mbfAlpha | 𝚥 | | \jmath | -| 𝚤 | | \imath | 𝚣 | | \mttz | 𝚢 | | \mtty | 𝚡 | | \mttx | -| 𝚠 | | \mttw | 𝚟 | | \mttv | 𝚞 | | \mttu | 𝚝 | | \mttt | -| 𝚜 | | \mtts | 𝚛 | | \mttr | 𝚚 | | \mttq | 𝚙 | | \mttp | -| 𝚘 | | \mtto | 𝚗 | | \mttn | 𝚖 | | \mttm | 𝚕 | | \mttl | -| 𝚔 | | \mttk | 𝚓 | | \mttj | 𝚒 | | \mtti | 𝚑 | | \mtth | -| 𝚐 | | \mttg | 𝚏 | | \mttf | 𝚎 | | \mtte | 𝚍 | | \mttd | -| 𝚌 | | \mttc | 𝚋 | | \mttb | 𝚊 | | \mtta | 𝚉 | | \mttZ | -| 𝚈 | | \mttY | 𝚇 | | \mttX | 𝚆 | | \mttW | 𝚅 | | \mttV | -| 𝚄 | | \mttU | 𝚃 | | \mttT | 𝚂 | | \mttS | 𝚁 | | \mttR | -| 𝚀 | | \mttQ | 𝙿 | | \mttP | 𝙾 | | \mttO | 𝙽 | | \mttN | -| 𝙼 | | \mttM | 𝙻 | | \mttL | 𝙺 | | \mttK | 𝙹 | | \mttJ | -| 𝙸 | | \mttI | 𝙷 | | \mttH | 𝙶 | | \mttG | 𝙵 | | \mttF | -| 𝙴 | | \mttE | 𝙳 | | \mttD | 𝙲 | | \mttC | 𝙱 | | \mttB | -| 𝙰 | | \mttA | 𝙯 | | \mbfitsansz | 𝙮 | | \mbfitsansy | 𝙭 | | \mbfitsansx | -| 𝙬 | | \mbfitsansw | 𝙫 | | \mbfitsansv | 𝙪 | | \mbfitsansu | 𝙩 | | \mbfitsanst | -| 𝙨 | | \mbfitsanss | 𝙧 | | \mbfitsansr | 𝙦 | | \mbfitsansq | 𝙥 | | \mbfitsansp | -| 𝙤 | | \mbfitsanso | 𝙣 | | \mbfitsansn | 𝙢 | | \mbfitsansm | 𝙡 | | \mbfitsansl | -| 𝙠 | | \mbfitsansk | 𝙟 | | \mbfitsansj | 𝙞 | | \mbfitsansi | 𝙝 | | \mbfitsansh | -| 𝙜 | | \mbfitsansg | 𝙛 | | \mbfitsansf | 𝙚 | | \mbfitsanse | 𝙙 | | \mbfitsansd | -| 𝙘 | | \mbfitsansc | 𝙗 | | \mbfitsansb | 𝙖 | | \mbfitsansa | 𝙕 | | \mbfitsansZ | -| 𝙔 | | \mbfitsansY | 𝙓 | | \mbfitsansX | 𝙒 | | \mbfitsansW | 𝙑 | | \mbfitsansV | -| 𝙐 | | \mbfitsansU | 𝙏 | | \mbfitsansT | 𝙎 | | \mbfitsansS | 𝙍 | | \mbfitsansR | -| 𝙌 | | \mbfitsansQ | 𝙋 | | \mbfitsansP | 𝙊 | | \mbfitsansO | 𝙉 | | \mbfitsansN | -| 𝙈 | | \mbfitsansM | 𝙇 | | \mbfitsansL | 𝙆 | | \mbfitsansK | 𝙅 | | \mbfitsansJ | -| 𝙄 | | \mbfitsansI | 𝙃 | | \mbfitsansH | 𝙂 | | \mbfitsansG | 𝙁 | | \mbfitsansF | -| 𝙀 | | \mbfitsansE | 𝘿 | | \mbfitsansD | 𝘾 | | \mbfitsansC | 𝘽 | | \mbfitsansB | -| 𝘼 | | \mbfitsansA | 𝘻 | | \mitsansz | 𝘺 | | \mitsansy | 𝘹 | | \mitsansx | -| 𝘸 | | \mitsansw | 𝘷 | | \mitsansv | 𝘶 | | \mitsansu | 𝘵 | | \mitsanst | -| 𝘴 | | \mitsanss | 𝘳 | | \mitsansr | 𝘲 | | \mitsansq | 𝘱 | | \mitsansp | -| 𝘰 | | \mitsanso | 𝘯 | | \mitsansn | 𝘮 | | \mitsansm | 𝘭 | | \mitsansl | -| 𝘬 | | \mitsansk | 𝘫 | | \mitsansj | 𝘪 | | \mitsansi | 𝘩 | | \mitsansh | -| 𝘨 | | \mitsansg | 𝘧 | | \mitsansf | 𝘦 | | \mitsanse | 𝘥 | | \mitsansd | -| 𝘤 | | \mitsansc | 𝘣 | | \mitsansb | 𝘢 | | \mitsansa | 𝘡 | | \mitsansZ | -| 𝘠 | | \mitsansY | 𝘟 | | \mitsansX | 𝘞 | | \mitsansW | 𝘝 | | \mitsansV | -| 𝘜 | | \mitsansU | 𝘛 | | \mitsansT | 𝘚 | | \mitsansS | 𝘙 | | \mitsansR | -| 𝘘 | | \mitsansQ | 𝘗 | | \mitsansP | 𝘖 | | \mitsansO | 𝘕 | | \mitsansN | -| 𝘔 | | \mitsansM | 𝘓 | | \mitsansL | 𝘒 | | \mitsansK | 𝘑 | | \mitsansJ | -| 𝘐 | | \mitsansI | 𝘏 | | \mitsansH | 𝘎 | | \mitsansG | 𝘍 | | \mitsansF | -| 𝘌 | | \mitsansE | 𝘋 | | \mitsansD | 𝘊 | | \mitsansC | 𝘉 | | \mitsansB | -| 𝘈 | | \mitsansA | 𝘇 | | \mbfsansz | 𝘆 | | \mbfsansy | 𝘅 | | \mbfsansx | -| 𝘄 | | \mbfsansw | 𝘃 | | \mbfsansv | 𝘂 | | \mbfsansu | 𝘁 | | \mbfsanst | -| 𝘀 | | \mbfsanss | 𝗿 | | \mbfsansr | 𝗾 | | \mbfsansq | 𝗽 | | \mbfsansp | -| 𝗼 | | \mbfsanso | 𝗻 | | \mbfsansn | 𝗺 | | \mbfsansm | 𝗹 | | \mbfsansl | -| 𝗸 | | \mbfsansk | 𝗷 | | \mbfsansj | 𝗶 | | \mbfsansi | 𝗵 | | \mbfsansh | -| 𝗴 | | \mbfsansg | 𝗳 | | \mbfsansf | 𝗲 | | \mbfsanse | 𝗱 | | \mbfsansd | -| 𝗰 | | \mbfsansc | 𝗯 | | \mbfsansb | 𝗮 | | \mbfsansa | 𝗭 | | \mbfsansZ | -| 𝗬 | | \mbfsansY | 𝗫 | | \mbfsansX | 𝗪 | | \mbfsansW | 𝗩 | | \mbfsansV | -| 𝗨 | | \mbfsansU | 𝗧 | | \mbfsansT | 𝗦 | | \mbfsansS | 𝗥 | | \mbfsansR | -| 𝗤 | | \mbfsansQ | 𝗣 | | \mbfsansP | 𝗢 | | \mbfsansO | 𝗡 | | \mbfsansN | -| 𝗠 | | \mbfsansM | 𝗟 | | \mbfsansL | 𝗞 | | \mbfsansK | 𝗝 | | \mbfsansJ | -| 𝗜 | | \mbfsansI | 𝗛 | | \mbfsansH | 𝗚 | | \mbfsansG | 𝗙 | | \mbfsansF | -| 𝗘 | | \mbfsansE | 𝗗 | | \mbfsansD | 𝗖 | | \mbfsansC | 𝗕 | | \mbfsansB | -| 𝗔 | | \mbfsansA | 𝗓 | | \msansz | 𝗒 | | \msansy | 𝗑 | | \msansx | -| 𝗐 | | \msansw | 𝗏 | | \msansv | 𝗎 | | \msansu | 𝗍 | | \msanst | -| 𝗌 | | \msanss | 𝗋 | | \msansr | 𝗊 | | \msansq | 𝗉 | | \msansp | -| 𝗈 | | \msanso | 𝗇 | | \msansn | 𝗆 | | \msansm | 𝗅 | | \msansl | -| 𝗄 | | \msansk | 𝗃 | | \msansj | 𝗂 | | \msansi | 𝗁 | | \msansh | -| 𝗀 | | \msansg | 𝖿 | | \msansf | 𝖾 | | \msanse | 𝖽 | | \msansd | -| 𝖼 | | \msansc | 𝖻 | | \msansb | 𝖺 | | \msansa | 𝖹 | | \msansZ | -| 𝖸 | | \msansY | 𝖷 | | \msansX | 𝖶 | | \msansW | 𝖵 | | \msansV | -| 𝖴 | | \msansU | 𝖳 | | \msansT | 𝖲 | | \msansS | 𝖱 | | \msansR | -| 𝖰 | | \msansQ | 𝖯 | | \msansP | 𝖮 | | \msansO | 𝖭 | | \msansN | -| 𝖬 | | \msansM | 𝖫 | | \msansL | 𝖪 | | \msansK | 𝖩 | | \msansJ | -| 𝖨 | | \msansI | 𝖧 | | \msansH | 𝖦 | | \msansG | 𝖥 | | \msansF | -| 𝖤 | | \msansE | 𝖣 | | \msansD | 𝖢 | | \msansC | 𝖡 | | \msansB | -| 𝖠 | | \msansA | 𝖟 | | \mbffrakz | 𝖞 | | \mbffraky | 𝖝 | | \mbffrakx | -| 𝖜 | | \mbffrakw | 𝖛 | | \mbffrakv | 𝖚 | | \mbffraku | 𝖙 | | \mbffrakt | -| 𝖘 | | \mbffraks | 𝖗 | | \mbffrakr | 𝖖 | | \mbffrakq | 𝖕 | | \mbffrakp | -| 𝖔 | | \mbffrako | 𝖓 | | \mbffrakn | 𝖒 | | \mbffrakm | 𝖑 | | \mbffrakl | -| 𝖐 | | \mbffrakk | 𝖏 | | \mbffrakj | 𝖎 | | \mbffraki | 𝖍 | | \mbffrakh | -| 𝖌 | | \mbffrakg | 𝖋 | | \mbffrakf | 𝖊 | | \mbffrake | 𝖉 | | \mbffrakd | -| 𝖈 | | \mbffrakc | 𝖇 | | \mbffrakb | 𝖆 | | \mbffraka | 𝖅 | | \mbffrakZ | -| 𝖄 | | \mbffrakY | 𝖃 | | \mbffrakX | 𝖂 | | \mbffrakW | 𝖁 | | \mbffrakV | -| 𝖀 | | \mbffrakU | 𝕿 | | \mbffrakT | 𝕾 | | \mbffrakS | 𝕽 | | \mbffrakR | -| 𝕼 | | \mbffrakQ | 𝕻 | | \mbffrakP | 𝕺 | | \mbffrakO | 𝕹 | | \mbffrakN | -| 𝕸 | | \mbffrakM | 𝕷 | | \mbffrakL | 𝕶 | | \mbffrakK | 𝕵 | | \mbffrakJ | -| 𝕴 | | \mbffrakI | 𝕳 | | \mbffrakH | 𝕲 | | \mbffrakG | 𝕱 | | \mbffrakF | -| 𝕰 | | \mbffrakE | 𝕯 | | \mbffrakD | 𝕮 | | \mbffrakC | 𝕭 | | \mbffrakB | -| 𝕬 | | \mbffrakA | 𝕫 | | \Bbbz | 𝕪 | | \Bbby | 𝕩 | | \Bbbx | -| 𝕨 | | \Bbbw | 𝕧 | | \Bbbv | 𝕦 | | \Bbbu | 𝕥 | | \Bbbt | -| 𝕤 | | \Bbbs | 𝕣 | | \Bbbr | 𝕢 | | \Bbbq | 𝕡 | | \Bbbp | -| 𝕠 | | \Bbbo | 𝕟 | | \Bbbn | 𝕞 | | \Bbbm | 𝕝 | | \Bbbl | -| 𝕜 | | \Bbbk | 𝕛 | | \Bbbj | 𝕚 | | \Bbbi | 𝕙 | | \Bbbh | -| 𝕘 | | \Bbbg | 𝕗 | | \Bbbf | 𝕖 | | \Bbbe | 𝕕 | | \Bbbd | -| 𝕔 | | \Bbbc | 𝕓 | | \Bbbb | 𝕒 | | \Bbba | 𝕐 | | \BbbY | -| 𝕏 | | \BbbX | 𝕎 | | \BbbW | 𝕍 | | \BbbV | 𝕌 | | \BbbU | -| 𝕋 | | \BbbT | 𝕊 | | \BbbS | 𝕆 | | \BbbO | 𝕄 | | \BbbM | -| 𝕃 | | \BbbL | 𝕂 | | \BbbK | 𝕁 | | \BbbJ | 𝕀 | | \BbbI | -| 𝔾 | | \BbbG | 𝔽 | | \BbbF | 𝔼 | | \BbbE | 𝔻 | | \BbbD | -| 𝔹 | | \BbbB | 𝔸 | | \BbbA | 𝔷 | | \mfrakz | 𝔶 | | \mfraky | -| 𝔵 | | \mfrakx | 𝔴 | | \mfrakw | 𝔳 | | \mfrakv | 𝔲 | | \mfraku | -| 𝔱 | | \mfrakt | 𝔰 | | \mfraks | 𝔯 | | \mfrakr | 𝔮 | | \mfrakq | -| 𝔭 | | \mfrakp | 𝔬 | | \mfrako | 𝔫 | | \mfrakn | 𝔪 | | \mfrakm | -| 𝔩 | | \mfrakl | 𝔨 | | \mfrakk | 𝔧 | | \mfrakj | 𝔦 | | \mfraki | -| 𝔥 | | \mfrakh | 𝔤 | | \mfrakg | 𝔣 | | \mfrakf | 𝔢 | | \mfrake | -| 𝔡 | | \mfrakd | 𝔠 | | \mfrakc | 𝔟 | | \mfrakb | 𝔞 | | \mfraka | -| 𝔜 | | \mfrakY | 𝔛 | | \mfrakX | 𝔚 | | \mfrakW | 𝔙 | | \mfrakV | -| 𝔘 | | \mfrakU | 𝔗 | | \mfrakT | 𝔖 | | \mfrakS | 𝔔 | | \mfrakQ | -| 𝔓 | | \mfrakP | 𝔒 | | \mfrakO | 𝔑 | | \mfrakN | 𝔐 | | \mfrakM | -| 𝔏 | | \mfrakL | 𝔎 | | \mfrakK | 𝔍 | | \mfrakJ | 𝔊 | | \mfrakG | -| 𝔉 | | \mfrakF | 𝔈 | | \mfrakE | 𝔇 | | \mfrakD | 𝔅 | | \mfrakB | -| 𝔄 | | \mfrakA | 𝔃 | | \mbfscrz | 𝔂 | | \mbfscry | 𝔁 | | \mbfscrx | -| 𝔀 | | \mbfscrw | 𝓿 | | \mbfscrv | 𝓾 | | \mbfscru | 𝓽 | | \mbfscrt | -| 𝓼 | | \mbfscrs | 𝓻 | | \mbfscrr | 𝓺 | | \mbfscrq | 𝓹 | | \mbfscrp | -| 𝓸 | | \mbfscro | 𝓷 | | \mbfscrn | 𝓶 | | \mbfscrm | 𝓵 | | \mbfscrl | -| 𝓴 | | \mbfscrk | 𝓳 | | \mbfscrj | 𝓲 | | \mbfscri | 𝓱 | | \mbfscrh | -| 𝓰 | | \mbfscrg | 𝓯 | | \mbfscrf | 𝓮 | | \mbfscre | 𝓭 | | \mbfscrd | -| 𝓬 | | \mbfscrc | 𝓫 | | \mbfscrb | 𝓪 | | \mbfscra | 𝓩 | | \mbfscrZ | -| 𝓨 | | \mbfscrY | 𝓧 | | \mbfscrX | 𝓦 | | \mbfscrW | 𝓥 | | \mbfscrV | -| 𝓤 | | \mbfscrU | 𝓣 | | \mbfscrT | 𝓢 | | \mbfscrS | 𝓡 | | \mbfscrR | -| 𝓠 | | \mbfscrQ | 𝓟 | | \mbfscrP | 𝓞 | | \mbfscrO | 𝓝 | | \mbfscrN | -| 𝓜 | | \mbfscrM | 𝓛 | | \mbfscrL | 𝓚 | | \mbfscrK | 𝓙 | | \mbfscrJ | -| 𝓘 | | \mbfscrI | 𝓗 | | \mbfscrH | 𝓖 | | \mbfscrG | 𝓕 | | \mbfscrF | -| 𝓔 | | \mbfscrE | 𝓓 | | \mbfscrD | 𝓒 | | \mbfscrC | 𝓑 | | \mbfscrB | -| 𝓐 | | \mbfscrA | 𝓏 | | \mscrz | 𝓎 | | \mscry | 𝓍 | | \mscrx | -| 𝓌 | | \mscrw | 𝓋 | | \mscrv | 𝓊 | | \mscru | 𝓉 | | \mscrt | -| 𝓈 | | \mscrs | 𝓇 | | \mscrr | 𝓆 | | \mscrq | 𝓅 | | \mscrp | -| 𝓃 | | \mscrn | 𝓂 | | \mscrm | 𝓁 | | \mscrl | 𝓀 | | \mscrk | -| 𝒿 | | \mscrj | 𝒾 | | \mscri | 𝒽 | | \mscrh | 𝒻 | | \mscrf | -| 𝒹 | | \mscrd | 𝒸 | | \mscrc | 𝒷 | | \mscrb | 𝒶 | | \mscra | -| 𝒵 | | \mscrZ | 𝒴 | | \mscrY | 𝒳 | | \mscrX | 𝒲 | | \mscrW | -| 𝒱 | | \mscrV | 𝒰 | | \mscrU | 𝒯 | | \mscrT | 𝒮 | | \mscrS | -| 𝒬 | | \mscrQ | 𝒫 | | \mscrP | 𝒪 | | \mscrO | 𝒩 | | \mscrN | -| 𝒦 | | \mscrK | 𝒥 | | \mscrJ | 𝒢 | | \mscrG | 𝒟 | | \mscrD | -| 𝒞 | | \mscrC | 𝒜 | | \mscrA | 𝒛 | | \mbfitz | 𝒚 | | \mbfity | -| 𝒙 | | \mbfitx | 𝒘 | | \mbfitw | 𝒗 | | \mbfitv | 𝒖 | | \mbfitu | -| 𝒕 | | \mbfitt | 𝒔 | | \mbfits | 𝒓 | | \mbfitr | 𝒒 | | \mbfitq | -| 𝒑 | | \mbfitp | 𝒐 | | \mbfito | 𝒏 | | \mbfitn | 𝒎 | | \mbfitm | -| 𝒍 | | \mbfitl | 𝒌 | | \mbfitk | 𝒋 | | \mbfitj | 𝒊 | | \mbfiti | -| 𝒉 | | \mbfith | 𝒈 | | \mbfitg | 𝒇 | | \mbfitf | 𝒆 | | \mbfite | -| 𝒅 | | \mbfitd | 𝒄 | | \mbfitc | 𝒃 | | \mbfitb | 𝒂 | | \mbfita | -| 𝒁 | | \mbfitZ | 𝒀 | | \mbfitY | 𝑿 | | \mbfitX | 𝑾 | | \mbfitW | -| 𝑽 | | \mbfitV | 𝑼 | | \mbfitU | 𝑻 | | \mbfitT | 𝑺 | | \mbfitS | -| 𝑹 | | \mbfitR | 𝑸 | | \mbfitQ | 𝑷 | | \mbfitP | 𝑶 | | \mbfitO | -| 𝑵 | | \mbfitN | 𝑴 | | \mbfitM | 𝑳 | | \mbfitL | 𝑲 | | \mbfitK | -| 𝑱 | | \mbfitJ | 𝑰 | | \mbfitI | 𝑯 | | \mbfitH | 𝑮 | | \mbfitG | -| 𝑭 | | \mbfitF | 𝑬 | | \mbfitE | 𝑫 | | \mbfitD | 𝑪 | | \mbfitC | -| 𝑩 | | \mbfitB | 𝑨 | | \mbfitA | 𝑧 | | \mitz | 𝑦 | | \mity | -| 𝑥 | | \mitx | 𝑤 | | \mitw | 𝑣 | | \mitv | 𝑢 | | \mitu | -| 𝑡 | | \mitt | 𝑠 | | \mits | 𝑟 | | \mitr | 𝑞 | | \mitq | -| 𝑝 | | \mitp | 𝑜 | | \mito | 𝑛 | | \mitn | 𝑚 | | \mitm | -| 𝑙 | | \mitl | 𝑘 | | \mitk | 𝑗 | | \mitj | 𝑖 | | \miti | -| 𝑔 | | \mitg | 𝑓 | | \mitf | 𝑒 | | \mite | 𝑑 | | \mitd | -| 𝑐 | | \mitc | 𝑏 | | \mitb | 𝑎 | | \mita | 𝑍 | | \mitZ | -| 𝑌 | | \mitY | 𝑋 | | \mitX | 𝑊 | | \mitW | 𝑉 | | \mitV | -| 𝑈 | | \mitU | 𝑇 | | \mitT | 𝑆 | | \mitS | 𝑅 | | \mitR | -| 𝑄 | | \mitQ | 𝑃 | | \mitP | 𝑂 | | \mitO | 𝑁 | | \mitN | -| 𝑀 | | \mitM | 𝐿 | | \mitL | 𝐾 | | \mitK | 𝐽 | | \mitJ | -| 𝐼 | | \mitI | 𝐻 | | \mitH | 𝐺 | | \mitG | 𝐹 | | \mitF | -| 𝐸 | | \mitE | 𝐷 | | \mitD | 𝐶 | | \mitC | 𝐵 | | \mitB | -| 𝐴 | | \mitA | 𝐳 | | \mbfz | 𝐲 | | \mbfy | 𝐱 | | \mbfx | -| 𝐰 | | \mbfw | 𝐯 | | \mbfv | 𝐮 | | \mbfu | 𝐭 | | \mbft | -| 𝐬 | | \mbfs | 𝐫 | | \mbfr | 𝐪 | | \mbfq | 𝐩 | | \mbfp | -| 𝐨 | | \mbfo | 𝐧 | | \mbfn | 𝐦 | | \mbfm | 𝐥 | | \mbfl | -| 𝐤 | | \mbfk | 𝐣 | | \mbfj | 𝐢 | | \mbfi | 𝐡 | | \mbfh | -| 𝐠 | | \mbfg | 𝐟 | | \mbff | 𝐞 | | \mbfe | 𝐝 | | \mbfd | -| 𝐜 | | \mbfc | 𝐛 | | \mbfb | 𝐚 | | \mbfa | 𝐙 | | \mbfZ | -| 𝐘 | | \mbfY | 𝐗 | | \mbfX | 𝐖 | | \mbfW | 𝐕 | | \mbfV | -| 𝐔 | | \mbfU | 𝐓 | | \mbfT | 𝐒 | | \mbfS | 𝐑 | | \mbfR | -| 𝐐 | | \mbfQ | 𝐏 | | \mbfP | 𝐎 | | \mbfO | 𝐍 | | \mbfN | -| 𝐌 | | \mbfM | 𝐋 | | \mbfL | 𝐊 | | \mbfK | 𝐉 | | \mbfJ | -| 𝐈 | | \mbfI | 𝐇 | | \mbfH | 𝐆 | | \mbfG | 𝐅 | | \mbfF | -| 𝐄 | | \mbfE | 𝐃 | | \mbfD | 𝐂 | | \mbfC | 𝐁 | | \mbfB | -| 𝐀 | | \mbfA | ϶ | | \upbackepsilon | ϰ | | \varkappa | ϐ | | \varbeta | -| ο | | \mupomicron | Χ | | \mupChi | Τ | | \mupTau | Ρ | | \mupRho | -| Ο | | \mupOmicron | Ν | | \mupNu | Μ | | \mupMu | Λ | | \mupLambda | -| Κ | | \mupKappa | Ι | | \mupIota | Θ | | \mupTheta | Η | | \mupEta | -| Ζ | | \mupZeta | Ε | | \mupEpsilon | Δ | | \mupDelta | Γ | | \mupGamma | -| Β | | \mupBeta | Α | | \mupAlpha | ͍ | | \underleftrightarrow | ̚ | | \droang | -| ̕ | | \ocommatopright | ̒ | | \oturnedcomma | ̐ | | \candra | ̌ | | \check | -| ̉ | | \ovhook | ̈ | | \ddot | ̇ | | \dot | ̆ | | \breve | -| ̃ | | \tilde | ́ | | \acute | ̀ | | \grave | € | | \euro | +| € | | \euro | ̀ | | \grave | ́ | | \acute | ̃ | | \tilde | +| ̆ | | \breve | ̇ | | \dot | ̈ | | \ddot | ̉ | | \ovhook | +| ̌ | | \check | ̐ | | \candra | ̒ | | \oturnedcomma | ̕ | | \ocommatopright | +| ̚ | | \droang | ͍ | | \underleftrightarrow | Α | | \mupAlpha | Β | | \mupBeta | +| Γ | | \mupGamma | Δ | | \mupDelta | Ε | | \mupEpsilon | Ζ | | \mupZeta | +| Η | | \mupEta | Θ | | \mupTheta | Ι | | \mupIota | Κ | | \mupKappa | +| Λ | | \mupLambda | Μ | | \mupMu | Ν | | \mupNu | Ο | | \mupOmicron | +| Ρ | | \mupRho | Τ | | \mupTau | Χ | | \mupChi | ο | | \mupomicron | +| ϐ | | \varbeta | ϰ | | \varkappa | ϶ | | \upbackepsilon | 𝐀 | | \mbfA | +| 𝐁 | | \mbfB | 𝐂 | | \mbfC | 𝐃 | | \mbfD | 𝐄 | | \mbfE | +| 𝐅 | | \mbfF | 𝐆 | | \mbfG | 𝐇 | | \mbfH | 𝐈 | | \mbfI | +| 𝐉 | | \mbfJ | 𝐊 | | \mbfK | 𝐋 | | \mbfL | 𝐌 | | \mbfM | +| 𝐍 | | \mbfN | 𝐎 | | \mbfO | 𝐏 | | \mbfP | 𝐐 | | \mbfQ | +| 𝐑 | | \mbfR | 𝐒 | | \mbfS | 𝐓 | | \mbfT | 𝐔 | | \mbfU | +| 𝐕 | | \mbfV | 𝐖 | | \mbfW | 𝐗 | | \mbfX | 𝐘 | | \mbfY | +| 𝐙 | | \mbfZ | 𝐚 | | \mbfa | 𝐛 | | \mbfb | 𝐜 | | \mbfc | +| 𝐝 | | \mbfd | 𝐞 | | \mbfe | 𝐟 | | \mbff | 𝐠 | | \mbfg | +| 𝐡 | | \mbfh | 𝐢 | | \mbfi | 𝐣 | | \mbfj | 𝐤 | | \mbfk | +| 𝐥 | | \mbfl | 𝐦 | | \mbfm | 𝐧 | | \mbfn | 𝐨 | | \mbfo | +| 𝐩 | | \mbfp | 𝐪 | | \mbfq | 𝐫 | | \mbfr | 𝐬 | | \mbfs | +| 𝐭 | | \mbft | 𝐮 | | \mbfu | 𝐯 | | \mbfv | 𝐰 | | \mbfw | +| 𝐱 | | \mbfx | 𝐲 | | \mbfy | 𝐳 | | \mbfz | 𝐴 | | \mitA | +| 𝐵 | | \mitB | 𝐶 | | \mitC | 𝐷 | | \mitD | 𝐸 | | \mitE | +| 𝐹 | | \mitF | 𝐺 | | \mitG | 𝐻 | | \mitH | 𝐼 | | \mitI | +| 𝐽 | | \mitJ | 𝐾 | | \mitK | 𝐿 | | \mitL | 𝑀 | | \mitM | +| 𝑁 | | \mitN | 𝑂 | | \mitO | 𝑃 | | \mitP | 𝑄 | | \mitQ | +| 𝑅 | | \mitR | 𝑆 | | \mitS | 𝑇 | | \mitT | 𝑈 | | \mitU | +| 𝑉 | | \mitV | 𝑊 | | \mitW | 𝑋 | | \mitX | 𝑌 | | \mitY | +| 𝑍 | | \mitZ | 𝑎 | | \mita | 𝑏 | | \mitb | 𝑐 | | \mitc | +| 𝑑 | | \mitd | 𝑒 | | \mite | 𝑓 | | \mitf | 𝑔 | | \mitg | +| 𝑖 | | \miti | 𝑗 | | \mitj | 𝑘 | | \mitk | 𝑙 | | \mitl | +| 𝑚 | | \mitm | 𝑛 | | \mitn | 𝑜 | | \mito | 𝑝 | | \mitp | +| 𝑞 | | \mitq | 𝑟 | | \mitr | 𝑠 | | \mits | 𝑡 | | \mitt | +| 𝑢 | | \mitu | 𝑣 | | \mitv | 𝑤 | | \mitw | 𝑥 | | \mitx | +| 𝑦 | | \mity | 𝑧 | | \mitz | 𝑨 | | \mbfitA | 𝑩 | | \mbfitB | +| 𝑪 | | \mbfitC | 𝑫 | | \mbfitD | 𝑬 | | \mbfitE | 𝑭 | | \mbfitF | +| 𝑮 | | \mbfitG | 𝑯 | | \mbfitH | 𝑰 | | \mbfitI | 𝑱 | | \mbfitJ | +| 𝑲 | | \mbfitK | 𝑳 | | \mbfitL | 𝑴 | | \mbfitM | 𝑵 | | \mbfitN | +| 𝑶 | | \mbfitO | 𝑷 | | \mbfitP | 𝑸 | | \mbfitQ | 𝑹 | | \mbfitR | +| 𝑺 | | \mbfitS | 𝑻 | | \mbfitT | 𝑼 | | \mbfitU | 𝑽 | | \mbfitV | +| 𝑾 | | \mbfitW | 𝑿 | | \mbfitX | 𝒀 | | \mbfitY | 𝒁 | | \mbfitZ | +| 𝒂 | | \mbfita | 𝒃 | | \mbfitb | 𝒄 | | \mbfitc | 𝒅 | | \mbfitd | +| 𝒆 | | \mbfite | 𝒇 | | \mbfitf | 𝒈 | | \mbfitg | 𝒉 | | \mbfith | +| 𝒊 | | \mbfiti | 𝒋 | | \mbfitj | 𝒌 | | \mbfitk | 𝒍 | | \mbfitl | +| 𝒎 | | \mbfitm | 𝒏 | | \mbfitn | 𝒐 | | \mbfito | 𝒑 | | \mbfitp | +| 𝒒 | | \mbfitq | 𝒓 | | \mbfitr | 𝒔 | | \mbfits | 𝒕 | | \mbfitt | +| 𝒖 | | \mbfitu | 𝒗 | | \mbfitv | 𝒘 | | \mbfitw | 𝒙 | | \mbfitx | +| 𝒚 | | \mbfity | 𝒛 | | \mbfitz | 𝒜 | | \mscrA | 𝒞 | | \mscrC | +| 𝒟 | | \mscrD | 𝒢 | | \mscrG | 𝒥 | | \mscrJ | 𝒦 | | \mscrK | +| 𝒩 | | \mscrN | 𝒪 | | \mscrO | 𝒫 | | \mscrP | 𝒬 | | \mscrQ | +| 𝒮 | | \mscrS | 𝒯 | | \mscrT | 𝒰 | | \mscrU | 𝒱 | | \mscrV | +| 𝒲 | | \mscrW | 𝒳 | | \mscrX | 𝒴 | | \mscrY | 𝒵 | | \mscrZ | +| 𝒶 | | \mscra | 𝒷 | | \mscrb | 𝒸 | | \mscrc | 𝒹 | | \mscrd | +| 𝒻 | | \mscrf | 𝒽 | | \mscrh | 𝒾 | | \mscri | 𝒿 | | \mscrj | +| 𝓀 | | \mscrk | 𝓁 | | \mscrl | 𝓂 | | \mscrm | 𝓃 | | \mscrn | +| 𝓅 | | \mscrp | 𝓆 | | \mscrq | 𝓇 | | \mscrr | 𝓈 | | \mscrs | +| 𝓉 | | \mscrt | 𝓊 | | \mscru | 𝓋 | | \mscrv | 𝓌 | | \mscrw | +| 𝓍 | | \mscrx | 𝓎 | | \mscry | 𝓏 | | \mscrz | 𝓐 | | \mbfscrA | +| 𝓑 | | \mbfscrB | 𝓒 | | \mbfscrC | 𝓓 | | \mbfscrD | 𝓔 | | \mbfscrE | +| 𝓕 | | \mbfscrF | 𝓖 | | \mbfscrG | 𝓗 | | \mbfscrH | 𝓘 | | \mbfscrI | +| 𝓙 | | \mbfscrJ | 𝓚 | | \mbfscrK | 𝓛 | | \mbfscrL | 𝓜 | | \mbfscrM | +| 𝓝 | | \mbfscrN | 𝓞 | | \mbfscrO | 𝓟 | | \mbfscrP | 𝓠 | | \mbfscrQ | +| 𝓡 | | \mbfscrR | 𝓢 | | \mbfscrS | 𝓣 | | \mbfscrT | 𝓤 | | \mbfscrU | +| 𝓥 | | \mbfscrV | 𝓦 | | \mbfscrW | 𝓧 | | \mbfscrX | 𝓨 | | \mbfscrY | +| 𝓩 | | \mbfscrZ | 𝓪 | | \mbfscra | 𝓫 | | \mbfscrb | 𝓬 | | \mbfscrc | +| 𝓭 | | \mbfscrd | 𝓮 | | \mbfscre | 𝓯 | | \mbfscrf | 𝓰 | | \mbfscrg | +| 𝓱 | | \mbfscrh | 𝓲 | | \mbfscri | 𝓳 | | \mbfscrj | 𝓴 | | \mbfscrk | +| 𝓵 | | \mbfscrl | 𝓶 | | \mbfscrm | 𝓷 | | \mbfscrn | 𝓸 | | \mbfscro | +| 𝓹 | | \mbfscrp | 𝓺 | | \mbfscrq | 𝓻 | | \mbfscrr | 𝓼 | | \mbfscrs | +| 𝓽 | | \mbfscrt | 𝓾 | | \mbfscru | 𝓿 | | \mbfscrv | 𝔀 | | \mbfscrw | +| 𝔁 | | \mbfscrx | 𝔂 | | \mbfscry | 𝔃 | | \mbfscrz | 𝔄 | | \mfrakA | +| 𝔅 | | \mfrakB | 𝔇 | | \mfrakD | 𝔈 | | \mfrakE | 𝔉 | | \mfrakF | +| 𝔊 | | \mfrakG | 𝔍 | | \mfrakJ | 𝔎 | | \mfrakK | 𝔏 | | \mfrakL | +| 𝔐 | | \mfrakM | 𝔑 | | \mfrakN | 𝔒 | | \mfrakO | 𝔓 | | \mfrakP | +| 𝔔 | | \mfrakQ | 𝔖 | | \mfrakS | 𝔗 | | \mfrakT | 𝔘 | | \mfrakU | +| 𝔙 | | \mfrakV | 𝔚 | | \mfrakW | 𝔛 | | \mfrakX | 𝔜 | | \mfrakY | +| 𝔞 | | \mfraka | 𝔟 | | \mfrakb | 𝔠 | | \mfrakc | 𝔡 | | \mfrakd | +| 𝔢 | | \mfrake | 𝔣 | | \mfrakf | 𝔤 | | \mfrakg | 𝔥 | | \mfrakh | +| 𝔦 | | \mfraki | 𝔧 | | \mfrakj | 𝔨 | | \mfrakk | 𝔩 | | \mfrakl | +| 𝔪 | | \mfrakm | 𝔫 | | \mfrakn | 𝔬 | | \mfrako | 𝔭 | | \mfrakp | +| 𝔮 | | \mfrakq | 𝔯 | | \mfrakr | 𝔰 | | \mfraks | 𝔱 | | \mfrakt | +| 𝔲 | | \mfraku | 𝔳 | | \mfrakv | 𝔴 | | \mfrakw | 𝔵 | | \mfrakx | +| 𝔶 | | \mfraky | 𝔷 | | \mfrakz | 𝔸 | | \BbbA | 𝔹 | | \BbbB | +| 𝔻 | | \BbbD | 𝔼 | | \BbbE | 𝔽 | | \BbbF | 𝔾 | | \BbbG | +| 𝕀 | | \BbbI | 𝕁 | | \BbbJ | 𝕂 | | \BbbK | 𝕃 | | \BbbL | +| 𝕄 | | \BbbM | 𝕆 | | \BbbO | 𝕊 | | \BbbS | 𝕋 | | \BbbT | +| 𝕌 | | \BbbU | 𝕍 | | \BbbV | 𝕎 | | \BbbW | 𝕏 | | \BbbX | +| 𝕐 | | \BbbY | 𝕒 | | \Bbba | 𝕓 | | \Bbbb | 𝕔 | | \Bbbc | +| 𝕕 | | \Bbbd | 𝕖 | | \Bbbe | 𝕗 | | \Bbbf | 𝕘 | | \Bbbg | +| 𝕙 | | \Bbbh | 𝕚 | | \Bbbi | 𝕛 | | \Bbbj | 𝕜 | | \Bbbk | +| 𝕝 | | \Bbbl | 𝕞 | | \Bbbm | 𝕟 | | \Bbbn | 𝕠 | | \Bbbo | +| 𝕡 | | \Bbbp | 𝕢 | | \Bbbq | 𝕣 | | \Bbbr | 𝕤 | | \Bbbs | +| 𝕥 | | \Bbbt | 𝕦 | | \Bbbu | 𝕧 | | \Bbbv | 𝕨 | | \Bbbw | +| 𝕩 | | \Bbbx | 𝕪 | | \Bbby | 𝕫 | | \Bbbz | 𝕬 | | \mbffrakA | +| 𝕭 | | \mbffrakB | 𝕮 | | \mbffrakC | 𝕯 | | \mbffrakD | 𝕰 | | \mbffrakE | +| 𝕱 | | \mbffrakF | 𝕲 | | \mbffrakG | 𝕳 | | \mbffrakH | 𝕴 | | \mbffrakI | +| 𝕵 | | \mbffrakJ | 𝕶 | | \mbffrakK | 𝕷 | | \mbffrakL | 𝕸 | | \mbffrakM | +| 𝕹 | | \mbffrakN | 𝕺 | | \mbffrakO | 𝕻 | | \mbffrakP | 𝕼 | | \mbffrakQ | +| 𝕽 | | \mbffrakR | 𝕾 | | \mbffrakS | 𝕿 | | \mbffrakT | 𝖀 | | \mbffrakU | +| 𝖁 | | \mbffrakV | 𝖂 | | \mbffrakW | 𝖃 | | \mbffrakX | 𝖄 | | \mbffrakY | +| 𝖅 | | \mbffrakZ | 𝖆 | | \mbffraka | 𝖇 | | \mbffrakb | 𝖈 | | \mbffrakc | +| 𝖉 | | \mbffrakd | 𝖊 | | \mbffrake | 𝖋 | | \mbffrakf | 𝖌 | | \mbffrakg | +| 𝖍 | | \mbffrakh | 𝖎 | | \mbffraki | 𝖏 | | \mbffrakj | 𝖐 | | \mbffrakk | +| 𝖑 | | \mbffrakl | 𝖒 | | \mbffrakm | 𝖓 | | \mbffrakn | 𝖔 | | \mbffrako | +| 𝖕 | | \mbffrakp | 𝖖 | | \mbffrakq | 𝖗 | | \mbffrakr | 𝖘 | | \mbffraks | +| 𝖙 | | \mbffrakt | 𝖚 | | \mbffraku | 𝖛 | | \mbffrakv | 𝖜 | | \mbffrakw | +| 𝖝 | | \mbffrakx | 𝖞 | | \mbffraky | 𝖟 | | \mbffrakz | 𝖠 | | \msansA | +| 𝖡 | | \msansB | 𝖢 | | \msansC | 𝖣 | | \msansD | 𝖤 | | \msansE | +| 𝖥 | | \msansF | 𝖦 | | \msansG | 𝖧 | | \msansH | 𝖨 | | \msansI | +| 𝖩 | | \msansJ | 𝖪 | | \msansK | 𝖫 | | \msansL | 𝖬 | | \msansM | +| 𝖭 | | \msansN | 𝖮 | | \msansO | 𝖯 | | \msansP | 𝖰 | | \msansQ | +| 𝖱 | | \msansR | 𝖲 | | \msansS | 𝖳 | | \msansT | 𝖴 | | \msansU | +| 𝖵 | | \msansV | 𝖶 | | \msansW | 𝖷 | | \msansX | 𝖸 | | \msansY | +| 𝖹 | | \msansZ | 𝖺 | | \msansa | 𝖻 | | \msansb | 𝖼 | | \msansc | +| 𝖽 | | \msansd | 𝖾 | | \msanse | 𝖿 | | \msansf | 𝗀 | | \msansg | +| 𝗁 | | \msansh | 𝗂 | | \msansi | 𝗃 | | \msansj | 𝗄 | | \msansk | +| 𝗅 | | \msansl | 𝗆 | | \msansm | 𝗇 | | \msansn | 𝗈 | | \msanso | +| 𝗉 | | \msansp | 𝗊 | | \msansq | 𝗋 | | \msansr | 𝗌 | | \msanss | +| 𝗍 | | \msanst | 𝗎 | | \msansu | 𝗏 | | \msansv | 𝗐 | | \msansw | +| 𝗑 | | \msansx | 𝗒 | | \msansy | 𝗓 | | \msansz | 𝗔 | | \mbfsansA | +| 𝗕 | | \mbfsansB | 𝗖 | | \mbfsansC | 𝗗 | | \mbfsansD | 𝗘 | | \mbfsansE | +| 𝗙 | | \mbfsansF | 𝗚 | | \mbfsansG | 𝗛 | | \mbfsansH | 𝗜 | | \mbfsansI | +| 𝗝 | | \mbfsansJ | 𝗞 | | \mbfsansK | 𝗟 | | \mbfsansL | 𝗠 | | \mbfsansM | +| 𝗡 | | \mbfsansN | 𝗢 | | \mbfsansO | 𝗣 | | \mbfsansP | 𝗤 | | \mbfsansQ | +| 𝗥 | | \mbfsansR | 𝗦 | | \mbfsansS | 𝗧 | | \mbfsansT | 𝗨 | | \mbfsansU | +| 𝗩 | | \mbfsansV | 𝗪 | | \mbfsansW | 𝗫 | | \mbfsansX | 𝗬 | | \mbfsansY | +| 𝗭 | | \mbfsansZ | 𝗮 | | \mbfsansa | 𝗯 | | \mbfsansb | 𝗰 | | \mbfsansc | +| 𝗱 | | \mbfsansd | 𝗲 | | \mbfsanse | 𝗳 | | \mbfsansf | 𝗴 | | \mbfsansg | +| 𝗵 | | \mbfsansh | 𝗶 | | \mbfsansi | 𝗷 | | \mbfsansj | 𝗸 | | \mbfsansk | +| 𝗹 | | \mbfsansl | 𝗺 | | \mbfsansm | 𝗻 | | \mbfsansn | 𝗼 | | \mbfsanso | +| 𝗽 | | \mbfsansp | 𝗾 | | \mbfsansq | 𝗿 | | \mbfsansr | 𝘀 | | \mbfsanss | +| 𝘁 | | \mbfsanst | 𝘂 | | \mbfsansu | 𝘃 | | \mbfsansv | 𝘄 | | \mbfsansw | +| 𝘅 | | \mbfsansx | 𝘆 | | \mbfsansy | 𝘇 | | \mbfsansz | 𝘈 | | \mitsansA | +| 𝘉 | | \mitsansB | 𝘊 | | \mitsansC | 𝘋 | | \mitsansD | 𝘌 | | \mitsansE | +| 𝘍 | | \mitsansF | 𝘎 | | \mitsansG | 𝘏 | | \mitsansH | 𝘐 | | \mitsansI | +| 𝘑 | | \mitsansJ | 𝘒 | | \mitsansK | 𝘓 | | \mitsansL | 𝘔 | | \mitsansM | +| 𝘕 | | \mitsansN | 𝘖 | | \mitsansO | 𝘗 | | \mitsansP | 𝘘 | | \mitsansQ | +| 𝘙 | | \mitsansR | 𝘚 | | \mitsansS | 𝘛 | | \mitsansT | 𝘜 | | \mitsansU | +| 𝘝 | | \mitsansV | 𝘞 | | \mitsansW | 𝘟 | | \mitsansX | 𝘠 | | \mitsansY | +| 𝘡 | | \mitsansZ | 𝘢 | | \mitsansa | 𝘣 | | \mitsansb | 𝘤 | | \mitsansc | +| 𝘥 | | \mitsansd | 𝘦 | | \mitsanse | 𝘧 | | \mitsansf | 𝘨 | | \mitsansg | +| 𝘩 | | \mitsansh | 𝘪 | | \mitsansi | 𝘫 | | \mitsansj | 𝘬 | | \mitsansk | +| 𝘭 | | \mitsansl | 𝘮 | | \mitsansm | 𝘯 | | \mitsansn | 𝘰 | | \mitsanso | +| 𝘱 | | \mitsansp | 𝘲 | | \mitsansq | 𝘳 | | \mitsansr | 𝘴 | | \mitsanss | +| 𝘵 | | \mitsanst | 𝘶 | | \mitsansu | 𝘷 | | \mitsansv | 𝘸 | | \mitsansw | +| 𝘹 | | \mitsansx | 𝘺 | | \mitsansy | 𝘻 | | \mitsansz | 𝘼 | | \mbfitsansA | +| 𝘽 | | \mbfitsansB | 𝘾 | | \mbfitsansC | 𝘿 | | \mbfitsansD | 𝙀 | | \mbfitsansE | +| 𝙁 | | \mbfitsansF | 𝙂 | | \mbfitsansG | 𝙃 | | \mbfitsansH | 𝙄 | | \mbfitsansI | +| 𝙅 | | \mbfitsansJ | 𝙆 | | \mbfitsansK | 𝙇 | | \mbfitsansL | 𝙈 | | \mbfitsansM | +| 𝙉 | | \mbfitsansN | 𝙊 | | \mbfitsansO | 𝙋 | | \mbfitsansP | 𝙌 | | \mbfitsansQ | +| 𝙍 | | \mbfitsansR | 𝙎 | | \mbfitsansS | 𝙏 | | \mbfitsansT | 𝙐 | | \mbfitsansU | +| 𝙑 | | \mbfitsansV | 𝙒 | | \mbfitsansW | 𝙓 | | \mbfitsansX | 𝙔 | | \mbfitsansY | +| 𝙕 | | \mbfitsansZ | 𝙖 | | \mbfitsansa | 𝙗 | | \mbfitsansb | 𝙘 | | \mbfitsansc | +| 𝙙 | | \mbfitsansd | 𝙚 | | \mbfitsanse | 𝙛 | | \mbfitsansf | 𝙜 | | \mbfitsansg | +| 𝙝 | | \mbfitsansh | 𝙞 | | \mbfitsansi | 𝙟 | | \mbfitsansj | 𝙠 | | \mbfitsansk | +| 𝙡 | | \mbfitsansl | 𝙢 | | \mbfitsansm | 𝙣 | | \mbfitsansn | 𝙤 | | \mbfitsanso | +| 𝙥 | | \mbfitsansp | 𝙦 | | \mbfitsansq | 𝙧 | | \mbfitsansr | 𝙨 | | \mbfitsanss | +| 𝙩 | | \mbfitsanst | 𝙪 | | \mbfitsansu | 𝙫 | | \mbfitsansv | 𝙬 | | \mbfitsansw | +| 𝙭 | | \mbfitsansx | 𝙮 | | \mbfitsansy | 𝙯 | | \mbfitsansz | 𝙰 | | \mttA | +| 𝙱 | | \mttB | 𝙲 | | \mttC | 𝙳 | | \mttD | 𝙴 | | \mttE | +| 𝙵 | | \mttF | 𝙶 | | \mttG | 𝙷 | | \mttH | 𝙸 | | \mttI | +| 𝙹 | | \mttJ | 𝙺 | | \mttK | 𝙻 | | \mttL | 𝙼 | | \mttM | +| 𝙽 | | \mttN | 𝙾 | | \mttO | 𝙿 | | \mttP | 𝚀 | | \mttQ | +| 𝚁 | | \mttR | 𝚂 | | \mttS | 𝚃 | | \mttT | 𝚄 | | \mttU | +| 𝚅 | | \mttV | 𝚆 | | \mttW | 𝚇 | | \mttX | 𝚈 | | \mttY | +| 𝚉 | | \mttZ | 𝚊 | | \mtta | 𝚋 | | \mttb | 𝚌 | | \mttc | +| 𝚍 | | \mttd | 𝚎 | | \mtte | 𝚏 | | \mttf | 𝚐 | | \mttg | +| 𝚑 | | \mtth | 𝚒 | | \mtti | 𝚓 | | \mttj | 𝚔 | | \mttk | +| 𝚕 | | \mttl | 𝚖 | | \mttm | 𝚗 | | \mttn | 𝚘 | | \mtto | +| 𝚙 | | \mttp | 𝚚 | | \mttq | 𝚛 | | \mttr | 𝚜 | | \mtts | +| 𝚝 | | \mttt | 𝚞 | | \mttu | 𝚟 | | \mttv | 𝚠 | | \mttw | +| 𝚡 | | \mttx | 𝚢 | | \mtty | 𝚣 | | \mttz | 𝚤 | | \imath | +| 𝚥 | | \jmath | 𝚨 | | \mbfAlpha | 𝚩 | | \mbfBeta | 𝚪 | | \mbfGamma | +| 𝚫 | | \mbfDelta | 𝚬 | | \mbfEpsilon | 𝚭 | | \mbfZeta | 𝚮 | | \mbfEta | +| 𝚯 | | \mbfTheta | 𝚰 | | \mbfIota | 𝚱 | | \mbfKappa | 𝚲 | | \mbfLambda | +| 𝚳 | | \mbfMu | 𝚴 | | \mbfNu | 𝚵 | | \mbfXi | 𝚶 | | \mbfOmicron | +| 𝚷 | | \mbfPi | 𝚸 | | \mbfRho | 𝚹 | | \mbfvarTheta | 𝚺 | | \mbfSigma | +| 𝚻 | | \mbfTau | 𝚼 | | \mbfUpsilon | 𝚽 | | \mbfPhi | 𝚾 | | \mbfChi | +| 𝚿 | | \mbfPsi | 𝛀 | | \mbfOmega | 𝛁 | | \mbfnabla | 𝛂 | | \mbfalpha | +| 𝛃 | | \mbfbeta | 𝛄 | | \mbfgamma | 𝛅 | | \mbfdelta | 𝛆 | | \mbfvarepsilon | +| 𝛇 | | \mbfzeta | 𝛈 | | \mbfeta | 𝛉 | | \mbftheta | 𝛊 | | \mbfiota | +| 𝛋 | | \mbfkappa | 𝛌 | | \mbflambda | 𝛍 | | \mbfmu | 𝛎 | | \mbfnu | +| 𝛏 | | \mbfxi | 𝛐 | | \mbfomicron | 𝛑 | | \mbfpi | 𝛒 | | \mbfrho | +| 𝛓 | | \mbfvarsigma | 𝛔 | | \mbfsigma | 𝛕 | | \mbftau | 𝛖 | | \mbfupsilon | +| 𝛗 | | \mbfvarphi | 𝛘 | | \mbfchi | 𝛙 | | \mbfpsi | 𝛚 | | \mbfomega | +| 𝛛 | | \mbfpartial | 𝛜 | | \mbfepsilon | 𝛝 | | \mbfvartheta | 𝛞 | | \mbfvarkappa | +| 𝛟 | | \mbfphi | 𝛠 | | \mbfvarrho | 𝛡 | | \mbfvarpi | 𝛢 | | \mitAlpha | +| 𝛣 | | \mitBeta | 𝛤 | | \mitGamma | 𝛥 | | \mitDelta | 𝛦 | | \mitEpsilon | +| 𝛧 | | \mitZeta | 𝛨 | | \mitEta | 𝛩 | | \mitTheta | 𝛪 | | \mitIota | +| 𝛫 | | \mitKappa | 𝛬 | | \mitLambda | 𝛭 | | \mitMu | 𝛮 | | \mitNu | +| 𝛯 | | \mitXi | 𝛰 | | \mitOmicron | 𝛱 | | \mitPi | 𝛲 | | \mitRho | +| 𝛳 | | \mitvarTheta | 𝛴 | | \mitSigma | 𝛵 | | \mitTau | 𝛶 | | \mitUpsilon | +| 𝛷 | | \mitPhi | 𝛸 | | \mitChi | 𝛹 | | \mitPsi | 𝛺 | | \mitOmega | +| 𝛻 | | \mitnabla | 𝛼 | | \mitalpha | 𝛽 | | \mitbeta | 𝛾 | | \mitgamma | +| 𝛿 | | \mitdelta | 𝜀 | | \mitvarepsilon | 𝜁 | | \mitzeta | 𝜂 | | \miteta | +| 𝜃 | | \mittheta | 𝜄 | | \mitiota | 𝜅 | | \mitkappa | 𝜆 | | \mitlambda | +| 𝜇 | | \mitmu | 𝜈 | | \mitnu | 𝜉 | | \mitxi | 𝜊 | | \mitomicron | +| 𝜋 | | \mitpi | 𝜌 | | \mitrho | 𝜍 | | \mitvarsigma | 𝜎 | | \mitsigma | +| 𝜏 | | \mittau | 𝜐 | | \mitupsilon | 𝜑 | | \mitvarphi | 𝜒 | | \mitchi | +| 𝜓 | | \mitpsi | 𝜔 | | \mitomega | 𝜕 | | \mitpartial | 𝜖 | | \mitepsilon | +| 𝜗 | | \mitvartheta | 𝜘 | | \mitvarkappa | 𝜙 | | \mitphi | 𝜚 | | \mitvarrho | +| 𝜛 | | \mitvarpi | 𝜜 | | \mbfitAlpha | 𝜝 | | \mbfitBeta | 𝜞 | | \mbfitGamma | +| 𝜟 | | \mbfitDelta | 𝜠 | | \mbfitEpsilon | 𝜡 | | \mbfitZeta | 𝜢 | | \mbfitEta | +| 𝜣 | | \mbfitTheta | 𝜤 | | \mbfitIota | 𝜥 | | \mbfitKappa | 𝜦 | | \mbfitLambda | +| 𝜧 | | \mbfitMu | 𝜨 | | \mbfitNu | 𝜩 | | \mbfitXi | 𝜪 | | \mbfitOmicron | +| 𝜫 | | \mbfitPi | 𝜬 | | \mbfitRho | 𝜭 | | \mbfitvarTheta | 𝜮 | | \mbfitSigma | +| 𝜯 | | \mbfitTau | 𝜰 | | \mbfitUpsilon | 𝜱 | | \mbfitPhi | 𝜲 | | \mbfitChi | +| 𝜳 | | \mbfitPsi | 𝜴 | | \mbfitOmega | 𝜵 | | \mbfitnabla | 𝜶 | | \mbfitalpha | +| 𝜷 | | \mbfitbeta | 𝜸 | | \mbfitgamma | 𝜹 | | \mbfitdelta | 𝜺 | | \mbfitvarepsilon | +| 𝜻 | | \mbfitzeta | 𝜼 | | \mbfiteta | 𝜽 | | \mbfittheta | 𝜾 | | \mbfitiota | +| 𝜿 | | \mbfitkappa | 𝝀 | | \mbfitlambda | 𝝁 | | \mbfitmu | 𝝂 | | \mbfitnu | +| 𝝃 | | \mbfitxi | 𝝄 | | \mbfitomicron | 𝝅 | | \mbfitpi | 𝝆 | | \mbfitrho | +| 𝝇 | | \mbfitvarsigma | 𝝈 | | \mbfitsigma | 𝝉 | | \mbfittau | 𝝊 | | \mbfitupsilon | +| 𝝋 | | \mbfitvarphi | 𝝌 | | \mbfitchi | 𝝍 | | \mbfitpsi | 𝝎 | | \mbfitomega | +| 𝝏 | | \mbfitpartial | 𝝐 | | \mbfitepsilon | 𝝑 | | \mbfitvartheta | 𝝒 | | \mbfitvarkappa | +| 𝝓 | | \mbfitphi | 𝝔 | | \mbfitvarrho | 𝝕 | | \mbfitvarpi | 𝝖 | | \mbfsansAlpha | +| 𝝗 | | \mbfsansBeta | 𝝘 | | \mbfsansGamma | 𝝙 | | \mbfsansDelta | 𝝚 | | \mbfsansEpsilon | +| 𝝛 | | \mbfsansZeta | 𝝜 | | \mbfsansEta | 𝝝 | | \mbfsansTheta | 𝝞 | | \mbfsansIota | +| 𝝟 | | \mbfsansKappa | 𝝠 | | \mbfsansLambda | 𝝡 | | \mbfsansMu | 𝝢 | | \mbfsansNu | +| 𝝣 | | \mbfsansXi | 𝝤 | | \mbfsansOmicron | 𝝥 | | \mbfsansPi | 𝝦 | | \mbfsansRho | +| 𝝧 | | \mbfsansvarTheta | 𝝨 | | \mbfsansSigma | 𝝩 | | \mbfsansTau | 𝝪 | | \mbfsansUpsilon | +| 𝝫 | | \mbfsansPhi | 𝝬 | | \mbfsansChi | 𝝭 | | \mbfsansPsi | 𝝮 | | \mbfsansOmega | +| 𝝯 | | \mbfsansnabla | 𝝰 | | \mbfsansalpha | 𝝱 | | \mbfsansbeta | 𝝲 | | \mbfsansgamma | +| 𝝳 | | \mbfsansdelta | 𝝴 | | \mbfsansvarepsilon | 𝝵 | | \mbfsanszeta | 𝝶 | | \mbfsanseta | +| 𝝷 | | \mbfsanstheta | 𝝸 | | \mbfsansiota | 𝝹 | | \mbfsanskappa | 𝝺 | | \mbfsanslambda | +| 𝝻 | | \mbfsansmu | 𝝼 | | \mbfsansnu | 𝝽 | | \mbfsansxi | 𝝾 | | \mbfsansomicron | +| 𝝿 | | \mbfsanspi | 𝞀 | | \mbfsansrho | 𝞁 | | \mbfsansvarsigma | 𝞂 | | \mbfsanssigma | +| 𝞃 | | \mbfsanstau | 𝞄 | | \mbfsansupsilon | 𝞅 | | \mbfsansvarphi | 𝞆 | | \mbfsanschi | +| 𝞇 | | \mbfsanspsi | 𝞈 | | \mbfsansomega | 𝞉 | | \mbfsanspartial | 𝞊 | | \mbfsansepsilon | +| 𝞋 | | \mbfsansvartheta | 𝞌 | | \mbfsansvarkappa | 𝞍 | | \mbfsansphi | 𝞎 | | \mbfsansvarrho | +| 𝞏 | | \mbfsansvarpi | 𝞐 | | \mbfitsansAlpha | 𝞑 | | \mbfitsansBeta | 𝞒 | | \mbfitsansGamma | +| 𝞓 | | \mbfitsansDelta | 𝞔 | | \mbfitsansEpsilon | 𝞕 | | \mbfitsansZeta | 𝞖 | | \mbfitsansEta | +| 𝞗 | | \mbfitsansTheta | 𝞘 | | \mbfitsansIota | 𝞙 | | \mbfitsansKappa | 𝞚 | | \mbfitsansLambda | +| 𝞛 | | \mbfitsansMu | 𝞜 | | \mbfitsansNu | 𝞝 | | \mbfitsansXi | 𝞞 | | \mbfitsansOmicron | +| 𝞟 | | \mbfitsansPi | 𝞠 | | \mbfitsansRho | 𝞡 | | \mbfitsansvarTheta | 𝞢 | | \mbfitsansSigma | +| 𝞣 | | \mbfitsansTau | 𝞤 | | \mbfitsansUpsilon | 𝞥 | | \mbfitsansPhi | 𝞦 | | \mbfitsansChi | +| 𝞧 | | \mbfitsansPsi | 𝞨 | | \mbfitsansOmega | 𝞩 | | \mbfitsansnabla | 𝞪 | | \mbfitsansalpha | +| 𝞫 | | \mbfitsansbeta | 𝞬 | | \mbfitsansgamma | 𝞭 | | \mbfitsansdelta | 𝞮 | | \mbfitsansvarepsilon | +| 𝞯 | | \mbfitsanszeta | 𝞰 | | \mbfitsanseta | 𝞱 | | \mbfitsanstheta | 𝞲 | | \mbfitsansiota | +| 𝞳 | | \mbfitsanskappa | 𝞴 | | \mbfitsanslambda | 𝞵 | | \mbfitsansmu | 𝞶 | | \mbfitsansnu | +| 𝞷 | | \mbfitsansxi | 𝞸 | | \mbfitsansomicron | 𝞹 | | \mbfitsanspi | 𝞺 | | \mbfitsansrho | +| 𝞻 | | \mbfitsansvarsigma | 𝞼 | | \mbfitsanssigma | 𝞽 | | \mbfitsanstau | 𝞾 | | \mbfitsansupsilon | +| 𝞿 | | \mbfitsansvarphi | 𝟀 | | \mbfitsanschi | 𝟁 | | \mbfitsanspsi | 𝟂 | | \mbfitsansomega | +| 𝟃 | | \mbfitsanspartial | 𝟄 | | \mbfitsansepsilon | 𝟅 | | \mbfitsansvartheta | 𝟆 | | \mbfitsansvarkappa | +| 𝟇 | | \mbfitsansphi | 𝟈 | | \mbfitsansvarrho | 𝟉 | | \mbfitsansvarpi | 𝟊 | | \mbfDigamma | +| 𝟋 | | \mbfdigamma | 𝟎 | | \mbfzero | 𝟏 | | \mbfone | 𝟐 | | \mbftwo | +| 𝟑 | | \mbfthree | 𝟒 | | \mbffour | 𝟓 | | \mbffive | 𝟔 | | \mbfsix | +| 𝟕 | | \mbfseven | 𝟖 | | \mbfeight | 𝟗 | | \mbfnine | 𝟘 | | \Bbbzero | +| 𝟙 | | \Bbbone | 𝟚 | | \Bbbtwo | 𝟛 | | \Bbbthree | 𝟜 | | \Bbbfour | +| 𝟝 | | \Bbbfive | 𝟞 | | \Bbbsix | 𝟟 | | \Bbbseven | 𝟠 | | \Bbbeight | +| 𝟡 | | \Bbbnine | 𝟢 | | \msanszero | 𝟣 | | \msansone | 𝟤 | | \msanstwo | +| 𝟥 | | \msansthree | 𝟦 | | \msansfour | 𝟧 | | \msansfive | 𝟨 | | \msanssix | +| 𝟩 | | \msansseven | 𝟪 | | \msanseight | 𝟫 | | \msansnine | 𝟬 | | \mbfsanszero | +| 𝟭 | | \mbfsansone | 𝟮 | | \mbfsanstwo | 𝟯 | | \mbfsansthree | 𝟰 | | \mbfsansfour | +| 𝟱 | | \mbfsansfive | 𝟲 | | \mbfsanssix | 𝟳 | | \mbfsansseven | 𝟴 | | \mbfsanseight | +| 𝟵 | | \mbfsansnine | 𝟶 | | \mttzero | 𝟷 | | \mttone | 𝟸 | | \mtttwo | +| 𝟹 | | \mttthree | 𝟺 | | \mttfour | 𝟻 | | \mttfive | 𝟼 | | \mttsix | +| 𝟽 | | \mttseven | 𝟾 | | \mtteight | 𝟿 | | \mttnine | ữ0 | | \arabicmaj | +| ữ1 | | \arabichad | ‐ | | \mathhyphen | ― | | \horizbar | ‗ | | \twolowline | +| ‥ | | \enleadertwodots | ″ | | \dprime | ‴ | | \trprime | ‵ | | \backprime | +| ‶ | | \backdprime | ‷ | | \backtrprime | ‸ | | \caretinsert | ‼ | | \Exclam | +| ⁀ | | \tieconcat | ⁃ | | \hyphenbullet | ⁄ | | \fracslash | ⁇ | | \Question | +| ⁐ | | \closure | ⁗ | | \qprime | ⃒ | | \vertoverlay | ⃗ | | \vec | +| ⃛ | | \dddot | ⃜ | | \ddddot | ⃝ | | \enclosecircle | ⃞ | | \enclosesquare | +| ⃟ | | \enclosediamond | ⃡ | | \overleftrightarrow | ⃤ | | \enclosetriangle | ⃧ | | \annuity | +| ⃨ | | \threeunderdot | ⃩ | | \widebridgeabove | ⃬ | | \underrightharpoondown | ⃭ | | \underleftharpoondown | +| ⃮ | | \underleftarrow | ⃯ | | \underrightarrow | ⃰ | | \asteraccent | ℎ | | \Planckconst | +| ℏ | | \hslash | ℒ | | \mscrL | ℛ | | \mscrR | ℧ | | \mho | +| ℩ | | \turnediota | Ⅎ | | \Finv | ℶ | | \beth | ℷ | | \gimel | +| ℸ | | \daleth | ⅁ | | \Game | ⅂ | | \sansLturned | ⅃ | | \sansLmirrored | +| ⅄ | | \Yup | ⅅ | | \CapitalDifferentialD | ⅊ | | \PropertyLine | ↚ | | \nleftarrow | +| ↛ | | \nrightarrow | ↞ | | \twoheadleftarrow | ↟ | | \twoheaduparrow | ↠ | | \twoheadrightarrow | +| ↡ | | \twoheaddownarrow | ↢ | | \leftarrowtail | ↣ | | \rightarrowtail | ↤ | | \mapsfrom | +| ↥ | | \mapsup | ↧ | | \mapsdown | ↨ | | \updownarrowbar | ↫ | | \looparrowleft | +| ↬ | | \looparrowright | ↭ | | \leftrightsquigarrow | ↮ | | \nleftrightarrow | ↰ | | \Lsh | +| ↱ | | \Rsh | ↳ | \reflectbox{\carriagereturn} | \Rdsh | ↴ | | \linefeed | ↵ | | \carriagereturn | +| ↶ | | \curvearrowleft | ↷ | | \curvearrowright | ↸ | | \barovernorthwestarrow | ↹ | | \barleftarrowrightarrowbar | +| ↺ | | \circlearrowleft | ↾ | | \upharpoonright | ↿ | | \upharpoonleft | ⇁ | | \rightharpoondown | +| ⇂ | | \downharpoonright | ⇃ | | \downharpoonleft | ⇄ | | \rightleftarrows | ⇆ | | \leftrightarrows | +| ⇇ | | \leftleftarrows | ⇈ | | \upuparrows | ⇉ | | \rightrightarrows | ⇊ | | \downdownarrows | +| ⇋ | | \leftrightharpoons | ⇍ | | \nLeftarrow | ⇎ | | \nLeftrightarrow | ⇏ | | \nRightarrow | +| ⇖ | | \Nwarrow | ⇗ | | \Nearrow | ⇘ | | \Searrow | ⇙ | | \Swarrow | +| ⇚ | | \Lleftarrow | ⇛ | | \Rrightarrow | ⇜ | | \leftsquigarrow | ⇝ | | \rightsquigarrow | +| ⇞ | | \nHuparrow | ⇟ | | \nHdownarrow | ⇡ | | \updasharrow | ⇣ | | \downdasharrow | +| ⇦ | | \leftwhitearrow | ⇧ | | \upwhitearrow | ⇨ | | \rightwhitearrow | ⇩ | | \downwhitearrow | +| ⇪ | | \whitearrowupfrombar | ⇴ | | \circleonrightarrow | ⇶ | | \rightthreearrows | ⇷ | | \nvleftarrow | +| ⇹ | | \nvleftrightarrow | ⇺ | | \nVleftarrow | ⇼ | | \nVleftrightarrow | ⇽ | | \leftarrowtriangle | +| ⇾ | | \rightarrowtriangle | ⇿ | | \leftrightarrowtriangle | ∁ | | \complement | ∄ | | \nexists | +| ∅ | | \varnothing | ∆ | | \increment | ∇ | | \nabla | ∊ | | \smallin | +| ∍ | | \smallni | ∎ | | \QED | ∔ | | \dotplus | ∕ | | \divslash | +| √ | | \sqrt | ∟ | | \rightangle | ∡ | | \measuredangle | ∢ | | \sphericalangle | +| ∤ | | \nmid | ∦ | | \nparallel | ∲ | | \lcirclerightint | ∴ | | \therefore | +| ∵ | | \because | ∷ | | \Colon | ∹ | | \eqcolon | ∽ | | \backsim | +| ≊ | | \approxeq | ≎ | | \Bumpeq | ≏ | | \bumpeq | ≒ | | \fallingdotseq | +| ≓ | | \risingdotseq | ≔ | | \coloneq | ≖ | | \eqcirc | ≗ | | \circeq | +| ≘ | | \arceq | ≚ | | \veeeq | ≜ | | \triangleq | ≝ | | \eqdef | +| ≞ | | \measeq | ≟ | | \questeq | ≣ | | \Equiv | ≨ | | \lneqq | +| ≩ | | \gneqq | ≬ | | \between | ≭ | | \nasymp | ≴ | | \nlesssim | +| ≵ | | \ngtrsim | ≶ | | \lessgtr | ≷ | | \gtrless | ≼ | | \preccurlyeq | +| ≽ | | \succcurlyeq | ⊊ | | \subsetneq | ⊋ | | \supsetneq | ⊌ | | \cupleftarrow | +| ⊍ | | \cupdot | ⊏ | | \sqsubset | ⊐ | | \sqsupset | ⊚ | | \circledcirc | +| ⊛ | | \circledast | ⊜ | | \circledequal | ⊝ | | \circleddash | ⊞ | | \boxplus | +| ⊟ | | \boxminus | ⊠ | | \boxtimes | ⊡ | | \boxdot | ⊦ | | \assert | +| ⊩ | | \Vdash | ⊪ | | \Vvdash | ⊫ | | \VDash | ⊬ | | \nvdash | +| ⊭ | | \nvDash | ⊮ | | \nVdash | ⊯ | | \nVDash | ⊰ | | \prurel | +| ⊱ | | \scurel | ⊲ | | \vartriangleleft | ⊳ | | \vartriangleright | ⊴ | | \trianglelefteq | +| ⊵ | | \trianglerighteq | ⊸ | | \multimap | ⊺ | | \intercal | ⊻ | | \veebar | +| ⊼ | | \barwedge | ⊽ | | \barvee | ⊿ | | \varlrtriangle | ⋇ | | \divideontimes | +| ⋉ | | \ltimes | ⋊ | | \rtimes | ⋋ | | \leftthreetimes | ⋌ | | \rightthreetimes | +| ⋍ | | \backsimeq | ⋎ | | \curlyvee | ⋏ | | \curlywedge | ⋐ | | \Subset | +| ⋑ | | \Supset | ⋒ | | \Cap | ⋓ | | \Cup | ⋔ | | \pitchfork | +| ⋕ | | \hash | ⋖ | | \lessdot | ⋗ | | \gtrdot | ⋚ | | \lesseqgtr | +| ⋛ | | \gtreqless | ⋜ | | \eqless | ⋝ | | \eqgtr | ⋞ | | \curlyeqprec | +| ⋟ | | \curlyeqsucc | ⋠ | | \npreceq | ⋡ | | \nsucceq | ⋤ | | \sqsubsetneq | +| ⋥ | | \sqsupsetneq | ⋦ | | \lnsim | ⋧ | | \gnsim | ⋨ | | \precedesnotsimilar | +| ⋩ | | \succnsim | ⋬ | | \ntrianglelefteq | ⋭ | | \ntrianglerighteq | ⋲ | | \disin | +| ⋳ | | \varisins | ⋴ | | \isins | ⋵ | | \isindot | ⋷ | | \isinobar | +| ⋸ | | \isinvb | ⋹ | | \isinE | ⋺ | | \nisd | ⋻ | | \varnis | +| ⋼ | | \nis | ⋽ | | \varniobar | ⋾ | | \niobar | ⋿ | | \bagmember | +| ⌀ | | \diameter | ⌂ | | \house | ⌅ | \barwedge | \varbarwedge | ⌐ | | \invneg | +| ⌒ | | \profline | ⌓ | | \profsurf | ⌗ | | \viewdata | ⌙ | | \turnednot | +| ⌜ | | \ulcorner | ⌝ | | \urcorner | ⌞ | | \llcorner | ⌟ | | \lrcorner | +| ⌠ | | \inttop | ⌡ | | \intbottom | ⌬ | | \varhexagonlrbonds | ⌲ | | \conictaper | +| ⌶ | | \topbot | ⌽ | | \obar | ⍓ | | \APLboxupcaret | ⍰ | | \APLboxquestion | +| ⍼ | | \rangledownzigzagarrow | ⎔ | | \hexagon | ⎛ | | \lparenuend | ⎜ | | \lparenextender | +| ⎝ | | \lparenlend | ⎞ | | \rparenuend | ⎟ | | \rparenextender | ⎠ | | \rparenlend | +| ⎡ | | \lbrackuend | ⎢ | | \lbrackextender | ⎣ | | \lbracklend | ⎤ | | \rbrackuend | +| ⎥ | | \rbrackextender | ⎦ | | \rbracklend | ⎧ | | \lbraceuend | ⎨ | | \lbracemid | +| ⎩ | | \lbracelend | ⎪ | | \vbraceextender | ⎫ | | \rbraceuend | ⎬ | | \rbracemid | +| ⎭ | | \rbracelend | ⎮ | | \intextender | ⎯ | | \harrowextender | ⎲ | | \sumtop | +| ⎳ | | \sumbottom | ⎴ | | \overbracket | ⎵ | | \underbracket | ⎶ | | \bbrktbrk | +| ⎷ | | \sqrtbottom | ⎸ | | \lvboxline | ⎹ | | \rvboxline | ⏎ | | \varcarriagereturn | +| ⏜ | | \overparen | ⏝ | | \underparen | ⏞ | | \overbrace | ⏟ | | \underbrace | +| ⏠ | | \obrbrak | ⏡ | | \ubrbrak | ⏢ | | \trapezium | ⏣ | | \benzenr | +| ⏤ | | \strns | ⏥ | | \fltns | ⏦ | | \accurrent | ⏧ | | \elinters | +| ␢ | | \blanksymbol | ␣ | | \mathvisiblespace | ┆ | | \bdtriplevdash | ▀ | | \blockuphalf | +| ▄ | | \blocklowhalf | █ | | \blockfull | ▌ | | \blocklefthalf | ▐ | | \blockrighthalf | +| ░ | | \blockqtrshaded | ▒ | | \blockhalfshaded | ▓ | | \blockthreeqtrshaded | ■ | | \mdlgblksquare | +| ▢ | | \squoval | ▣ | | \blackinwhitesquare | ▤ | | \squarehfill | ▥ | | \squarevfill | +| ▦ | | \squarehvfill | ▧ | | \squarenwsefill | ▨ | | \squareneswfill | ▩ | | \squarecrossfill | +| ▪ | | \smblksquare | ▫ | | \smwhtsquare | ▬ | | \hrectangleblack | ▭ | | \hrectangle | +| ▮ | | \vrectangleblack | ▯ | | \vrectangle | ▰ | | \parallelogramblack | ▱ | | \parallelogram | +| ▲ | | \bigblacktriangleup | △ | | \bigtriangleup | ▴ | | \blacktriangle | ▵ | | \vartriangle | +| ▸ | | \smallblacktriangleright | ▹ | | \smalltriangleright | ► | | \blackpointerright | ▻ | | \whitepointerright | +| ▼ | | \bigblacktriangledown | ▾ | | \blacktriangledown | ▿ | | \triangledown | ◂ | | \smallblacktriangleleft | +| ◃ | | \smalltriangleleft | ◄ | | \blackpointerleft | ◅ | | \whitepointerleft | ◈ | | \blackinwhitediamond | +| ◉ | | \fisheye | ◊ | | \lozenge | ◌ | | \dottedcircle | ◍ | | \circlevertfill | +| ◎ | | \bullseye | ◐ | | \circlelefthalfblack | ◑ | | \circlerighthalfblack | ◒ | | \circlebottomhalfblack | +| ◓ | | \circletophalfblack | ◔ | | \circleurquadblack | ◕ | | \blackcircleulquadwhite | ◖ | | \blacklefthalfcircle | +| ◗ | | \blackrighthalfcircle | ◘ | | \inversebullet | ◙ | | \inversewhitecircle | ◚ | | \invwhiteupperhalfcircle | +| ◛ | | \invwhitelowerhalfcircle | ◜ | | \ularc | ◝ | | \urarc | ◞ | | \lrarc | +| ◟ | | \llarc | ◠ | | \topsemicircle | ◡ | | \botsemicircle | ◢ | | \lrblacktriangle | +| ◣ | | \llblacktriangle | ◤ | | \ulblacktriangle | ◥ | | \urblacktriangle | ◦ | | \smwhtcircle | +| ◧ | | \squareleftblack | ◨ | | \squarerightblack | ◩ | | \squareulblack | ◪ | | \squarelrblack | +| ◫ | | \boxbar | ◬ | | \trianglecdot | ◭ | | \triangleleftblack | ◮ | | \trianglerightblack | +| ◰ | | \squareulquad | ◱ | | \squarellquad | ◲ | | \squarelrquad | ◳ | | \squareurquad | +| ◴ | | \circleulquad | ◵ | | \circlellquad | ◶ | | \circlelrquad | ◷ | | \circleurquad | +| ◸ | | \ultriangle | ◹ | | \urtriangle | ◺ | | \lltriangle | ◻ | | \mdwhtsquare | +| ◼ | | \mdblksquare | ◽ | | \mdsmwhtsquare | ◾ | | \mdsmblksquare | ◿ | | \lrtriangle | +| ★ | | \bigstar | ☆ | | \bigwhitestar | ☡ | | \danger | ☻ | | \blacksmiley | +| ☼ | | \sun | ☽ | | \rightmoon | ☾ | | \leftmoon | ♀ | | \female | +| ♂ | | \male | ♤ | | \varspadesuit | ♥ | | \varheartsuit | ♦ | | \vardiamondsuit | +| ♧ | | \varclubsuit | ♩ | | \quarternote | ♪ | | \eighthnote | ♫ | | \twonotes | +| ♬ | | \sixteenthnote | ♾ | | \acidfree | ⚀ | | \dicei | ⚁ | | \diceii | +| ⚂ | | \diceiii | ⚃ | | \diceiv | ⚄ | | \dicev | ⚅ | | \dicevi | +| ⚆ | | \circledrightdot | ⚇ | | \circledtwodots | ⚈ | | \blackcircledrightdot | ⚉ | | \blackcircledtwodots | +| ⚥ | | \Hermaphrodite | ⚬ | | \mdsmwhtcircle | ⚲ | | \neuter | ✓ | | \checkmark | +| ✠ | | \maltese | ✪ | | \circledstar | ✶ | | \varstar | ✽ | | \dingasterisk | +| ❲ | | \lbrbrak | ❳ | | \rbrbrak | ➛ | | \draftingarrow | ⟀ | | \threedangle | +| ⟁ | | \whiteinwhitetriangle | ⟃ | | \subsetcirc | ⟄ | | \supsetcirc | ⟇ | | \veedot | +| ⟈ | | \bsolhsub | ⟉ | | \suphsol | ⟋ | | \diagup | ⟌ | | \longdivision | +| ⟍ | | \diagdown | ⟑ | | \wedgedot | ⟒ | | \upin | ⟓ | | \pullback | +| ⟔ | | \pushout | ⟕ | | \leftouterjoin | ⟖ | | \rightouterjoin | ⟗ | | \fullouterjoin | +| ⟘ | | \bigbot | ⟙ | | \bigtop | ⟚ | | \DashVDash | ⟛ | | \dashVdash | +| ⟜ | | \multimapinv | ⟝ | | \vlongdash | ⟞ | | \longdashv | ⟟ | | \cirbot | +| ⟠ | | \lozengeminus | ⟡ | | \concavediamond | ⟢ | | \concavediamondtickleft | ⟣ | | \concavediamondtickright | +| ⟤ | | \whitesquaretickleft | ⟥ | | \whitesquaretickright | ⟫ | | \rang | ⟬ | | \Lbrbrak | +| ⟭ | | \Rbrbrak | ⟰ | | \UUparrow | ⟱ | | \DDownarrow | ⟲ | | \acwgapcirclearrow | +| ⟳ | | \cwgapcirclearrow | ⟴ | | \rightarrowonoplus | ⟻ | | \longmapsfrom | ⟽ | | \Longmapsfrom | +| ⟾ | | \Longmapsto | ⟿ | | \longrightsquigarrow | ⤁ | | \nVtwoheadrightarrow | ⤂ | | \nvLeftarrow | +| ⤃ | | \nvRightarrow | ⤄ | | \nvLeftrightarrow | ⤅ | | \twoheadmapsto | ⤆ | | \Mapsfrom | +| ⤇ | | \Mapsto | ⤈ | | \downarrowbarred | ⤉ | | \uparrowbarred | ⤊ | | \Uuparrow | +| ⤋ | | \Ddownarrow | ⤌ | | \leftbkarrow | ⤍ | | \rightbkarrow | ⤎ | | \leftdbkarrow | +| ⤏ | | \dbkarrow | ⤐ | | \drbkarrow | ⤑ | | \rightdotarrow | ⤗ | | \nvtwoheadrightarrowtail | +| ⤘ | | \nVtwoheadrightarrowtail | ⤙ | | \lefttail | ⤚ | | \righttail | ⤛ | | \leftdbltail | +| ⤜ | | \rightdbltail | ⤝ | | \diamondleftarrow | ⤞ | | \rightarrowdiamond | ⤟ | | \diamondleftarrowbar | +| ⤠ | | \barrightarrowdiamond | ⤡ | | \nwsearrow | ⤢ | | \neswarrow | ⤣ | | \hknwarrow | +| ⤤ | | \hknearrow | ⤥ | | \hksearrow | ⤦ | | \hkswarrow | ⤧ | | \tona | +| ⤨ | | \toea | ⤩ | | \tosa | ⤪ | | \towa | ⤫ | | \rdiagovfdiag | +| ⤬ | | \fdiagovrdiag | ⤭ | | \seovnearrow | ⤮ | | \neovsearrow | ⤯ | | \fdiagovnearrow | +| ⤰ | | \rdiagovsearrow | ⤱ | | \neovnwarrow | ⤲ | | \nwovnearrow | ⤳ | | \rightcurvedarrow | +| ⤴ | | \uprightcurvearrow | ⤵ | | \downrightcurvedarrow | ⤶ | | \leftdowncurvedarrow | ⤷ | | \rightdowncurvedarrow | +| ⤸ | | \cwrightarcarrow | ⤹ | | \acwleftarcarrow | ⤺ | | \acwoverarcarrow | ⤻ | | \acwunderarcarrow | +| ⤼ | | \curvearrowrightminus | ⤽ | | \curvearrowleftplus | ⤾ | | \cwundercurvearrow | ⤿ | | \ccwundercurvearrow | +| ⥂ | | \rightarrowshortleftarrow | ⥃ | | \leftarrowshortrightarrow | ⥄ | | \shortrightarrowleftarrow | ⥅ | | \rightarrowplus | +| ⥆ | | \leftarrowplus | ⥇ | | \rightarrowx | ⥈ | | \leftrightarrowcircle | ⥉ | | \twoheaduparrowcircle | +| ⥌ | | \updownharpoonrightleft | ⥍ | | \updownharpoonleftright | ⥎ | | \leftrightharpoonupup | ⥐ | | \DownLeftRightVector | +| ⥦ | | \leftrightharpoonsup | ⥧ | | \leftrightharpoonsdown | ⥨ | | \rightleftharpoonsup | ⥩ | | \rightleftharpoonsdown | +| ⥱ | | \equalrightarrow | ⥲ | | \similarrightarrow | ⥳ | | \leftarrowsimilar | ⥴ | | \rightarrowsimilar | +| ⥵ | | \rightarrowapprox | ⥶ | | \ltlarr | ⥷ | | \leftarrowless | ⥸ | | \gtrarr | +| ⥹ | | \subrarr | ⥺ | | \leftarrowsubset | ⥻ | | \suplarr | ⥼ | | \leftfishtail | +| ⥽ | | \rightfishtail | ⥾ | | \upfishtail | ⥿ | | \downfishtail | ⦀ | | \Vvert | +| ⦁ | | \spot | ⦂ | | \typecolon | ⦃ | | \lBrace | ⦄ | | \rBrace | +| ⦅ | | \lParen | ⦆ | | \Elroang | ⦇ | | \limg | ⦋ | | \lbrackubar | +| ⦌ | | \rbrackubar | ⦍ | | \lbrackultick | ⦎ | | \rbracklrtick | ⦏ | | \lbracklltick | +| ⦐ | | \rbrackurtick | ⦑ | | \langledot | ⦒ | | \rangledot | ⦓ | | \lparenless | +| ⦔ | | \rparengtr | ⦕ | | \Lparengtr | ⦖ | | \Rparenless | ⦗ | | \lblkbrbrak | +| ⦘ | | \rblkbrbrak | ⦙ | | \fourvdots | ⦚ | | \vzigzag | ⦛ | | \measuredangleleft | +| ⦝ | | \rightanglemdot | ⦞ | | \angles | ⦟ | | \angdnr | ⦠ | | \gtlpar | +| ⦡ | | \sphericalangleup | ⦢ | | \turnangle | ⦣ | | \revangle | ⦤ | | \angleubar | +| ⦥ | | \revangleubar | ⦦ | | \wideangledown | ⦧ | | \wideangleup | ⦨ | | \measanglerutone | +| ⦩ | | \measanglelutonw | ⦪ | | \measanglerdtose | ⦫ | | \measangleldtosw | ⦬ | | \measangleurtone | +| ⦭ | | \measangleultonw | ⦮ | | \measangledrtose | ⦯ | | \measangledltosw | ⦰ | | \revemptyset | +| ⦱ | | \emptysetobar | ⦲ | | \emptysetocirc | ⦳ | | \emptysetoarr | ⦴ | | \emptysetoarrl | +| ⦵ | | \circlehbar | ⦶ | | \circledvert | ⦷ | | \circledparallel | ⦸ | | \circledbslash | +| ⦹ | | \operp | ⦺ | | \obot | ⦻ | | \olcross | ⦼ | | \odotslashdot | +| ⦽ | | \uparrowoncircle | ⦾ | | \circledwhitebullet | ⦿ | | \circledbullet | ⧀ | | \circledless | +| ⧁ | | \circledgtr | ⧂ | | \cirscir | ⧃ | | \cirE | ⧅ | | \boxbslash | +| ⧆ | | \boxast | ⧇ | | \boxcircle | ⧈ | | \boxbox | ⧉ | | \boxonbox | +| ⧊ | | \triangleodot | ⧋ | | \triangleubar | ⧌ | | \triangles | ⧍ | | \triangleserifs | +| ⧎ | | \rtriltri | ⧑ | | \lfbowtie | ⧒ | | \rfbowtie | ⧓ | | \fbowtie | +| ⧔ | | \lftimes | ⧕ | | \rftimes | ⧖ | | \hourglass | ⧗ | | \blackhourglass | +| ⧘ | | \lvzigzag | ⧙ | | \rvzigzag | ⧚ | | \Lvzigzag | ⧛ | | \Rvzigzag | +| ⧜ | | \iinfin | ⧝ | | \tieinfty | ⧞ | | \nvinfty | ⧠ | | \laplac | +| ⧡ | | \lrtriangleeq | ⧢ | | \shuffle | ⧣ | | \eparsl | ⧤ | | \smeparsl | +| ⧥ | | \eqvparsl | ⧦ | | \gleichstark | ⧧ | | \thermod | ⧨ | | \downtriangleleftblack | +| ⧩ | | \downtrianglerightblack | ⧪ | | \blackdiamonddownarrow | ⧫ | | \blacklozenge | ⧬ | | \circledownarrow | +| ⧭ | | \blackcircledownarrow | ⧮ | | \errbarsquare | ⧯ | | \errbarblacksquare | ⧰ | | \errbardiamond | +| ⧱ | | \errbarblackdiamond | ⧲ | | \errbarcircle | ⧳ | | \errbarblackcircle | ⧴ | | \RuleDelayed | +| ⧶ | | \dsol | ⧷ | | \rsolbar | ⧸ | | \xsol | ⧺ | | \doubleplus | +| ⧻ | | \tripleplus | ⧼ | | \lcurvyangle | ⧽ | | \rcurvyangle | ⧾ | | \tplus | +| ⧿ | | \tminus | ⨃ | | \bigcupdot | ⨄ | | \Elxuplus | ⨅ | | \bigsqcap | +| ⨇ | | \conjquant | ⨈ | | \disjquant | ⨊ | | \modtwosum | ⨋ | | \sumint | +| ⨌ | | \iiiint | ⨍ | | \intbar | ⨎ | | \intBar | ⨐ | | \cirfnint | +| ⨑ | | \awint | ⨒ | | \rppolint | ⨓ | | \scpolint | ⨔ | | \npolint | +| ⨕ | | \pointint | ⨗ | | \intlarhk | ⨘ | | \intx | ⨙ | | \intcap | +| ⨚ | | \intcup | ⨛ | | \upint | ⨜ | | \lowint | ⨝ | | \Join | +| ⨞ | | \bigtriangleleft | ⨟ | | \zcmp | ⨠ | | \zpipe | ⨡ | | \zproject | +| ⨢ | | \ringplus | ⨣ | | \plushat | ⨤ | | \simplus | ⨥ | | \plusdot | +| ⨦ | | \plussim | ⨧ | | \plussubtwo | ⨨ | | \plustrif | ⨩ | | \commaminus | +| ⨪ | | \minusdot | ⨫ | | \minusfdots | ⨬ | | \minusrdots | ⨭ | | \opluslhrim | +| ⨮ | | \oplusrhrim | ⨯ | | \vectimes | ⨰ | | \dottimes | ⨱ | | \timesbar | +| ⨲ | | \btimes | ⨳ | | \smashtimes | ⨴ | | \otimeslhrim | ⨵ | | \otimesrhrim | +| ⨶ | | \otimeshat | ⨷ | | \Otimes | ⨸ | | \odiv | ⨹ | | \triangleplus | +| ⨺ | | \triangleminus | ⨻ | | \triangletimes | ⨼ | | \intprod | ⨽ | | \intprodr | +| ⨾ | | \fcmp | ⩀ | | \capdot | ⩁ | | \uminus | ⩂ | | \barcup | +| ⩃ | | \barcap | ⩄ | | \capwedge | ⩅ | | \cupvee | ⩆ | | \cupovercap | +| ⩇ | | \capovercup | ⩈ | | \cupbarcap | ⩉ | | \capbarcup | ⩊ | | \twocups | +| ⩋ | | \twocaps | ⩌ | | \closedvarcup | ⩍ | | \closedvarcap | ⩎ | | \Sqcap | +| ⩏ | | \Sqcup | ⩐ | | \closedvarcupsmashprod | ⩑ | | \wedgeodot | ⩒ | | \veeodot | +| ⩓ | | \Wedge | ⩔ | | \Vee | ⩕ | | \wedgeonwedge | ⩗ | | \bigslopedvee | +| ⩘ | | \bigslopedwedge | ⩙ | | \veeonwedge | ⩚ | | \wedgemidvert | ⩛ | | \veemidvert | +| ⩜ | | \midbarwedge | ⩝ | | \midbarvee | ⩟ | | \wedgebar | ⩠ | | \wedgedoublebar | +| ⩡ | | \varveebar | ⩢ | | \doublebarvee | ⩣ | | \veedoublebar | ⩤ | | \dsub | +| ⩥ | | \rsub | ⩦ | | \eqdot | ⩧ | | \dotequiv | ⩨ | | \equivVert | +| ⩩ | | \equivVvert | ⩪ | | \dotsim | ⩫ | | \simrdots | ⩬ | | \simminussim | +| ⩭ | | \congdot | ⩯ | | \hatapprox | ⩰ | | \approxeqq | ⩱ | | \eqqplus | +| ⩲ | | \pluseqq | ⩳ | | \eqqsim | ⩴ | | \Coloneqq | ⩷ | | \ddotseq | +| ⩸ | | \equivDD | ⩹ | | \ltcir | ⩺ | | \gtcir | ⩻ | | \ltquest | +| ⩼ | | \gtquest | ⩽ | | \leqslant | ⩾ | | \geqslant | ⩿ | | \lesdot | +| ⪀ | | \gesdot | ⪁ | | \lesdoto | ⪂ | | \gesdoto | ⪃ | | \lesdotor | +| ⪄ | | \gesdotol | ⪅ | | \lessapprox | ⪆ | | \gtrapprox | ⪇ | | \lneq | +| ⪈ | | \gneq | ⪉ | | \lnapprox | ⪊ | | \gnapprox | ⪋ | | \lesseqqgtr | +| ⪌ | | \gtreqqless | ⪍ | | \lsime | ⪎ | | \gsime | ⪏ | | \lsimg | +| ⪐ | | \gsiml | ⪑ | | \lgE | ⪒ | | \glE | ⪓ | | \lesges | +| ⪔ | | \gesles | ⪕ | | \eqslantless | ⪖ | | \eqslantgtr | ⪗ | | \elsdot | +| ⪘ | | \egsdot | ⪙ | | \eqqless | ⪚ | | \eqqgtr | ⪛ | | \eqqslantless | +| ⪜ | | \eqqslantgtr | ⪝ | | \simless | ⪞ | | \simgtr | ⪟ | | \simlE | +| ⪠ | | \simgE | ⪣ | | \partialmeetcontraction | ⪤ | | \glj | ⪥ | | \gla | +| ⪨ | | \lescc | ⪩ | | \gescc | ⪪ | | \smt | ⪫ | | \lat | +| ⪬ | | \smte | ⪭ | | \late | ⪮ | | \bumpeqq | ⪱ | | \precneq | +| ⪲ | | \succneq | ⪳ | | \preceqq | ⪴ | | \succeqq | ⪵ | | \precneqq | +| ⪶ | | \succneqq | ⪷ | | \precapprox | ⪸ | | \succapprox | ⪹ | | \precnapprox | +| ⪺ | | \succnapprox | ⪽ | | \subsetdot | ⪾ | | \supsetdot | ⪿ | | \subsetplus | +| ⫀ | | \supsetplus | ⫁ | | \submult | ⫂ | | \supmult | ⫃ | | \subedot | +| ⫄ | | \supedot | ⫅ | | \subseteqq | ⫆ | | \supseteqq | ⫇ | | \subsim | +| ⫈ | | \supsim | ⫉ | | \subsetapprox | ⫊ | | \supsetapprox | ⫋ | | \subsetneqq | +| ⫌ | | \supsetneqq | ⫍ | | \lsqhook | ⫎ | | \rsqhook | ⫏ | | \csub | +| ⫐ | | \csup | ⫑ | | \csube | ⫒ | | \csupe | ⫓ | | \subsup | +| ⫔ | | \supsub | ⫕ | | \subsub | ⫖ | | \supsup | ⫗ | | \suphsub | +| ⫘ | | \supdsub | ⫙ | | \forkv | ⫚ | | \topfork | ⫛ | | \mlcp | +| ⫝̸ | | \forks | ⫝ | | \forksnot | ⫞ | | \shortlefttack | ⫟ | | \shortdowntack | +| ⫠ | | \shortuptack | ⫡ | | \perps | ⫢ | | \vDdash | ⫣ | | \dashV | +| ⫤ | | \Dashv | ⫥ | | \DashV | ⫦ | | \varVdash | ⫧ | | \Barv | +| ⫨ | | \vBar | ⫩ | | \vBarv | ⫫ | | \Vbar | ⫬ | | \Not | +| ⫭ | | \bNot | ⫮ | | \revnmid | ⫯ | | \cirmid | ⫰ | | \midcir | +| ⫱ | | \topcir | ⫲ | | \nhpar | ⫳ | | \parsim | ⫴ | | \interleave | +| ⫵ | | \nhVvert | ⫶ | | \threedotcolon | ⫷ | | \lllnest | ⫸ | | \gggnest | +| ⫹ | | \leqqslant | ⫺ | | \geqqslant | ⫻ | | \trslash | ⫼ | | \biginterleave | +| ⫾ | | \talloblong | ⫿ | | \bigtalloblong | ⬒ | | \squaretopblack | ⬓ | | \squarebotblack | +| ⬔ | | \squareurblack | ⬕ | | \squarellblack | ⬖ | | \diamondleftblack | ⬗ | | \diamondrightblack | +| ⬘ | | \diamondtopblack | ⬙ | | \diamondbotblack | ⬚ | | \dottedsquare | ⬛ | | \lgblksquare | +| ⬜ | | \lgwhtsquare | ⬝ | | \vysmblksquare | ⬞ | | \vysmwhtsquare | ⬟ | | \pentagonblack | +| ⬠ | | \pentagon | ⬡ | | \varhexagon | ⬢ | | \varhexagonblack | ⬣ | | \hexagonblack | +| ⬤ | | \lgblkcircle | ⬥ | | \mdblkdiamond | ⬦ | | \mdwhtdiamond | ⬧ | | \mdblklozenge | +| ⬨ | | \mdwhtlozenge | ⬩ | | \smblkdiamond | ⬪ | | \smblklozenge | ⬫ | | \smwhtlozenge | +| ⬬ | | \blkhorzoval | ⬭ | | \whthorzoval | ⬮ | | \blkvertoval | ⬯ | | \whtvertoval | +| ⬰ | | \circleonleftarrow | ⬱ | | \leftthreearrows | ⬲ | | \leftarrowonoplus | ⬳ | | \longleftsquigarrow | +| ⬴ | | \nvtwoheadleftarrow | ⬵ | | \nVtwoheadleftarrow | ⬶ | | \twoheadmapsfrom | ⬷ | | \twoheadleftdbkarrow | +| ⬸ | | \leftdotarrow | ⬹ | | \nvleftarrowtail | ⬺ | | \nVleftarrowtail | ⬻ | | \twoheadleftarrowtail | +| ⬼ | | \nvtwoheadleftarrowtail | ⬽ | | \nVtwoheadleftarrowtail | ⬾ | | \leftarrowx | ⬿ | | \leftcurvedarrow | +| ⭀ | | \equalleftarrow | ⭁ | | \bsimilarleftarrow | ⭂ | | \leftarrowbackapprox | ⭃ | | \rightarrowgtr | +| ⭄ | | \rightarrowsupset | ⭅ | | \LLeftarrow | ⭆ | | \RRightarrow | ⭇ | | \bsimilarrightarrow | +| ⭈ | | \rightarrowbackapprox | ⭉ | | \similarleftarrow | ⭊ | | \leftarrowapprox | ⭋ | | \leftarrowbsimilar | +| ⭌ | | \rightarrowbsimilar | ⭐ | | \medwhitestar | ⭑ | | \medblackstar | ⭒ | | \smwhitestar | +| ⭓ | | \rightpentagonblack | ⭔ | | \rightpentagon | 〒 | | \postalmark | 〰 | | \hzigzag | ### amssymb | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | |---------------|----------|----------|---------------|----------|----------|---------------|----------|----------|---------------|----------|----------| -| ⩾̸ | | \ngeqslant | ⩾ | | \geqslant | ⩽̸ | | \nleqslant | ⩽ | | \leqslant | -| ð | | \eth | | | | | | | | | | +| ð | | \eth | ⩽ | | \leqslant | ⩽̸ | | \nleqslant | ⩾ | | \geqslant | +| ⩾̸ | | \ngeqslant | | | | | | | | | | -### wasysym +### arevmath | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | |---------------|----------|----------|---------------|----------|----------|---------------|----------|----------|---------------|----------|----------| -| ☾ | \leftmoon | | ☽ | \rightmoon | | | | | | | | +| ð | | \eth | | | | | | | | | | -### pmboxdraw +### MinionPro | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | |---------------|----------|----------|---------------|----------|----------|---------------|----------|----------|---------------|----------|----------| -| ▟ | \pmboxdrawuni{259F} | | ▞ | \pmboxdrawuni{259E} | | ▝ | \pmboxdrawuni{259D} | | ▜ | \pmboxdrawuni{259C} | | -| ▛ | \pmboxdrawuni{259B} | | ▚ | \pmboxdrawuni{259A} | | ▙ | \pmboxdrawuni{2599} | | ▘ | \pmboxdrawuni{2598} | | -| ▗ | \pmboxdrawuni{2597} | | ▖ | \pmboxdrawuni{2596} | | ▕ | \pmboxdrawuni{2595} | | ▔ | \pmboxdrawuni{2594} | | -| ▓ | \textdkshade | | ▒ | \textshade | | ░ | \textltshade | | ▐ | \textrtblock | | -| ▏ | \pmboxdrawuni{258F} | | ▎ | \pmboxdrawuni{258E} | | ▍ | \pmboxdrawuni{258D} | | ▌ | \textlfblock | | -| ▋ | \pmboxdrawuni{258B} | | ▊ | \pmboxdrawuni{258A} | | ▉ | \pmboxdrawuni{2589} | | █ | \textblock | | -| ▇ | \pmboxdrawuni{2587} | | ▆ | \pmboxdrawuni{2586} | | ▅ | \pmboxdrawuni{2585} | | ▄ | \textdnblock | | -| ▃ | \pmboxdrawuni{2583} | | ▂ | \pmboxdrawuni{2582} | | ▁ | \pmboxdrawuni{2581} | | ▀ | \textupblock | | -| ╿ | \pmboxdrawuni{257F} | | ╾ | \pmboxdrawuni{257E} | | ╽ | \pmboxdrawuni{257D} | | ╼ | \pmboxdrawuni{257C} | | -| ╻ | \pmboxdrawuni{257B} | | ╺ | \pmboxdrawuni{257A} | | ╹ | \pmboxdrawuni{2579} | | ╸ | \pmboxdrawuni{2578} | | -| ╷ | \pmboxdrawuni{2577} | | ╶ | \pmboxdrawuni{2576} | | ╵ | \pmboxdrawuni{2575} | | ╴ | \pmboxdrawuni{2574} | | -| ╬ | \textSFxliv | | ╫ | \textSFliii | | ╪ | \textSFliv | | ╩ | \textSFxl | | -| ╨ | \textSFxlvi | | ╧ | \textSFxlv | | ╦ | \textSFxli | | ╥ | \textSFxlviii | | -| ╤ | \textSFxlvii | | ╣ | \textSFxxiii | | ╢ | \textSFxx | | ╡ | \textSFxix | | -| ╠ | \textSFxlii | | ╟ | \textSFxxxvii | | ╞ | \textSFxxxvi | | ╝ | \textSFxxvi | | -| ╜ | \textSFxxvii | | ╛ | \textSFxxviii | | ╚ | \textSFxxxviii | | ╙ | \textSFxlix | | -| ╘ | \textSFl | | ╗ | \textSFxxv | | ╖ | \textSFxxi | | ╕ | \textSFxxii | | -| ╔ | \textSFxxxix | | ╓ | \textSFlii | | ╒ | \textSFli | | ║ | \textSFxxiv | | -| ═ | \textSFxliii | | ╋ | \pmboxdrawuni{254B} | | ╊ | \pmboxdrawuni{254A} | | ╉ | \pmboxdrawuni{2549} | | -| ╈ | \pmboxdrawuni{2548} | | ╇ | \pmboxdrawuni{2547} | | ╆ | \pmboxdrawuni{2546} | | ╅ | \pmboxdrawuni{2545} | | -| ╄ | \pmboxdrawuni{2544} | | ╃ | \pmboxdrawuni{2543} | | ╂ | \pmboxdrawuni{2542} | | ╁ | \pmboxdrawuni{2541} | | -| ╀ | \pmboxdrawuni{2540} | | ┿ | \pmboxdrawuni{253F} | | ┾ | \pmboxdrawuni{253E} | | ┽ | \pmboxdrawuni{253D} | | -| ┼ | \textSFv | | ┻ | \pmboxdrawuni{253B} | | ┺ | \pmboxdrawuni{253A} | | ┹ | \pmboxdrawuni{2539} | | -| ┸ | \pmboxdrawuni{2538} | | ┷ | \pmboxdrawuni{2537} | | ┶ | \pmboxdrawuni{2536} | | ┵ | \pmboxdrawuni{2535} | | -| ┴ | \textSFvii | | ┳ | \pmboxdrawuni{2533} | | ┲ | \pmboxdrawuni{2532} | | ┱ | \pmboxdrawuni{2531} | | -| ┰ | \pmboxdrawuni{2530} | | ┯ | \pmboxdrawuni{252F} | | ┮ | \pmboxdrawuni{252E} | | ┭ | \pmboxdrawuni{252D} | | -| ┬ | \textSFvi | | ┫ | \pmboxdrawuni{252B} | | ┪ | \pmboxdrawuni{252A} | | ┩ | \pmboxdrawuni{2529} | | -| ┨ | \pmboxdrawuni{2528} | | ┧ | \pmboxdrawuni{2527} | | ┦ | \pmboxdrawuni{2526} | | ┥ | \pmboxdrawuni{2525} | | -| ┤ | \textSFix | | ┣ | \pmboxdrawuni{2523} | | ┢ | \pmboxdrawuni{2522} | | ┡ | \pmboxdrawuni{2521} | | -| ┠ | \pmboxdrawuni{2520} | | ┟ | \pmboxdrawuni{251F} | | ┞ | \pmboxdrawuni{251E} | | ┝ | \pmboxdrawuni{251D} | | -| ├ | \textSFviii | | ┛ | \pmboxdrawuni{251B} | | ┚ | \pmboxdrawuni{251A} | | ┙ | \pmboxdrawuni{2519} | | -| ┘ | \textSFiv | | ┗ | \pmboxdrawuni{2517} | | ┖ | \pmboxdrawuni{2516} | | ┕ | \pmboxdrawuni{2515} | | -| └ | \textSFii | | ┓ | \pmboxdrawuni{2513} | | ┒ | \pmboxdrawuni{2512} | | ┑ | \pmboxdrawuni{2511} | | -| ┐ | \textSFiii | | ┏ | \pmboxdrawuni{250F} | | ┎ | \pmboxdrawuni{250E} | | ┍ | \pmboxdrawuni{250D} | | -| ┌ | \textSFi | | ┃ | \pmboxdrawuni{2503} | | │ | \textSFxi | | ━ | \pmboxdrawuni{2501} | | -| ─ | \textSFx | | | | | | | | | | | +| ϐ | | \varbeta | ϰ | | \varkappa | | | | | | | -### inputenx +### mathrsfs | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | |---------------|----------|----------|---------------|----------|----------|---------------|----------|----------|---------------|----------|----------| -| ≈ | \textapproxequal | | ɸ | \textphi | | Ħ | \textmalteseH | | | | | +| ℊ | | \mathscr{g} | ℋ | | \mathscr{H} | ℐ | | \mathscr{I} | ℒ | | \mathscr{L} | +| ℛ | | \mathscr{R} | ℬ | | \mathscr{B} | ℯ | | \mathscr{e} | ℰ | | \mathscr{E} | +| ℱ | | \mathscr{F} | ℳ | | \mathscr{M} | ℴ | | \mathscr{o} | 𝒜 | | \mathscr{A} | +| 𝒞 | | \mathscr{C} | 𝒟 | | \mathscr{D} | 𝒢 | | \mathscr{G} | 𝒥 | | \mathscr{J} | +| 𝒦 | | \mathscr{K} | 𝒩 | | \mathscr{N} | 𝒪 | | \mathscr{O} | 𝒫 | | \mathscr{P} | +| 𝒬 | | \mathscr{Q} | 𝒮 | | \mathscr{S} | 𝒯 | | \mathscr{T} | 𝒰 | | \mathscr{U} | +| 𝒱 | | \mathscr{V} | 𝒲 | | \mathscr{W} | 𝒳 | | \mathscr{X} | 𝒴 | | \mathscr{Y} | +| 𝒵 | | \mathscr{Z} | 𝒶 | | \mathscr{a} | 𝒷 | | \mathscr{b} | 𝒸 | | \mathscr{c} | +| 𝒹 | | \mathscr{d} | 𝒻 | | \mathscr{f} | 𝒽 | | \mathscr{h} | 𝒾 | | \mathscr{i} | +| 𝒿 | | \mathscr{j} | 𝓀 | | \mathscr{k} | 𝓁 | | \mathscr{l} | 𝓂 | | \mathscr{m} | +| 𝓃 | | \mathscr{n} | 𝓅 | | \mathscr{p} | 𝓆 | | \mathscr{q} | 𝓇 | | \mathscr{r} | +| 𝓈 | | \mathscr{s} | 𝓉 | | \mathscr{t} | 𝓊 | | \mathscr{u} | 𝓋 | | \mathscr{v} | +| 𝓌 | | \mathscr{w} | 𝓍 | | \mathscr{x} | 𝓎 | | \mathscr{y} | 𝓏 | | \mathscr{z} | -### xecjk +### MnSymbol | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | |---------------|----------|----------|---------------|----------|----------|---------------|----------|----------|---------------|----------|----------| -| ≂ | | \texteqsim | ĸ | \textkra | | ז | \hebzayin | | י | \hebyod | | -| ו | \hebvav | | צ | \hebtsadi | | ט | \hebtet | | ת | \hebtav | | -| ש | \hebshin | | ס | \hebsamekh | | ר | \hebresh | | ק | \hebqof | | -| פ | \hebpe | | נ | \hebnun | | מ | \hebmem | | ל | \heblamed | | -| כ | \hebkaf | | ח | \hebhet | | ה | \hebhe | | ג | \hebgimel | | -| ץ | \hebfinaltsadi | | ף | \hebfinalpe | | ן | \hebfinalnun | | ם | \hebfinalmem | | -| ך | \hebfinalkaf | | ד | \hebdalet | | ב | \hebbet | | ע | \hebayin | | -| א | \hebalef | | | | | | | | | | | +| ∲ | | \lcirclerightint | ∳ | | \rcirclerightint | | | | | | | ### mathabx @@ -627,84 +585,126 @@ Some of us though are bound to outlets that still demand BibTeX, and there's gee | ∸ | | \dotdiv | | | | | | | | | | -### MnSymbol +### xecjk | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | |---------------|----------|----------|---------------|----------|----------|---------------|----------|----------|---------------|----------|----------| -| ∳ | | \rcirclerightint | ∲ | | \lcirclerightint | | | | | | | +| ≂ | | \texteqsim | א | \hebalef | | ע | \hebayin | | ב | \hebbet | | +| ד | \hebdalet | | ך | \hebfinalkaf | | ם | \hebfinalmem | | ן | \hebfinalnun | | +| ף | \hebfinalpe | | ץ | \hebfinaltsadi | | ג | \hebgimel | | ה | \hebhe | | +| ח | \hebhet | | כ | \hebkaf | | ל | \heblamed | | מ | \hebmem | | +| נ | \hebnun | | פ | \hebpe | | ק | \hebqof | | ר | \hebresh | | +| ס | \hebsamekh | | ש | \hebshin | | ת | \hebtav | | ט | \hebtet | | +| צ | \hebtsadi | | ו | \hebvav | | י | \hebyod | | ז | \hebzayin | | +| ĸ | \textkra | | | | | | | | | | | -### graphics +### textcomp | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | |---------------|----------|----------|---------------|----------|----------|---------------|----------|----------|---------------|----------|----------| -| ↳ | \reflectbox{\carriagereturn} | | | | | | | | | | | +| ¢ | \textcent | | ¤ | \textcurrency | | ¥ | \textyen | | ฿ | \textbaht | | +| ₡ | \textcolonmonetary | | ₤ | \textlira | | ₦ | \textnaira | | ₧ | \textpeseta | | +| ₩ | \textwon | | ₫ | \textdong | | ₱ | \textpeso | | ¦ | \textbrokenbar | | +| © | \textcopyright | | ª | \textordfeminine | | ° | \textdegree | | ¶ | \textparagraph | | +| º | \textordmasculine | | ð | \textdh | | ˙ | \textperiodcentered | | • | \textbullet | | +| ‰ | \textperthousand | | ‱ | \textpertenthousand | | ℞ | \textrecipe | | ™ | \texttrademark | | +| ↑ | \textuparrow | | → | \textrightarrow | | | | | | | | -### textcomp +### inputenx | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | |---------------|----------|----------|---------------|----------|----------|---------------|----------|----------|---------------|----------|----------| -| → | \textrightarrow | | ↑ | \textuparrow | | ™ | \texttrademark | | ℞ | \textrecipe | | -| ‱ | \textpertenthousand | | ‰ | \textperthousand | | • | \textbullet | | ˙ | \textperiodcentered | | -| ð | \textdh | | º | \textordmasculine | | ¶ | \textparagraph | | ° | \textdegree | | -| ª | \textordfeminine | | © | \textcopyright | | ¦ | \textbrokenbar | | ₱ | \textpeso | | -| ₫ | \textdong | | ₩ | \textwon | | ₧ | \textpeseta | | ₦ | \textnaira | | -| ₤ | \textlira | | ₡ | \textcolonmonetary | | ฿ | \textbaht | | ¥ | \textyen | | -| ¤ | \textcurrency | | ¢ | \textcent | | | | | | | | +| Ħ | \textmalteseH | | ɸ | \textphi | | ≈ | \textapproxequal | | | | | ### tipa | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | |---------------|----------|----------|---------------|----------|----------|---------------|----------|----------|---------------|----------|----------| -| ₔ | \textsubscript{\textschwa} | | ̽ | \textovercross | | ̼ | \textseagull | | ̻ | \textsubsquare | | -| ̺ | \textinvsubbridge | | ̹ | \textsubrhalfring | | ̴ | \textsuperimposetilde | | ̱ | \textsubbar | | -| ̰ | \textsubtilde | | ̯ | \textsubarch | | ̬ | \textsubwedge | | ̪ | \textsubbridge | | -| ̩ | \textsyllabic | | ̥ | \textsubring | | ̤ | \textsubumlaut | | ̟ | \textsubplus | | -| ̞ | \textlowering | | ̝ | \textraising | | ̜ | \textsublhalfring | | ̚ | \textcorner | | -| ̙ | \textretracting | | ̘ | \textadvancing | | ̐ | \textdotbreve | | ̎ | \textdoublevbaraccent | | -| ̍ | \textvbaraccent | | ̊̄ | \textringmacron | | ̇̆ | \textdotbreve | | ̇́ | \textdotacute | | -| ̆̄ | \textbrevemacron | | ̄̀ | \textgravemacron | | ̃̇ | \texttildedot | | ̂̇ | \textcircumdot | | -| ́̌ | \textacutewedge | | ́̄ | \textacutemacron | | ̀̇ | \textgravedot | | ̀̄ | \textgravemacron | | -| ˩ | \tone{11} | | ˨ | \tone{22} | | ˧ | \tone{33} | | ˦ | \tone{44} | | -| ˥ | \tone{55} | | ʞ | \textturnk | | ɸ | \textphi | | ɤ | \textrevscripta | | -| ɣ | \textipa{G} | | ə | \textschwa | | ɖ | \textrtaild | | ɔ | \textipa{O} | | -| ɒ | textipa{\textopeno} | | ɐ | \textipa{\textturna} | | ƞ | \textipa{\textnrleg} | | ƕ | \texthvlig | | -| ħ | \textcrh | | | | | | | | | | | +| ħ | \textcrh | | ƕ | \texthvlig | | ƞ | \textipa{\textnrleg} | | ɐ | \textipa{\textturna} | | +| ɒ | textipa{\textopeno} | | ɔ | \textipa{O} | | ɖ | \textrtaild | | ə | \textschwa | | +| ɣ | \textipa{G} | | ɤ | \textrevscripta | | ɸ | \textphi | | ʞ | \textturnk | | +| ˥ | \tone{55} | | ˦ | \tone{44} | | ˧ | \tone{33} | | ˨ | \tone{22} | | +| ˩ | \tone{11} | | ̀̄ | \textgravemacron | | ̀̇ | \textgravedot | | ́̄ | \textacutemacron | | +| ́̌ | \textacutewedge | | ̂̇ | \textcircumdot | | ̃̇ | \texttildedot | | ̄̀ | \textgravemacron | | +| ̆̄ | \textbrevemacron | | ̇́ | \textdotacute | | ̇̆ | \textdotbreve | | ̊̄ | \textringmacron | | +| ̍ | \textvbaraccent | | ̎ | \textdoublevbaraccent | | ̐ | \textdotbreve | | ̘ | \textadvancing | | +| ̙ | \textretracting | | ̚ | \textcorner | | ̜ | \textsublhalfring | | ̝ | \textraising | | +| ̞ | \textlowering | | ̟ | \textsubplus | | ̤ | \textsubumlaut | | ̥ | \textsubring | | +| ̩ | \textsyllabic | | ̪ | \textsubbridge | | ̬ | \textsubwedge | | ̯ | \textsubarch | | +| ̰ | \textsubtilde | | ̱ | \textsubbar | | ̴ | \textsuperimposetilde | | ̹ | \textsubrhalfring | | +| ̺ | \textinvsubbridge | | ̻ | \textsubsquare | | ̼ | \textseagull | | ̽ | \textovercross | | +| ₔ | \textsubscript{\textschwa} | | | | | | | | | | | -### MinionPro +### ipa | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | |---------------|----------|----------|---------------|----------|----------|---------------|----------|----------|---------------|----------|----------| -| ϰ | | \varkappa | ϐ | | \varbeta | | | | | | | +| ɯ | \textturnm | | | | | | | | | | | -### textalpha +### mathscinet | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | |---------------|----------|----------|---------------|----------|----------|---------------|----------|----------|---------------|----------|----------| -| α | \textalpha | | | | | | | | | | | +| ʿ | \lasp | | | | | | | | | | | -### mathscinet +### textalpha | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | |---------------|----------|----------|---------------|----------|----------|---------------|----------|----------|---------------|----------|----------| -| ʿ | \lasp | | | | | | | | | | | +| α | \textalpha | | | | | | | | | | | -### ipa +### graphics | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | |---------------|----------|----------|---------------|----------|----------|---------------|----------|----------|---------------|----------|----------| -| ɯ | \textturnm | | | | | | | | | | | +| ↳ | \reflectbox{\carriagereturn} | | | | | | | | | | | -### arevmath +### pmboxdraw | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | **character** | **text** | **math** | |---------------|----------|----------|---------------|----------|----------|---------------|----------|----------|---------------|----------|----------| -| ð | | \eth | | | | | | | | | | +| ─ | \textSFx | | ━ | \pmboxdrawuni{2501} | | │ | \textSFxi | | ┃ | \pmboxdrawuni{2503} | | +| ┌ | \textSFi | | ┍ | \pmboxdrawuni{250D} | | ┎ | \pmboxdrawuni{250E} | | ┏ | \pmboxdrawuni{250F} | | +| ┐ | \textSFiii | | ┑ | \pmboxdrawuni{2511} | | ┒ | \pmboxdrawuni{2512} | | ┓ | \pmboxdrawuni{2513} | | +| └ | \textSFii | | ┕ | \pmboxdrawuni{2515} | | ┖ | \pmboxdrawuni{2516} | | ┗ | \pmboxdrawuni{2517} | | +| ┘ | \textSFiv | | ┙ | \pmboxdrawuni{2519} | | ┚ | \pmboxdrawuni{251A} | | ┛ | \pmboxdrawuni{251B} | | +| ├ | \textSFviii | | ┝ | \pmboxdrawuni{251D} | | ┞ | \pmboxdrawuni{251E} | | ┟ | \pmboxdrawuni{251F} | | +| ┠ | \pmboxdrawuni{2520} | | ┡ | \pmboxdrawuni{2521} | | ┢ | \pmboxdrawuni{2522} | | ┣ | \pmboxdrawuni{2523} | | +| ┤ | \textSFix | | ┥ | \pmboxdrawuni{2525} | | ┦ | \pmboxdrawuni{2526} | | ┧ | \pmboxdrawuni{2527} | | +| ┨ | \pmboxdrawuni{2528} | | ┩ | \pmboxdrawuni{2529} | | ┪ | \pmboxdrawuni{252A} | | ┫ | \pmboxdrawuni{252B} | | +| ┬ | \textSFvi | | ┭ | \pmboxdrawuni{252D} | | ┮ | \pmboxdrawuni{252E} | | ┯ | \pmboxdrawuni{252F} | | +| ┰ | \pmboxdrawuni{2530} | | ┱ | \pmboxdrawuni{2531} | | ┲ | \pmboxdrawuni{2532} | | ┳ | \pmboxdrawuni{2533} | | +| ┴ | \textSFvii | | ┵ | \pmboxdrawuni{2535} | | ┶ | \pmboxdrawuni{2536} | | ┷ | \pmboxdrawuni{2537} | | +| ┸ | \pmboxdrawuni{2538} | | ┹ | \pmboxdrawuni{2539} | | ┺ | \pmboxdrawuni{253A} | | ┻ | \pmboxdrawuni{253B} | | +| ┼ | \textSFv | | ┽ | \pmboxdrawuni{253D} | | ┾ | \pmboxdrawuni{253E} | | ┿ | \pmboxdrawuni{253F} | | +| ╀ | \pmboxdrawuni{2540} | | ╁ | \pmboxdrawuni{2541} | | ╂ | \pmboxdrawuni{2542} | | ╃ | \pmboxdrawuni{2543} | | +| ╄ | \pmboxdrawuni{2544} | | ╅ | \pmboxdrawuni{2545} | | ╆ | \pmboxdrawuni{2546} | | ╇ | \pmboxdrawuni{2547} | | +| ╈ | \pmboxdrawuni{2548} | | ╉ | \pmboxdrawuni{2549} | | ╊ | \pmboxdrawuni{254A} | | ╋ | \pmboxdrawuni{254B} | | +| ═ | \textSFxliii | | ║ | \textSFxxiv | | ╒ | \textSFli | | ╓ | \textSFlii | | +| ╔ | \textSFxxxix | | ╕ | \textSFxxii | | ╖ | \textSFxxi | | ╗ | \textSFxxv | | +| ╘ | \textSFl | | ╙ | \textSFxlix | | ╚ | \textSFxxxviii | | ╛ | \textSFxxviii | | +| ╜ | \textSFxxvii | | ╝ | \textSFxxvi | | ╞ | \textSFxxxvi | | ╟ | \textSFxxxvii | | +| ╠ | \textSFxlii | | ╡ | \textSFxix | | ╢ | \textSFxx | | ╣ | \textSFxxiii | | +| ╤ | \textSFxlvii | | ╥ | \textSFxlviii | | ╦ | \textSFxli | | ╧ | \textSFxlv | | +| ╨ | \textSFxlvi | | ╩ | \textSFxl | | ╪ | \textSFliv | | ╫ | \textSFliii | | +| ╬ | \textSFxliv | | ╴ | \pmboxdrawuni{2574} | | ╵ | \pmboxdrawuni{2575} | | ╶ | \pmboxdrawuni{2576} | | +| ╷ | \pmboxdrawuni{2577} | | ╸ | \pmboxdrawuni{2578} | | ╹ | \pmboxdrawuni{2579} | | ╺ | \pmboxdrawuni{257A} | | +| ╻ | \pmboxdrawuni{257B} | | ╼ | \pmboxdrawuni{257C} | | ╽ | \pmboxdrawuni{257D} | | ╾ | \pmboxdrawuni{257E} | | +| ╿ | \pmboxdrawuni{257F} | | ▀ | \textupblock | | ▁ | \pmboxdrawuni{2581} | | ▂ | \pmboxdrawuni{2582} | | +| ▃ | \pmboxdrawuni{2583} | | ▄ | \textdnblock | | ▅ | \pmboxdrawuni{2585} | | ▆ | \pmboxdrawuni{2586} | | +| ▇ | \pmboxdrawuni{2587} | | █ | \textblock | | ▉ | \pmboxdrawuni{2589} | | ▊ | \pmboxdrawuni{258A} | | +| ▋ | \pmboxdrawuni{258B} | | ▌ | \textlfblock | | ▍ | \pmboxdrawuni{258D} | | ▎ | \pmboxdrawuni{258E} | | +| ▏ | \pmboxdrawuni{258F} | | ▐ | \textrtblock | | ░ | \textltshade | | ▒ | \textshade | | +| ▓ | \textdkshade | | ▔ | \pmboxdrawuni{2594} | | ▕ | \pmboxdrawuni{2595} | | ▖ | \pmboxdrawuni{2596} | | +| ▗ | \pmboxdrawuni{2597} | | ▘ | \pmboxdrawuni{2598} | | ▙ | \pmboxdrawuni{2599} | | ▚ | \pmboxdrawuni{259A} | | +| ▛ | \pmboxdrawuni{259B} | | ▜ | \pmboxdrawuni{259C} | | ▝ | \pmboxdrawuni{259D} | | ▞ | \pmboxdrawuni{259E} | | +| ▟ | \pmboxdrawuni{259F} | | | | | | | | | | | From d4bca5b08a452fa66d9a5f86468f8edc3dc15250 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Wed, 10 Apr 2024 21:59:56 +0200 Subject: [PATCH 021/177] fingers crossed --- content/worker/zotero.ts | 62 ++++++++++++++++++++++------------------ 1 file changed, 34 insertions(+), 28 deletions(-) diff --git a/content/worker/zotero.ts b/content/worker/zotero.ts index 213d001d41..78c2585b8c 100644 --- a/content/worker/zotero.ts +++ b/content/worker/zotero.ts @@ -187,12 +187,10 @@ class WorkerZoteroBetterBibTeX { Zotero.send({ kind: 'progress', percent, translator: workerJob.translator, autoExport: workerJob.autoExport }) } - public getContents(path: string): string { - if (path && $OS.File.exists(path)) { + public async getContents(path: string): Promise { + if (path && await $OS.File.exists(path)) { // https://contest-server.cs.uchicago.edu/ref/JavaScript/developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/OSFile.jsm/OS-2.html - const array = $OS.File.read(path) - const decoder = new TextDecoder() - return decoder.decode(array as BufferSource) + return await $OS.File.read(path, { encoding: 'utf-8' }) } else { return null @@ -265,7 +263,7 @@ const WorkerZoteroUtilities = { function isWinRoot(path) { return workerEnvironment.platform === 'win' && path.match(/^[a-z]:\\?$/i) } -function makeDirs(path) { +async function makeDirs(path) { if (isWinRoot(path)) return if (!$OS.Path.split(path).absolute) throw new Error(`Will not create relative ${path}`) @@ -273,48 +271,54 @@ function makeDirs(path) { const paths: string[] = [] // path === paths[0] means we've hit the root, as the dirname of root is root - while (path !== paths[0] && !isWinRoot(path) && !$OS.File.exists(path)) { + while (path !== paths[0] && !isWinRoot(path) && !(await $OS.File.exists(path))) { paths.unshift(path) path = $OS.Path.dirname(path) } - if (!isWinRoot(path) && !($OS.File.stat(path) as OS.File.FileInfo).isDir) throw new Error(`makeDirs: root ${path} is not a directory`) + if (!isWinRoot(path) && !(await $OS.File.stat(path)).isDir) throw new Error(`makeDirs: root ${path} is not a directory`) for (path of paths) { - $OS.File.makeDir(path) as void + await $OS.File.makeDir(path) as void } } -function saveFile(path, overwrite) { +async function saveFile(path, overwrite) { if (!Zotero.exportDirectory) return false - if (!$OS.File.exists(this.localPath)) return false + if (!await $OS.File.exists(this.localPath)) return false this.path = $OS.Path.normalize($OS.Path.join(Zotero.exportDirectory, path)) if (!this.path.startsWith(Zotero.exportDirectory)) throw new Error(`${path} looks like a relative path`) if (this.linkMode === 'imported_file' || (this.linkMode === 'imported_url' && this.contentType !== 'text/html')) { - makeDirs($OS.Path.dirname(this.path)) + await makeDirs($OS.Path.dirname(this.path)) // eslint-disable-next-line @typescript-eslint/no-floating-promises - $OS.File.copy(this.localPath, this.path, { noOverwrite: !overwrite }) + await $OS.File.copy(this.localPath, this.path, { noOverwrite: !overwrite }) } else if (this.linkMode === 'imported_url') { const target = $OS.Path.dirname(this.path) - if (!overwrite && $OS.File.exists(target)) throw new Error(`${path} would overwite ${target}`) + if (!overwrite && (await $OS.File.exists(target))) throw new Error(`${path} would overwite ${target}`) - $OS.File.removeDir(target, { ignoreAbsent: true }) - makeDirs(target) + await $OS.File.removeDir(target, { ignoreAbsent: true }) + await makeDirs(target) const snapshot = $OS.Path.dirname(this.localPath) const iterator = new $OS.File.DirectoryIterator(snapshot) - // PITA dual-type $OS.Path is promises on main thread but sync in worker - iterator.forEach(entry => { // eslint-disable-line @typescript-eslint/no-floating-promises + const files: { src: string, tgt: string }[] = [] + await iterator.forEach(entry => { // eslint-disable-line @typescript-eslint/no-floating-promises if (entry.isDir) throw new Error(`Unexpected directory ${entry.path} in snapshot`) if (entry.name !== '.zotero-ft-cache') { - // eslint-disable-next-line @typescript-eslint/no-floating-promises - $OS.File.copy($OS.Path.join(snapshot, entry.name), $OS.Path.join(target, entry.name), { noOverwrite: !overwrite }) + files.push({ + src: $OS.Path.join(snapshot, entry.name), + tgt: $OS.Path.join(target, entry.name), + }) } }) + iterator.close() + for (const file of files) { + await $OS.File.copy(file.src, file.tgt, { noOverwrite: !overwrite }) + } } return true @@ -391,7 +395,7 @@ class WorkerZotero { public Date = ZD public Schema: any - public init() { + public async init() { this.Date.init(dateFormats) workerJob.preferences.platform = workerEnvironment.platform @@ -416,7 +420,7 @@ class WorkerZotero { if (!this.exportFile.endsWith(ext)) this.exportFile += ext this.exportDirectory = $OS.Path.dirname(this.exportFile) } - makeDirs(this.exportDirectory) + await makeDirs(this.exportDirectory) } else { this.exportFile = '' @@ -424,13 +428,14 @@ class WorkerZotero { } } - public done() { + public async start() { + await this.init() + doExport() if (this.exportFile) { const encoder = new TextEncoder() const array = encoder.encode(this.output) - $OS.File.writeAtomic(this.exportFile, array) as void + await $OS.File.writeAtomic(this.exportFile, array) as void } - this.send({ kind: 'done', output: this.exportFile ? true : this.output }) } public send(message: Translators.Worker.Message) { @@ -493,6 +498,7 @@ class WorkerZotero { export var Zotero = new WorkerZotero // eslint-disable-line @typescript-eslint/naming-convention,no-underscore-dangle,id-blacklist,id-match,no-var const dec = new TextDecoder('utf-8') + ctx.onmessage = function(e: { isTrusted?: boolean, data?: Translators.Worker.Message } ): void { // eslint-disable-line prefer-arrow/prefer-arrow-functions if (!e.data) return // some kind of startup message @@ -505,9 +511,9 @@ ctx.onmessage = function(e: { isTrusted?: boolean, data?: Translators.Worker.Mes case 'start': Object.assign(workerJob, JSON.parse(dec.decode(new Uint8Array(e.data.config)))) importScripts(`chrome://zotero-better-bibtex/content/resource/${workerJob.translator}.js`) - Zotero.init() - doExport() - Zotero.done() + Zotero.start() + .catch(err => { Zotero.logError(err) }) + .finally(() => { Zotero.send({ kind: 'done', output: Zotero.exportFile ? true : Zotero.output }) }) break case 'stop': From f6967b4d26d0dcac5e9d40824853bf04db3e73ef Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Wed, 10 Apr 2024 22:11:46 +0200 Subject: [PATCH 022/177] could this be it --- test/fixtures/export/Unbalanced vphantom escapes #1043.bibtex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/fixtures/export/Unbalanced vphantom escapes #1043.bibtex b/test/fixtures/export/Unbalanced vphantom escapes #1043.bibtex index dfc84fb7a0..7ba86cda2b 100644 --- a/test/fixtures/export/Unbalanced vphantom escapes #1043.bibtex +++ b/test/fixtures/export/Unbalanced vphantom escapes #1043.bibtex @@ -1,5 +1,5 @@ @article{mies1973, - title = {Molecular {{Theory}} of {{Atomic Collisions}}: {{Calculated Cross Sections}} for \$\{{\textbackslash}mathrm\{\vphantom{\}\}}{{H}}\vphantom\{\}\vphantom\{\}\^{}\{+\}+{\textbackslash}mathrm\{\vphantom\}{{F}}\vphantom\{\}(\^{}\{2\}{{P}})\$\vphantom\{\}}, + title = {Molecular {{Theory}} of {{Atomic Collisions}}: {{Calculated Cross Sections}} for \$\{{\textbackslash}mathrm\{\vphantom{\}\}}{{H}}\vphantom\{\}\vphantom\{\}{\textasciicircum}\{+\}+{\textbackslash}mathrm\{\vphantom\}{{F}}\vphantom\{\}({\textasciicircum}\{2\}{{P}})\$\vphantom\{\}}, shorttitle = {Molecular {{Theory}} of {{Atomic Collisions}}}, author = {Mies, F. H.}, year = {1973}, From 94837edb9c3c05a3c0f9e3cfa67d9d133a53da06 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Wed, 10 Apr 2024 22:15:58 +0200 Subject: [PATCH 023/177] unicode2latex updates --- .../Length filter double-counting characters #2525.biblatex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/fixtures/export/Length filter double-counting characters #2525.biblatex b/test/fixtures/export/Length filter double-counting characters #2525.biblatex index 34b7c7239d..cf988f06ad 100644 --- a/test/fixtures/export/Length filter double-counting characters #2525.biblatex +++ b/test/fixtures/export/Length filter double-counting characters #2525.biblatex @@ -1,5 +1,5 @@ @article{Leach2022-JLTP, - title = {The {{BeEST Experiment}}: {{Searching}} for {{Beyond Standard Model Neutrinos}} Using \$\^{}7\${{Be Decay}} in {{STJs}}}, + title = {The {{BeEST Experiment}}: {{Searching}} for {{Beyond Standard Model Neutrinos}} Using \$\textasciicircum 7\${{Be Decay}} in {{STJs}}}, shorttitle = {The {{BeEST Experiment}}}, author = {Leach, K. G. and Friedrich, S.}, date = {2022-12}, From b3110deb67790b960a61c261794b125d78979444 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Wed, 10 Apr 2024 23:07:11 +0200 Subject: [PATCH 024/177] merge test --- content/test-support.ts | 57 ++++++++++++++++++++---------------- test/features/steps/steps.py | 11 ++++++- 2 files changed, 41 insertions(+), 27 deletions(-) diff --git a/content/test-support.ts b/content/test-support.ts index 7bf4b72501..4363d39468 100644 --- a/content/test-support.ts +++ b/content/test-support.ts @@ -11,6 +11,7 @@ import { defaults } from '../gen/preferences/meta' import { Preference } from './prefs' import * as memory from './memory' import { Events } from './events' +import { is7 } from './client' const setatstart: string[] = ['testing', 'cache'].filter(p => Preference[p] !== defaults[p]) @@ -241,41 +242,45 @@ export class TestSupport { } public async merge(ids: number[]): Promise { - const zoteroPane = Zotero.getActiveZoteroPane() - await zoteroPane.selectItems(ids, true) - const selected = zoteroPane.getSelectedItems() - if (selected.length !== ids.length) throw new Error(`selected: ${selected.length}, expected: ${ids.length}`) + const before = await Zotero.Items.getAll(Zotero.Libraries.userLibraryID, true, false, true) - // zoteroPane.mergeSelectedItems() + if (is7) { + let other = await getItemsAsync(ids) + const master = other.find(item => item.id === ids[0]) + other = other.filter(item => item.id !== ids[0]) + const json = master.toJSON() + // Exclude certain properties that are empty in the cloned object, so we don't clobber them + const { relations: _r, collections: _c, tags: _t, ...keep } = master.clone().toJSON() // eslint-disable-line @typescript-eslint/no-unused-vars + Object.assign(json, keep) + + master.fromJSON(json) + Zotero.Items.merge(master, other) + } + else { + const zoteroPane = Zotero.getActiveZoteroPane() + await zoteroPane.selectItems(ids, true) + const selected = zoteroPane.getSelectedItems() + if (selected.length !== ids.length) throw new Error(`selected: ${selected.length}, expected: ${ids.length}`) - selected.sort((a, b) => ids.indexOf(a.id) - ids.indexOf(b.id)) + // zoteroPane.mergeSelectedItems() - const win = Zotero.getMainWindow() + selected.sort((a, b) => ids.indexOf(a.id) - ids.indexOf(b.id)) - /* - const env = { - Zotero, - window: win, - document: win.document, - Zotero_Duplicates_Pane: win.Zotero_Duplicates_Pane, - setTimeout: setTimeout.bind(win), - clearTimeout: clearTimeout.bind(win), - } - */ + const win = Zotero.getMainWindow() - if (!win.Zotero_Duplicates_Pane) { - Components.classes['@mozilla.org/moz/jssubscript-loader;1'] - .getService(Components.interfaces.mozIJSSubScriptLoader) - .loadSubScript('chrome://zotero/content/duplicatesMerge.js', win) + if (!win.Zotero_Duplicates_Pane) { + Components.classes['@mozilla.org/moz/jssubscript-loader;1'] + .getService(Components.interfaces.mozIJSSubScriptLoader) + .loadSubScript('chrome://zotero/content/duplicatesMerge.js', win) + } + + win.Zotero_Duplicates_Pane.setItems(selected) + await Zotero.Promise.delay(1500) + await win.Zotero_Duplicates_Pane.merge() } - win.Zotero_Duplicates_Pane.setItems(selected) await Zotero.Promise.delay(1500) - const before = await Zotero.Items.getAll(Zotero.Libraries.userLibraryID, true, false, true) - await win.Zotero_Duplicates_Pane.merge() - - await Zotero.Promise.delay(1500) const after = await Zotero.Items.getAll(Zotero.Libraries.userLibraryID, true, false, true) if (before.length - after.length !== (ids.length - 1)) throw new Error(`merging ${ids.length}: before = ${before.length}, after = ${after.length}`) } diff --git a/test/features/steps/steps.py b/test/features/steps/steps.py index e21bb17db1..6696998f74 100644 --- a/test/features/steps/steps.py +++ b/test/features/steps/steps.py @@ -339,7 +339,16 @@ def step_impl(context): @when(u'I merge the selected items') def step_impl(context): assert len(context.selected) > 1 - context.zotero.execute('return await Zotero.BetterBibTeX.TestSupport.merge(selected)', selected=context.selected) + context.zotero.execute(''' + try { + return await Zotero.BetterBibTeX.TestSupport.merge(selected) + } catch (err) { + Zotero.debug('oops on merge') + Zotero.debug(`${err}`) + Zotero.debug(err.stack) + throw err + } + ''', selected=context.selected) @when(u'I empty the trash') def step_impl(context): From c69d9d9a1a84c806af3db4dd1b1dc5cfb1e0ea3f Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Thu, 11 Apr 2024 09:01:48 +0200 Subject: [PATCH 025/177] getcontents sync --- content/worker/zotero.ts | 33 ++++++++++++++++++++++++++++----- test/features/steps/steps.py | 16 ++++++++++------ 2 files changed, 38 insertions(+), 11 deletions(-) diff --git a/content/worker/zotero.ts b/content/worker/zotero.ts index 78c2585b8c..09f09bf37c 100644 --- a/content/worker/zotero.ts +++ b/content/worker/zotero.ts @@ -1,5 +1,7 @@ /* eslint-disable @typescript-eslint/restrict-template-expressions, @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-assignment */ +declare const IOUtils: any + import { Shim } from '../os' import { is7 } from '../client' if (!is7) importScripts('resource://gre/modules/osfile.jsm') @@ -187,12 +189,33 @@ class WorkerZoteroBetterBibTeX { Zotero.send({ kind: 'progress', percent, translator: workerJob.translator, autoExport: workerJob.autoExport }) } - public async getContents(path: string): Promise { - if (path && await $OS.File.exists(path)) { - // https://contest-server.cs.uchicago.edu/ref/JavaScript/developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/OSFile.jsm/OS-2.html - return await $OS.File.read(path, { encoding: 'utf-8' }) + public getContents(path: string): string { + if (!path) return null + + let bytes: Uint8Array | ArrayBuffer + try { + if (is7) { + const file = IOUtils.openFileForSyncReading(path) + bytes = new Uint8Array(64) + file.readBytesInto(bytes, 0) + file.close() + } + else { + if (!OS.File.exists(path)) return null + bytes = OS.File.read(path) + } + } + catch (err) { + // in Zotero 7 we can't check sync for file existence + return null + } + + try { + const decoder = new TextDecoder() + return decoder.decode(bytes as BufferSource) } - else { + catch (err) { + // in Zotero 7 we can't check sync for file existence return null } } diff --git a/test/features/steps/steps.py b/test/features/steps/steps.py index 6696998f74..e411a965f8 100644 --- a/test/features/steps/steps.py +++ b/test/features/steps/steps.py @@ -62,16 +62,20 @@ def step_impl(context, value): @when(u'I create preference override {value}') def step_impl(context, value): - value = json.loads(value) - assert value.startswith('~/'), value - value = os.path.join(context.tmpDir, value[2:]) - with open(value, 'w') as f: + override = json.loads(value) + assert override.startswith('~/'), override + override = os.path.join(context.tmpDir, override[2:]) + with open(override, 'w') as f: json.dump({'override': { 'preferences': {} }}, f) - context.preferenceOverride = value + context.preferenceOverride = override @when(u'I remove preference override {value}') def step_impl(context, value): - os.remove(context.preferenceOverride) + override = json.loads(value) + assert override.startswith('~/'), override + override = os.path.join(context.tmpDir, override[2:]) + assert override == context.preferenceOverride, [ override, context.preferenceOverride ] + os.remove(override) @step('I set preference override {pref} to {value}') def step_impl(context, pref, value): From 3b6788959a56e76dd9fc23bf6ae0f07be10e9a5a Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Thu, 11 Apr 2024 09:33:18 +0200 Subject: [PATCH 026/177] getContents --- content/worker/zotero.ts | 44 +++++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/content/worker/zotero.ts b/content/worker/zotero.ts index 09f09bf37c..d756f0509a 100644 --- a/content/worker/zotero.ts +++ b/content/worker/zotero.ts @@ -192,31 +192,37 @@ class WorkerZoteroBetterBibTeX { public getContents(path: string): string { if (!path) return null - let bytes: Uint8Array | ArrayBuffer try { - if (is7) { - const file = IOUtils.openFileForSyncReading(path) - bytes = new Uint8Array(64) - file.readBytesInto(bytes, 0) - file.close() + dump('getContents in\n') + let bytes: Uint8Array | ArrayBuffer + try { + if (is7) { + const file = IOUtils.openFileForSyncReading(path) + bytes = new Uint8Array(64) + file.readBytesInto(bytes, 0) + file.close() + } + else { + if (!OS.File.exists(path)) return null + bytes = OS.File.read(path) + } } - else { - if (!OS.File.exists(path)) return null - bytes = OS.File.read(path) + catch (err) { + // in Zotero 7 we can't check sync for file existence + return null } - } - catch (err) { - // in Zotero 7 we can't check sync for file existence - return null - } - try { - const decoder = new TextDecoder() - return decoder.decode(bytes as BufferSource) + try { + const decoder = new TextDecoder() + return decoder.decode(bytes as BufferSource) + } + catch (err) { + // in Zotero 7 we can't check sync for file existence + return null + } } catch (err) { - // in Zotero 7 we can't check sync for file existence - return null + dump('getContents out\n') } } From 2d55a92edbd60e2cef8c5a6b637708cbc5280dba Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Thu, 11 Apr 2024 09:42:51 +0200 Subject: [PATCH 027/177] logging --- content/worker/zotero.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/content/worker/zotero.ts b/content/worker/zotero.ts index d756f0509a..1b7e7f5329 100644 --- a/content/worker/zotero.ts +++ b/content/worker/zotero.ts @@ -192,8 +192,8 @@ class WorkerZoteroBetterBibTeX { public getContents(path: string): string { if (!path) return null + dump('getContents in\n') try { - dump('getContents in\n') let bytes: Uint8Array | ArrayBuffer try { if (is7) { @@ -208,20 +208,23 @@ class WorkerZoteroBetterBibTeX { } } catch (err) { + dump(`getContents load: ${err}\n`) // in Zotero 7 we can't check sync for file existence return null } try { const decoder = new TextDecoder() + dump('getContents return\n') return decoder.decode(bytes as BufferSource) } catch (err) { + dump(`getContents decode: ${err}\n`) // in Zotero 7 we can't check sync for file existence return null } } - catch (err) { + finally { dump('getContents out\n') } } From 4f6aea4dd2ee950c7637d0cc25d73c32dfe47b1a Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Thu, 11 Apr 2024 11:42:02 +0200 Subject: [PATCH 028/177] docs would be so helpful --- content/worker/zotero.ts | 52 +++++++++++++++++++--------------------- 1 file changed, 25 insertions(+), 27 deletions(-) diff --git a/content/worker/zotero.ts b/content/worker/zotero.ts index 1b7e7f5329..54dd875444 100644 --- a/content/worker/zotero.ts +++ b/content/worker/zotero.ts @@ -192,40 +192,38 @@ class WorkerZoteroBetterBibTeX { public getContents(path: string): string { if (!path) return null - dump('getContents in\n') + dump(`getContents from ${path}\n`) try { - let bytes: Uint8Array | ArrayBuffer - try { - if (is7) { - const file = IOUtils.openFileForSyncReading(path) - bytes = new Uint8Array(64) - file.readBytesInto(bytes, 0) - file.close() - } - else { - if (!OS.File.exists(path)) return null - bytes = OS.File.read(path) - } + if (is7) { + const file = IOUtils.openFileForSyncReading(path) + const chunkSize = 64 + const bytes = new Uint8Array(chunkSize) + let bytesRead + let text = '' + const decoder = new TextDecoder('utf-8') + do { + bytesRead = file.readBytesInto(bytes, chunkSize) + const chunk = bytes.subarray(0, bytesRead) + text += decoder.decode(chunk) + } while (bytesRead === chunkSize) + file.close() + dump(`getContents ${path} return\n`) + return text } - catch (err) { - dump(`getContents load: ${err}\n`) - // in Zotero 7 we can't check sync for file existence - return null - } - - try { + else { + if (!OS.File.exists(path)) return null + const bytes = OS.File.read(path) const decoder = new TextDecoder() - dump('getContents return\n') + dump(`getContents ${path} return\n`) return decoder.decode(bytes as BufferSource) } - catch (err) { - dump(`getContents decode: ${err}\n`) - // in Zotero 7 we can't check sync for file existence - return null - } + } + catch (err) { + dump(`getContents ${path} error ${err}\n`) + return null } finally { - dump('getContents out\n') + dump(`getContents ${path} out\n`) } } From 9638d4a0426039390fdfadcd3079eb9ad95b2298 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Thu, 11 Apr 2024 12:08:01 +0200 Subject: [PATCH 029/177] lovely all this undocumented stuff --- content/worker/zotero.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/content/worker/zotero.ts b/content/worker/zotero.ts index 54dd875444..bb8e919d29 100644 --- a/content/worker/zotero.ts +++ b/content/worker/zotero.ts @@ -199,13 +199,13 @@ class WorkerZoteroBetterBibTeX { const chunkSize = 64 const bytes = new Uint8Array(chunkSize) let bytesRead - let text = '' const decoder = new TextDecoder('utf-8') - do { + let text = '' + while (!file.eof) { bytesRead = file.readBytesInto(bytes, chunkSize) const chunk = bytes.subarray(0, bytesRead) text += decoder.decode(chunk) - } while (bytesRead === chunkSize) + } file.close() dump(`getContents ${path} return\n`) return text @@ -219,7 +219,7 @@ class WorkerZoteroBetterBibTeX { } } catch (err) { - dump(`getContents ${path} error ${err}\n`) + dump(`getContents ${path} error ${err} ${Object.keys(err)}\n`) return null } finally { From 4d7ce2699bf0fd780f89028f7b41e7e282bab105 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Thu, 11 Apr 2024 12:16:52 +0200 Subject: [PATCH 030/177] filter on message --- content/worker/zotero.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/worker/zotero.ts b/content/worker/zotero.ts index bb8e919d29..dcaaa12ef7 100644 --- a/content/worker/zotero.ts +++ b/content/worker/zotero.ts @@ -219,7 +219,7 @@ class WorkerZoteroBetterBibTeX { } } catch (err) { - dump(`getContents ${path} error ${err} ${Object.keys(err)}\n`) + dump(`getContents ${path} error ${err} ${Object.keys(err)} ${err.message}\n`) return null } finally { From 58ac7b4ff2f156f3056251801a7d2feeaa756bbe Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Thu, 11 Apr 2024 12:25:39 +0200 Subject: [PATCH 031/177] still read beyond end of file? --- content/worker/zotero.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/worker/zotero.ts b/content/worker/zotero.ts index dcaaa12ef7..715e7a9eb2 100644 --- a/content/worker/zotero.ts +++ b/content/worker/zotero.ts @@ -203,7 +203,7 @@ class WorkerZoteroBetterBibTeX { let text = '' while (!file.eof) { bytesRead = file.readBytesInto(bytes, chunkSize) - const chunk = bytes.subarray(0, bytesRead) + const chunk = bytesRead < chunkSize ? bytes.subarray(0, bytesRead) : bytes text += decoder.decode(chunk) } file.close() From 8eaa665a39e88e2aad3eaae4d54f9dc3a57650b2 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Thu, 11 Apr 2024 13:07:54 +0200 Subject: [PATCH 032/177] docs would have been soooooooo useful --- content/worker/zotero.ts | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/content/worker/zotero.ts b/content/worker/zotero.ts index 715e7a9eb2..212c28e137 100644 --- a/content/worker/zotero.ts +++ b/content/worker/zotero.ts @@ -198,14 +198,19 @@ class WorkerZoteroBetterBibTeX { const file = IOUtils.openFileForSyncReading(path) const chunkSize = 64 const bytes = new Uint8Array(chunkSize) - let bytesRead const decoder = new TextDecoder('utf-8') + let offset = 0 + const size = file.size + let text = '' - while (!file.eof) { - bytesRead = file.readBytesInto(bytes, chunkSize) - const chunk = bytesRead < chunkSize ? bytes.subarray(0, bytesRead) : bytes + while (offset < size) { + const len = Math.min(chunkSize, size - offset) + const chunk = len > chunkSize ? bytes : bytes.subarray(0, len) + file.readBytesInto(chunk, offset) text += decoder.decode(chunk) + offset += len } + file.close() dump(`getContents ${path} return\n`) return text @@ -219,7 +224,9 @@ class WorkerZoteroBetterBibTeX { } } catch (err) { - dump(`getContents ${path} error ${err} ${Object.keys(err)} ${err.message}\n`) + if (!err.message?.includes('NS_ERROR_FILE_NOT_FOUND')) { + dump(`getContents ${path} error ${err} ${Object.keys(err)} ${err.message}\n`) + } return null } finally { From 0fcbd1ba96b8ec61fb4704ca7e2a32d89d5cc390 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Thu, 11 Apr 2024 13:56:51 +0200 Subject: [PATCH 033/177] 6.7.174 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index eb8179a14d..493c347143 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "zotero-better-bibtex", - "version": "6.7.173", + "version": "6.7.174", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "zotero-better-bibtex", - "version": "6.7.173", + "version": "6.7.174", "license": "ISC", "dependencies": { "@artsy/to-title-case": "^1.1.0", diff --git a/package.json b/package.json index 9067dac0cf..e699eb5d20 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "zotero-better-bibtex", - "version": "6.7.173", + "version": "6.7.174", "description": "Make Zotero useful for us LaTeX holdouts.", "homepage": "https://retorque.re/zotero-better-bibtex", "license": "ISC", From c5ad62a2a7c5a35899db08816c8ae7526b15e5e0 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Fri, 12 Apr 2024 13:40:23 +0200 Subject: [PATCH 034/177] modules --- submodules/zotero | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/submodules/zotero b/submodules/zotero index 878fc20cec..b44757ad3c 160000 --- a/submodules/zotero +++ b/submodules/zotero @@ -1 +1 @@ -Subproject commit 878fc20cecccf73147816aef212574427c21d6bf +Subproject commit b44757ad3c91401f7c532ea295952bd15e072a20 From 4c3680765895a418e97d1da89e2abbe327cb3227 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Fri, 12 Apr 2024 14:24:17 +0200 Subject: [PATCH 035/177] prep for new parser --- content/better-bibtex.ts | 2 ++ package-lock.json | 25 +++++++++++++------------ package.json | 7 ++++--- 3 files changed, 19 insertions(+), 15 deletions(-) diff --git a/content/better-bibtex.ts b/content/better-bibtex.ts index 5598ab18a5..5172e13baa 100644 --- a/content/better-bibtex.ts +++ b/content/better-bibtex.ts @@ -1,5 +1,7 @@ /* eslint-disable prefer-rest-params */ +require('array.prototype.flatmap/auto') + import { Shim } from './os' import { is7 } from './client' const $OS = is7 ? Shim : OS diff --git a/package-lock.json b/package-lock.json index 353a6ac49e..e26031c546 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,6 +17,7 @@ "@types/tar-js": "^0.3.5", "@ungap/structured-clone": "^1.2.0", "ajv": "^8.12.0", + "array.prototype.flatmap": "^1.3.2", "auto-changelog": "^2.4.0", "base64-js": "^1.5.1", "better-ajv-errors": "^1.2.0", @@ -46,7 +47,7 @@ "pinyin": "^3.1.0", "punycode2": "^1.0.1", "puqeue": "^1.1.4", - "remeda": "^1.58.0", + "remeda": "^1.58.1", "sprintf-js": "^1.1.3", "tar-js": "^0.3.0", "text-title-case": "^1.0.2", @@ -58,7 +59,7 @@ "zotero-plugin": "2.0.14" }, "devDependencies": { - "@retorquere/bibtex-parser": "^8.0.12", + "@retorquere/bibtex-parser": "^8.0.14", "@retorquere/zotero-sync": "^1.0.27", "@types/bluebird": "^3.5.42", "@types/lokijs": "^1.5.14", @@ -113,7 +114,7 @@ "process": "^0.11.10", "properties-reader": "^2.3.0", "pug": "^3.0.2", - "putout": "^35.12.0", + "putout": "^35.13.0", "recast": "^0.23.6", "regenerate": "^1.4.2", "rimraf": "^5.0.5", @@ -2960,9 +2961,9 @@ } }, "node_modules/@retorquere/bibtex-parser": { - "version": "8.0.13", - "resolved": "https://registry.npmjs.org/@retorquere/bibtex-parser/-/bibtex-parser-8.0.13.tgz", - "integrity": "sha512-A3Jxps9u0H4nHRJWLhHa9V+6gfAlv8zkUYbBjkCBYghvafDNcCgqrj6MvWj9QWg19aZUcAG7w7VgwQqbWwuoTQ==", + "version": "8.0.14", + "resolved": "https://registry.npmjs.org/@retorquere/bibtex-parser/-/bibtex-parser-8.0.14.tgz", + "integrity": "sha512-xkXuioN6G6Ed7fSnGe6ZwwsEckcY1psB6O0ZlfcwQf3D515Tn2Z1iPt6sa0wDEB6Z7FVpZMywfaOfdHWOOgR1g==", "dev": true, "dependencies": { "@unified-latex/unified-latex-util-pegjs": "^1.7.1", @@ -11858,9 +11859,9 @@ "integrity": "sha512-EkCRMV2w15w+9wylcpabacKK9VvTRX3TvhVQJBwIk4ThvllI2M6RlvdEZvJLhxsxy4x8IEDZneQhlGU0Pk5keg==" }, "node_modules/putout": { - "version": "35.12.0", - "resolved": "https://registry.npmjs.org/putout/-/putout-35.12.0.tgz", - "integrity": "sha512-B3IcyvfYgINqfbPPU6UE26of0rgLDSgUCmi051zJQI+G9zGUM1hRDcHiofziqohBipp/MKF3VYtj0AVYVdnPIw==", + "version": "35.13.0", + "resolved": "https://registry.npmjs.org/putout/-/putout-35.13.0.tgz", + "integrity": "sha512-x26AuG3MfP3qD0cXou6Oeuca9PX9klQd9ytH+fjaqMIrO9i0AkDiJG+xsvEW9xtR8COV1V24ee/minhcVT8aAg==", "dev": true, "dependencies": { "@putout/babel": "^2.0.0", @@ -13425,9 +13426,9 @@ } }, "node_modules/remeda": { - "version": "1.58.0", - "resolved": "https://registry.npmjs.org/remeda/-/remeda-1.58.0.tgz", - "integrity": "sha512-YZT2U7B6fpZfOYVsT4bJT9SKXhh+jdzMmtoMX2u4+xro/bIXXaloDslnpAOHC4UHGsYegNMbi6hlXrdIzH45kA==" + "version": "1.58.1", + "resolved": "https://registry.npmjs.org/remeda/-/remeda-1.58.1.tgz", + "integrity": "sha512-jTLnELfFSIaQxA7A/lkQdgdOSfzrta22OhRvdp5Y7RY3VY2jSBhXsiJRJbZAULfka/IfQUg1Lt/4rW/r6qNC5Q==" }, "node_modules/remove-blank-lines": { "version": "1.4.1", diff --git a/package.json b/package.json index 9bb7fd9536..bb67641331 100644 --- a/package.json +++ b/package.json @@ -71,6 +71,7 @@ "@types/tar-js": "^0.3.5", "@ungap/structured-clone": "^1.2.0", "ajv": "^8.12.0", + "array.prototype.flatmap": "^1.3.2", "auto-changelog": "^2.4.0", "base64-js": "^1.5.1", "better-ajv-errors": "^1.2.0", @@ -100,7 +101,7 @@ "pinyin": "^3.1.0", "punycode2": "^1.0.1", "puqeue": "^1.1.4", - "remeda": "^1.58.0", + "remeda": "^1.58.1", "sprintf-js": "^1.1.3", "tar-js": "^0.3.0", "text-title-case": "^1.0.2", @@ -112,7 +113,7 @@ "zotero-plugin": "2.0.14" }, "devDependencies": { - "@retorquere/bibtex-parser": "^8.0.12", + "@retorquere/bibtex-parser": "^8.0.14", "@retorquere/zotero-sync": "^1.0.27", "@types/bluebird": "^3.5.42", "@types/lokijs": "^1.5.14", @@ -167,7 +168,7 @@ "process": "^0.11.10", "properties-reader": "^2.3.0", "pug": "^3.0.2", - "putout": "^35.12.0", + "putout": "^35.13.0", "recast": "^0.23.6", "regenerate": "^1.4.2", "rimraf": "^5.0.5", From 8414bcc383d5843c729cff00657d0ed1f6f83107 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Fri, 12 Apr 2024 14:46:07 +0200 Subject: [PATCH 036/177] basics are up --- content/better-bibtex.ts | 1 + package-lock.json | 26 ++++++++++++++++++++++++++ package.json | 1 + translators/Better BibTeX.ts | 8 ++++---- translators/bibtex/bibtex.ts | 3 ++- translators/bibtex/entry.ts | 12 ++++++------ 6 files changed, 40 insertions(+), 11 deletions(-) diff --git a/content/better-bibtex.ts b/content/better-bibtex.ts index 5172e13baa..2a6d0a0952 100644 --- a/content/better-bibtex.ts +++ b/content/better-bibtex.ts @@ -1,6 +1,7 @@ /* eslint-disable prefer-rest-params */ require('array.prototype.flatmap/auto') +require('string.prototype.matchall/auto') import { Shim } from './os' import { is7 } from './client' diff --git a/package-lock.json b/package-lock.json index e26031c546..dd790ced71 100644 --- a/package-lock.json +++ b/package-lock.json @@ -49,6 +49,7 @@ "puqeue": "^1.1.4", "remeda": "^1.58.1", "sprintf-js": "^1.1.3", + "string.prototype.matchall": "^4.0.11", "tar-js": "^0.3.0", "text-title-case": "^1.0.2", "title": "^3.5.3", @@ -14367,6 +14368,31 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, + "node_modules/string.prototype.matchall": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/string.prototype.padend": { "version": "3.1.6", "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.6.tgz", diff --git a/package.json b/package.json index bb67641331..ce53c7b9f5 100644 --- a/package.json +++ b/package.json @@ -103,6 +103,7 @@ "puqeue": "^1.1.4", "remeda": "^1.58.1", "sprintf-js": "^1.1.3", + "string.prototype.matchall": "^4.0.11", "tar-js": "^0.3.0", "text-title-case": "^1.0.2", "title": "^3.5.3", diff --git a/translators/Better BibTeX.ts b/translators/Better BibTeX.ts index 3dfa12b6d2..ce4564f234 100644 --- a/translators/Better BibTeX.ts +++ b/translators/Better BibTeX.ts @@ -127,10 +127,10 @@ export async function doImport(): Promise { if (err.column) item.note += `, column ${err.column}` item.note += ': ' } - item.note += escape.html(err.message) - if (err.source) { - item.note += `
${escape.html(err.source)}
` - Zotero.debug(`import error: ${err.message}\n>>>\n${err.source}\n<<<`) + item.note += escape.html(err.error) + if (err.input) { + Zotero.debug(`import error: ${err.error}\n>>>\n${err.input}\n<<<`) + item.note += `
${escape.html(err.input)}
` } item.note += '' } diff --git a/translators/bibtex/bibtex.ts b/translators/bibtex/bibtex.ts index a4079bbb55..34deb071f8 100644 --- a/translators/bibtex/bibtex.ts +++ b/translators/bibtex/bibtex.ts @@ -876,7 +876,7 @@ export class ZoteroItem { } // eslint-disable-next-line no-control-regex, @typescript-eslint/no-unsafe-return - const parts = record.split(':').map(str => str.replace(/[\u0011\u0012\u0013]/g, escaped => replace[escaped])) + const parts = record.split(':').map(part => part.replace(/[\u0011\u0012\u0013]/g, escaped => replace[escaped])) switch (parts.length) { case 1: att.path = parts[0] @@ -1295,6 +1295,7 @@ export class ZoteroItem { if (this.$note(value, 'note')) continue } + log.debug('parsing', { field, value }) if (this[`$${field}`]?.(value, field)) continue switch (field) { diff --git a/translators/bibtex/entry.ts b/translators/bibtex/entry.ts index cb49818c69..7c4f2ce1de 100644 --- a/translators/bibtex/entry.ts +++ b/translators/bibtex/entry.ts @@ -390,12 +390,12 @@ export class Entry { } /** normalize dashes, mainly for use in `pages` */ - public normalizeDashes(str): string { - str = (str || '').trim() + public normalizeDashes(ranges: string): string { + ranges = (ranges || '').trim() - if (this.item.raw) return str + if (this.item.raw) return ranges - return str + return ranges .replace(/\u2053/g, '~') .replace(/[\u2014\u2015]/g, '---') // em-dash .replace(/[\u2012\u2013]/g, '--') // en-dash @@ -1514,9 +1514,9 @@ export class Entry { } } - private unique_chars(str) { + private unique_chars(bag: string): string { let uniq = '' - for (const c of str) { + for (const c of bag) { if (uniq.indexOf(c) < 0) uniq += c } return uniq From 88944a3763230d7ff0b26851199c8a8ec810b006 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Mon, 15 Apr 2024 02:56:10 +0200 Subject: [PATCH 037/177] closing in --- content/escape.ts | 2 + package-lock.json | 2886 ++++++++++++++++- package.json | 8 +- ...tween href arguments for import #2504.json | 280 +- ...t import groups from JabRef 5.1 #1641.json | 4 +- ...ter BibLaTeX import improvements #549.json | 22 +- test/fixtures/import/Better BibTeX.009.json | 10 +- ... field regenerates citation key #2142.json | 4 +- ...odified menu option not working #2378.json | 4 +- ... excluded from export in 6.7.86 #2555.json | 6 +- ...se64-encoded paths from BibDesk #2374.json | 2 +- .../Double newlines means parbreak #2789.json | 157 +- ...xport properly for APA formating #2494.bib | 6 +- .../import/Improve import of films #1837.json | 6 +- ...ro should be exported untouched #1380.json | 30 +- ...owercase A in BBT Sentence Case #2078.json | 2 +- .../import/Overline during Import #1467.json | 4 +- .../issuenumberarticle-number #2551.json | 2 +- translators/Better BibTeX.ts | 11 +- translators/bibtex/bibtex.ts | 79 +- translators/bibtex/entry.ts | 5 +- 21 files changed, 3084 insertions(+), 446 deletions(-) diff --git a/content/escape.ts b/content/escape.ts index 1fe11ba787..f48d850807 100644 --- a/content/escape.ts +++ b/content/escape.ts @@ -1,4 +1,6 @@ export function html(str: string): string { + // eslint-disable-next-line no-caller + // if (typeof str === 'undefined') Zotero.debug(`${arguments.callee.caller.name} do not pass undefined! ${(new Error('stacktrace')).stack}`) const entity = { '&': '&', '<': '<', diff --git a/package-lock.json b/package-lock.json index dd790ced71..1ea569e527 100644 --- a/package-lock.json +++ b/package-lock.json @@ -47,7 +47,7 @@ "pinyin": "^3.1.0", "punycode2": "^1.0.1", "puqeue": "^1.1.4", - "remeda": "^1.58.1", + "remeda": "^1.59.0", "sprintf-js": "^1.1.3", "string.prototype.matchall": "^4.0.11", "tar-js": "^0.3.0", @@ -60,7 +60,7 @@ "zotero-plugin": "2.0.14" }, "devDependencies": { - "@retorquere/bibtex-parser": "^8.0.14", + "@retorquere/bibtex-parser": "^9.0.2", "@retorquere/zotero-sync": "^1.0.27", "@types/bluebird": "^3.5.42", "@types/lokijs": "^1.5.14", @@ -80,7 +80,7 @@ "diff": "^5.2.0", "dom-parser": "^1.1.5", "dotenv": "^16.4.5", - "ejs": "^3.1.9", + "ejs": "^3.1.10", "esbuild": "^0.20.2", "eslint": "^8.57.0", "estrace": "^5.0.1", @@ -115,7 +115,7 @@ "process": "^0.11.10", "properties-reader": "^2.3.0", "pug": "^3.0.2", - "putout": "^35.13.0", + "putout": "^35.15.0", "recast": "^0.23.6", "regenerate": "^1.4.2", "rimraf": "^5.0.5", @@ -1531,9 +1531,9 @@ } }, "node_modules/@putout/operate": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/@putout/operate/-/operate-12.4.0.tgz", - "integrity": "sha512-hg7JDFuthWPPB/V/dI0NW66assgNdPHJpqJRyUTZP205D57oLtxylIywjlXKRBe6uxrmNMrxjQx9C3XoGN3Omg==", + "version": "12.5.0", + "resolved": "https://registry.npmjs.org/@putout/operate/-/operate-12.5.0.tgz", + "integrity": "sha512-rw6nuh2S8N+qgxOou2IYL4+8gquVoljbOr7W64qcu+paX9ECH5n0ZWhiFfgu2BeT3DKZatGi5GLkK/9RbUBUlQ==", "dev": true, "dependencies": { "@putout/babel": "^2.0.0" @@ -1595,6 +1595,19 @@ "putout": ">=35" } }, + "node_modules/@putout/operator-ignore": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@putout/operator-ignore/-/operator-ignore-1.0.0.tgz", + "integrity": "sha512-HlM2U+WXHL5yTcwNuviU1l18zVX/FBgWdZXDBFStS/Qb20vjvGiW78c5rkxYyjXldhgepQpqHOEBmO15nR5ZFQ==", + "dev": true, + "dependencies": { + "@putout/babel": "^2.4.0", + "@putout/operate": "^12.5.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/@putout/operator-json": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/@putout/operator-json/-/operator-json-2.1.0.tgz", @@ -1955,6 +1968,18 @@ "putout": ">=29" } }, + "node_modules/@putout/plugin-coverage": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@putout/plugin-coverage/-/plugin-coverage-1.0.0.tgz", + "integrity": "sha512-YX44zFIuSgWWxAVc0/uqKbqJDUBthya1QC/ov6H0GRX1vKVkqhCwcUzJ3i9DDyGLrzfhOGfzFagtZys9wRPx2Q==", + "dev": true, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "putout": ">=35" + } + }, "node_modules/@putout/plugin-declare": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@putout/plugin-declare/-/plugin-declare-3.1.0.tgz", @@ -2070,9 +2095,9 @@ } }, "node_modules/@putout/plugin-gitignore": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@putout/plugin-gitignore/-/plugin-gitignore-5.0.0.tgz", - "integrity": "sha512-dQmAyR8P/VWxWdcJ7mSHrPDrsEDSnEcKvvQBSyutW8t73DFS9kZ5ehQ8o2uAvGhKjEW3HcoPK4F5+2DFB8+McA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@putout/plugin-gitignore/-/plugin-gitignore-6.0.0.tgz", + "integrity": "sha512-uiAfT/shB+gsAAdy1I2UBFt005W//wgadEnXIRvwSBiA77u/VkxMJdPO7st2J6bBLTn/4tIh1WAeSuAEGC63QQ==", "dev": true, "engines": { "node": ">=18" @@ -2205,9 +2230,9 @@ } }, "node_modules/@putout/plugin-npmignore": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@putout/plugin-npmignore/-/plugin-npmignore-4.1.0.tgz", - "integrity": "sha512-1cvHbg8EybIS242gL55eAovzZgAoFe+F9K9YLcPQf5mwH4Emj3ak0XIXQtIgbH9iPCJdUT8K+EkmlUfSDm2pMw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@putout/plugin-npmignore/-/plugin-npmignore-5.0.0.tgz", + "integrity": "sha512-k43d+6dCW9tiueQjyq1+h6GAcXuB79VJzBXE8sME5IPk31HVUlYfhWKHB5IaG1DT9F4+BVuyvZbIXYXdeLK+hg==", "dev": true, "engines": { "node": ">=18" @@ -2962,16 +2987,20 @@ } }, "node_modules/@retorquere/bibtex-parser": { - "version": "8.0.14", - "resolved": "https://registry.npmjs.org/@retorquere/bibtex-parser/-/bibtex-parser-8.0.14.tgz", - "integrity": "sha512-xkXuioN6G6Ed7fSnGe6ZwwsEckcY1psB6O0ZlfcwQf3D515Tn2Z1iPt6sa0wDEB6Z7FVpZMywfaOfdHWOOgR1g==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@retorquere/bibtex-parser/-/bibtex-parser-9.0.2.tgz", + "integrity": "sha512-vfUuUX3piWih4J+3ZdWZPhplaiV2oYUgUKBZEHMdg2QTRP7G5BhBzhM0kYqcfEyfS+w+pfNaB4Qs+fTbV0YhIg==", "dev": true, "dependencies": { "@unified-latex/unified-latex-util-pegjs": "^1.7.1", "@unified-latex/unified-latex-util-print-raw": "^1.7.1", "@unified-latex/unified-latex-util-replace": "^1.7.1", "@unified-latex/unified-latex-util-visit": "^1.7.1", + "i": "^0.3.7", + "lodash.merge": "^4.6.2", "moo": "^0.5.2", + "nearley": "^2.20.1", + "npm": "^10.5.2", "unicode2latex": "^6.0.4", "wink-eng-lite-web-model": "^1.6.0", "wink-nlp": "^2.2.0", @@ -5706,9 +5735,9 @@ "integrity": "sha512-qhABI7FiyElTqKNMv4ETT3T4gRIPal3TxvNfx8Ekwhb2HlrWIiyQJJKVTJkVmsG6H6ape6fnZQbaH69bH31a8Q==" }, "node_modules/ejs": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", - "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", "dependencies": { "jake": "^10.8.5" }, @@ -10749,6 +10778,165 @@ "node": ">=0.10.0" } }, + "node_modules/npm": { + "version": "10.5.2", + "resolved": "https://registry.npmjs.org/npm/-/npm-10.5.2.tgz", + "integrity": "sha512-cHVG7QEJwJdZyOrK0dKX5uf3R5Fd0E8AcmSES1jLtO52UT1enUKZ96Onw/xwq4CbrTZEnDuu2Vf9kCQh/Sd12w==", + "bundleDependencies": [ + "@isaacs/string-locale-compare", + "@npmcli/arborist", + "@npmcli/config", + "@npmcli/fs", + "@npmcli/map-workspaces", + "@npmcli/package-json", + "@npmcli/promise-spawn", + "@npmcli/redact", + "@npmcli/run-script", + "@sigstore/tuf", + "abbrev", + "archy", + "cacache", + "chalk", + "ci-info", + "cli-columns", + "cli-table3", + "columnify", + "fastest-levenshtein", + "fs-minipass", + "glob", + "graceful-fs", + "hosted-git-info", + "ini", + "init-package-json", + "is-cidr", + "json-parse-even-better-errors", + "libnpmaccess", + "libnpmdiff", + "libnpmexec", + "libnpmfund", + "libnpmhook", + "libnpmorg", + "libnpmpack", + "libnpmpublish", + "libnpmsearch", + "libnpmteam", + "libnpmversion", + "make-fetch-happen", + "minimatch", + "minipass", + "minipass-pipeline", + "ms", + "node-gyp", + "nopt", + "normalize-package-data", + "npm-audit-report", + "npm-install-checks", + "npm-package-arg", + "npm-pick-manifest", + "npm-profile", + "npm-registry-fetch", + "npm-user-validate", + "npmlog", + "p-map", + "pacote", + "parse-conflict-json", + "proc-log", + "qrcode-terminal", + "read", + "semver", + "spdx-expression-parse", + "ssri", + "supports-color", + "tar", + "text-table", + "tiny-relative-date", + "treeverse", + "validate-npm-package-name", + "which", + "write-file-atomic" + ], + "dev": true, + "dependencies": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/arborist": "^7.2.1", + "@npmcli/config": "^8.0.2", + "@npmcli/fs": "^3.1.0", + "@npmcli/map-workspaces": "^3.0.6", + "@npmcli/package-json": "^5.0.2", + "@npmcli/promise-spawn": "^7.0.1", + "@npmcli/redact": "^1.1.0", + "@npmcli/run-script": "^7.0.4", + "@sigstore/tuf": "^2.3.2", + "abbrev": "^2.0.0", + "archy": "~1.0.0", + "cacache": "^18.0.2", + "chalk": "^5.3.0", + "ci-info": "^4.0.0", + "cli-columns": "^4.0.0", + "cli-table3": "^0.6.4", + "columnify": "^1.6.0", + "fastest-levenshtein": "^1.0.16", + "fs-minipass": "^3.0.3", + "glob": "^10.3.12", + "graceful-fs": "^4.2.11", + "hosted-git-info": "^7.0.1", + "ini": "^4.1.2", + "init-package-json": "^6.0.2", + "is-cidr": "^5.0.5", + "json-parse-even-better-errors": "^3.0.1", + "libnpmaccess": "^8.0.1", + "libnpmdiff": "^6.0.3", + "libnpmexec": "^7.0.4", + "libnpmfund": "^5.0.1", + "libnpmhook": "^10.0.0", + "libnpmorg": "^6.0.1", + "libnpmpack": "^6.0.3", + "libnpmpublish": "^9.0.2", + "libnpmsearch": "^7.0.0", + "libnpmteam": "^6.0.0", + "libnpmversion": "^5.0.1", + "make-fetch-happen": "^13.0.0", + "minimatch": "^9.0.4", + "minipass": "^7.0.4", + "minipass-pipeline": "^1.2.4", + "ms": "^2.1.2", + "node-gyp": "^10.1.0", + "nopt": "^7.2.0", + "normalize-package-data": "^6.0.0", + "npm-audit-report": "^5.0.0", + "npm-install-checks": "^6.3.0", + "npm-package-arg": "^11.0.1", + "npm-pick-manifest": "^9.0.0", + "npm-profile": "^9.0.0", + "npm-registry-fetch": "^16.2.0", + "npm-user-validate": "^2.0.0", + "npmlog": "^7.0.1", + "p-map": "^4.0.0", + "pacote": "^17.0.6", + "parse-conflict-json": "^3.0.1", + "proc-log": "^3.0.0", + "qrcode-terminal": "^0.12.0", + "read": "^3.0.1", + "semver": "^7.6.0", + "spdx-expression-parse": "^4.0.0", + "ssri": "^10.0.5", + "supports-color": "^9.4.0", + "tar": "^6.2.1", + "text-table": "~0.2.0", + "tiny-relative-date": "^1.3.0", + "treeverse": "^3.0.0", + "validate-npm-package-name": "^5.0.0", + "which": "^4.0.0", + "write-file-atomic": "^5.0.1" + }, + "bin": { + "npm": "bin/npm-cli.js", + "npx": "bin/npx-cli.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, "node_modules/npm-run-all": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", @@ -10931,6 +11119,2648 @@ "node": ">=4" } }, + "node_modules/npm/node_modules/@colors/colors": { + "version": "1.5.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/npm/node_modules/@isaacs/cliui": { + "version": "8.0.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/npm/node_modules/@isaacs/string-locale-compare": { + "version": "1.1.0", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/@npmcli/agent": { + "version": "2.2.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/arborist": { + "version": "7.4.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/fs": "^3.1.0", + "@npmcli/installed-package-contents": "^2.0.2", + "@npmcli/map-workspaces": "^3.0.2", + "@npmcli/metavuln-calculator": "^7.0.0", + "@npmcli/name-from-folder": "^2.0.0", + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/package-json": "^5.0.0", + "@npmcli/query": "^3.1.0", + "@npmcli/redact": "^1.1.0", + "@npmcli/run-script": "^7.0.2", + "bin-links": "^4.0.1", + "cacache": "^18.0.0", + "common-ancestor-path": "^1.0.1", + "hosted-git-info": "^7.0.1", + "json-parse-even-better-errors": "^3.0.0", + "json-stringify-nice": "^1.1.4", + "minimatch": "^9.0.4", + "nopt": "^7.0.0", + "npm-install-checks": "^6.2.0", + "npm-package-arg": "^11.0.1", + "npm-pick-manifest": "^9.0.0", + "npm-registry-fetch": "^16.2.0", + "npmlog": "^7.0.1", + "pacote": "^17.0.4", + "parse-conflict-json": "^3.0.0", + "proc-log": "^3.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^3.0.1", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.7", + "ssri": "^10.0.5", + "treeverse": "^3.0.0", + "walk-up-path": "^3.0.1" + }, + "bin": { + "arborist": "bin/index.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/config": { + "version": "8.2.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/map-workspaces": "^3.0.2", + "ci-info": "^4.0.0", + "ini": "^4.1.2", + "nopt": "^7.0.0", + "proc-log": "^3.0.0", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.5", + "walk-up-path": "^3.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/disparity-colors": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "ansi-styles": "^4.3.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/disparity-colors/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/npm/node_modules/@npmcli/fs": { + "version": "3.1.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/git": { + "version": "5.0.5", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/promise-spawn": "^7.0.0", + "lru-cache": "^10.0.1", + "npm-pick-manifest": "^9.0.0", + "proc-log": "^3.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/installed-package-contents": { + "version": "2.0.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "bin": { + "installed-package-contents": "lib/index.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/map-workspaces": { + "version": "3.0.6", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/name-from-folder": "^2.0.0", + "glob": "^10.2.2", + "minimatch": "^9.0.0", + "read-package-json-fast": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { + "version": "7.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "cacache": "^18.0.0", + "json-parse-even-better-errors": "^3.0.0", + "pacote": "^17.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/name-from-folder": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/node-gyp": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/package-json": { + "version": "5.0.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^5.0.0", + "glob": "^10.2.2", + "hosted-git-info": "^7.0.0", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/promise-spawn": { + "version": "7.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/query": { + "version": "3.1.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/redact": { + "version": "1.1.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/run-script": { + "version": "7.0.4", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/package-json": "^5.0.0", + "@npmcli/promise-spawn": "^7.0.0", + "node-gyp": "^10.0.0", + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/npm/node_modules/@sigstore/bundle": { + "version": "2.3.1", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.3.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@sigstore/core": { + "version": "1.1.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@sigstore/protobuf-specs": { + "version": "0.3.1", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@sigstore/sign": { + "version": "2.3.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^2.3.0", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.3.1", + "make-fetch-happen": "^13.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@sigstore/tuf": { + "version": "2.3.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.3.0", + "tuf-js": "^2.2.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@sigstore/verify": { + "version": "1.2.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^2.3.1", + "@sigstore/core": "^1.1.0", + "@sigstore/protobuf-specs": "^0.3.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@tufjs/canonical-json": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@tufjs/models": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^9.0.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/abbrev": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/agent-base": { + "version": "7.1.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/npm/node_modules/aggregate-error": { + "version": "3.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/ansi-styles": { + "version": "6.2.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/npm/node_modules/aproba": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/archy": { + "version": "1.0.0", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/are-we-there-yet": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/balanced-match": { + "version": "1.0.2", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/bin-links": { + "version": "4.0.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "cmd-shim": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "read-cmd-shim": "^4.0.0", + "write-file-atomic": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/binary-extensions": { + "version": "2.3.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/brace-expansion": { + "version": "2.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/npm/node_modules/builtins": { + "version": "5.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/npm/node_modules/cacache": { + "version": "18.0.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/chalk": { + "version": "5.3.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/npm/node_modules/chownr": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/ci-info": { + "version": "4.0.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/cidr-regex": { + "version": "4.0.5", + "dev": true, + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "ip-regex": "^5.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/npm/node_modules/clean-stack": { + "version": "2.2.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/npm/node_modules/cli-columns": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/npm/node_modules/cli-table3": { + "version": "0.6.4", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/npm/node_modules/clone": { + "version": "1.0.4", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/npm/node_modules/cmd-shim": { + "version": "6.0.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/npm/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/color-support": { + "version": "1.1.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/npm/node_modules/columnify": { + "version": "1.6.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "strip-ansi": "^6.0.1", + "wcwidth": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/npm/node_modules/common-ancestor-path": { + "version": "1.0.1", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/console-control-strings": { + "version": "1.1.0", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/cross-spawn": { + "version": "7.0.3", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/cssesc": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/npm/node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/defaults": { + "version": "1.0.4", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/diff": { + "version": "5.2.0", + "dev": true, + "inBundle": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/npm/node_modules/eastasianwidth": { + "version": "0.2.0", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/emoji-regex": { + "version": "8.0.0", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/encoding": { + "version": "0.1.13", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/npm/node_modules/env-paths": { + "version": "2.2.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/npm/node_modules/err-code": { + "version": "2.0.3", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/exponential-backoff": { + "version": "3.1.1", + "dev": true, + "inBundle": true, + "license": "Apache-2.0" + }, + "node_modules/npm/node_modules/fastest-levenshtein": { + "version": "1.0.16", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/npm/node_modules/foreground-child": { + "version": "3.1.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/fs-minipass": { + "version": "3.0.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/function-bind": { + "version": "1.1.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/npm/node_modules/gauge": { + "version": "5.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^4.0.1", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/glob": { + "version": "10.3.12", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.6", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/graceful-fs": { + "version": "4.2.11", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/has-unicode": { + "version": "2.0.1", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/hasown": { + "version": "2.0.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/npm/node_modules/hosted-git-info": { + "version": "7.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/http-cache-semantics": { + "version": "4.1.1", + "dev": true, + "inBundle": true, + "license": "BSD-2-Clause" + }, + "node_modules/npm/node_modules/http-proxy-agent": { + "version": "7.0.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/npm/node_modules/https-proxy-agent": { + "version": "7.0.4", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/npm/node_modules/iconv-lite": { + "version": "0.6.3", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/ignore-walk": { + "version": "6.0.4", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/imurmurhash": { + "version": "0.1.4", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/npm/node_modules/indent-string": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/ini": { + "version": "4.1.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/init-package-json": { + "version": "6.0.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/package-json": "^5.0.0", + "npm-package-arg": "^11.0.0", + "promzard": "^1.0.0", + "read": "^3.0.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/ip-address": { + "version": "9.0.5", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/npm/node_modules/ip-address/node_modules/sprintf-js": { + "version": "1.1.3", + "dev": true, + "inBundle": true, + "license": "BSD-3-Clause" + }, + "node_modules/npm/node_modules/ip-regex": { + "version": "5.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/is-cidr": { + "version": "5.0.5", + "dev": true, + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "cidr-regex": "^4.0.4" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/npm/node_modules/is-core-module": { + "version": "2.13.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/npm/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/is-lambda": { + "version": "1.0.1", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/isexe": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/jackspeak": { + "version": "2.3.6", + "dev": true, + "inBundle": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/npm/node_modules/jsbn": { + "version": "1.1.0", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/json-parse-even-better-errors": { + "version": "3.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/json-stringify-nice": { + "version": "1.1.4", + "dev": true, + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/jsonparse": { + "version": "1.3.1", + "dev": true, + "engines": [ + "node >= 0.2.0" + ], + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/just-diff": { + "version": "6.0.2", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/just-diff-apply": { + "version": "5.5.0", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/libnpmaccess": { + "version": "8.0.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-package-arg": "^11.0.1", + "npm-registry-fetch": "^16.2.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmdiff": { + "version": "6.0.9", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^7.2.1", + "@npmcli/disparity-colors": "^3.0.0", + "@npmcli/installed-package-contents": "^2.0.2", + "binary-extensions": "^2.3.0", + "diff": "^5.1.0", + "minimatch": "^9.0.4", + "npm-package-arg": "^11.0.1", + "pacote": "^17.0.4", + "tar": "^6.2.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmexec": { + "version": "7.0.10", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^7.2.1", + "@npmcli/run-script": "^7.0.2", + "ci-info": "^4.0.0", + "npm-package-arg": "^11.0.1", + "npmlog": "^7.0.1", + "pacote": "^17.0.4", + "proc-log": "^3.0.0", + "read": "^3.0.1", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.7", + "walk-up-path": "^3.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmfund": { + "version": "5.0.7", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^7.2.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmhook": { + "version": "10.0.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^16.2.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmorg": { + "version": "6.0.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^16.2.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmpack": { + "version": "6.0.9", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^7.2.1", + "@npmcli/run-script": "^7.0.2", + "npm-package-arg": "^11.0.1", + "pacote": "^17.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmpublish": { + "version": "9.0.5", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "ci-info": "^4.0.0", + "normalize-package-data": "^6.0.0", + "npm-package-arg": "^11.0.1", + "npm-registry-fetch": "^16.2.0", + "proc-log": "^3.0.0", + "semver": "^7.3.7", + "sigstore": "^2.2.0", + "ssri": "^10.0.5" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmsearch": { + "version": "7.0.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-registry-fetch": "^16.2.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmteam": { + "version": "6.0.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^16.2.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmversion": { + "version": "5.0.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^5.0.3", + "@npmcli/run-script": "^7.0.2", + "json-parse-even-better-errors": "^3.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/lru-cache": { + "version": "10.2.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/npm/node_modules/make-fetch-happen": { + "version": "13.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", + "is-lambda": "^1.0.1", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/minimatch": { + "version": "9.0.4", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/minipass": { + "version": "7.0.4", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/npm/node_modules/minipass-collect": { + "version": "2.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/npm/node_modules/minipass-fetch": { + "version": "3.0.4", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/npm/node_modules/minipass-flush": { + "version": "1.0.5", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-json-stream": { + "version": "1.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "node_modules/npm/node_modules/minipass-json-stream/node_modules/minipass": { + "version": "3.3.6", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-pipeline": { + "version": "1.2.4", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-sized": { + "version": "1.0.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minizlib": { + "version": "2.1.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/mkdirp": { + "version": "1.0.4", + "dev": true, + "inBundle": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/mute-stream": { + "version": "1.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/negotiator": { + "version": "0.6.3", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/npm/node_modules/node-gyp": { + "version": "10.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^10.3.10", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^13.0.0", + "nopt": "^7.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^4.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/nopt": { + "version": "7.2.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "abbrev": "^2.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/normalize-package-data": { + "version": "6.0.0", + "dev": true, + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^7.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-audit-report": { + "version": "5.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-bundled": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-install-checks": { + "version": "6.3.0", + "dev": true, + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-package-arg": { + "version": "11.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^7.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-packlist": { + "version": "8.0.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "ignore-walk": "^6.0.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-pick-manifest": { + "version": "9.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^11.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-profile": { + "version": "9.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-registry-fetch": "^16.0.0", + "proc-log": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-registry-fetch": { + "version": "16.2.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/redact": "^1.1.0", + "make-fetch-happen": "^13.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^11.0.0", + "proc-log": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-user-validate": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "BSD-2-Clause", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npmlog": { + "version": "7.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "are-we-there-yet": "^4.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^5.0.0", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/p-map": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/pacote": { + "version": "17.0.6", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^5.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/promise-spawn": "^7.0.0", + "@npmcli/run-script": "^7.0.0", + "cacache": "^18.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^11.0.0", + "npm-packlist": "^8.0.0", + "npm-pick-manifest": "^9.0.0", + "npm-registry-fetch": "^16.0.0", + "proc-log": "^3.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^7.0.0", + "read-package-json-fast": "^3.0.0", + "sigstore": "^2.2.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "lib/bin.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/parse-conflict-json": { + "version": "3.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "just-diff": "^6.0.0", + "just-diff-apply": "^5.2.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/path-key": { + "version": "3.1.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/path-scurry": { + "version": "1.10.2", + "dev": true, + "inBundle": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/postcss-selector-parser": { + "version": "6.0.16", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm/node_modules/proc-log": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/promise-all-reject-late": { + "version": "1.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/promise-call-limit": { + "version": "3.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/promise-inflight": { + "version": "1.0.1", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/promise-retry": { + "version": "2.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/promzard": { + "version": "1.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "read": "^3.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/qrcode-terminal": { + "version": "0.12.0", + "dev": true, + "inBundle": true, + "bin": { + "qrcode-terminal": "bin/qrcode-terminal.js" + } + }, + "node_modules/npm/node_modules/read": { + "version": "3.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "mute-stream": "^1.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/read-cmd-shim": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/read-package-json": { + "version": "7.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "glob": "^10.2.2", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/read-package-json-fast": { + "version": "3.0.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/retry": { + "version": "0.12.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/npm/node_modules/safer-buffer": { + "version": "2.1.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true + }, + "node_modules/npm/node_modules/semver": { + "version": "7.6.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/set-blocking": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/shebang-command": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/shebang-regex": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/signal-exit": { + "version": "4.1.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/sigstore": { + "version": "2.3.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^2.3.1", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.3.1", + "@sigstore/sign": "^2.3.0", + "@sigstore/tuf": "^2.3.1", + "@sigstore/verify": "^1.2.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/smart-buffer": { + "version": "4.2.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/npm/node_modules/socks": { + "version": "2.8.3", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/npm/node_modules/socks-proxy-agent": { + "version": "8.0.3", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.1", + "debug": "^4.3.4", + "socks": "^2.7.1" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/npm/node_modules/spdx-correct": { + "version": "3.2.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/npm/node_modules/spdx-correct/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/npm/node_modules/spdx-exceptions": { + "version": "2.5.0", + "dev": true, + "inBundle": true, + "license": "CC-BY-3.0" + }, + "node_modules/npm/node_modules/spdx-expression-parse": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/npm/node_modules/spdx-license-ids": { + "version": "3.0.17", + "dev": true, + "inBundle": true, + "license": "CC0-1.0" + }, + "node_modules/npm/node_modules/ssri": { + "version": "10.0.5", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/string-width": { + "version": "4.2.3", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/supports-color": { + "version": "9.4.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/npm/node_modules/tar": { + "version": "6.2.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/text-table": { + "version": "0.2.0", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/tiny-relative-date": { + "version": "1.3.0", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/treeverse": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/tuf-js": { + "version": "2.2.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@tufjs/models": "2.0.0", + "debug": "^4.3.4", + "make-fetch-happen": "^13.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/unique-filename": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/unique-slug": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/util-deprecate": { + "version": "1.0.2", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/validate-npm-package-license": { + "version": "3.0.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/npm/node_modules/validate-npm-package-name": { + "version": "5.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/walk-up-path": { + "version": "3.0.1", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/wcwidth": { + "version": "1.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/npm/node_modules/which": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/which/node_modules/isexe": { + "version": "3.1.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/npm/node_modules/wide-align": { + "version": "1.1.5", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/npm/node_modules/wrap-ansi": { + "version": "8.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/npm/node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "9.2.2", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": { + "version": "5.1.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/npm/node_modules/write-file-atomic": { + "version": "5.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "ISC" + }, "node_modules/npmlog": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", @@ -11860,9 +14690,9 @@ "integrity": "sha512-EkCRMV2w15w+9wylcpabacKK9VvTRX3TvhVQJBwIk4ThvllI2M6RlvdEZvJLhxsxy4x8IEDZneQhlGU0Pk5keg==" }, "node_modules/putout": { - "version": "35.13.0", - "resolved": "https://registry.npmjs.org/putout/-/putout-35.13.0.tgz", - "integrity": "sha512-x26AuG3MfP3qD0cXou6Oeuca9PX9klQd9ytH+fjaqMIrO9i0AkDiJG+xsvEW9xtR8COV1V24ee/minhcVT8aAg==", + "version": "35.15.0", + "resolved": "https://registry.npmjs.org/putout/-/putout-35.15.0.tgz", + "integrity": "sha512-eXMB8k6v6Nfy/1FBLiyjh5qULZyt1jyXWddMpHlUnu9bq9i2n+a88MV7JzBuupaSnTFdWuGQ6+xPVp58GvDqvQ==", "dev": true, "dependencies": { "@putout/babel": "^2.0.0", @@ -11894,6 +14724,7 @@ "@putout/operator-add-args": "^8.0.0", "@putout/operator-declare": "^9.0.0", "@putout/operator-filesystem": "^4.0.0", + "@putout/operator-ignore": "^1.0.0", "@putout/operator-json": "^2.0.0", "@putout/operator-match-files": "^3.0.0", "@putout/operator-regexp": "^1.0.0", @@ -11923,6 +14754,7 @@ "@putout/plugin-convert-quotes-to-backticks": "^3.0.0", "@putout/plugin-convert-template-to-string": "^2.0.0", "@putout/plugin-convert-to-arrow-function": "^4.0.0", + "@putout/plugin-coverage": "^1.0.0", "@putout/plugin-declare": "^3.0.0", "@putout/plugin-declare-before-reference": "^3.0.0", "@putout/plugin-declare-imports-first": "^2.0.0", @@ -11932,7 +14764,7 @@ "@putout/plugin-filesystem": "^5.0.0", "@putout/plugin-for-of": "^4.0.0", "@putout/plugin-github": "^12.0.0", - "@putout/plugin-gitignore": "^5.0.0", + "@putout/plugin-gitignore": "^6.0.0", "@putout/plugin-logical-expressions": "^5.0.0", "@putout/plugin-madrun": "^18.0.0", "@putout/plugin-math": "^2.0.0", @@ -11943,7 +14775,7 @@ "@putout/plugin-montag": "^2.0.0", "@putout/plugin-new": "^3.0.1", "@putout/plugin-nodejs": "^11.0.0", - "@putout/plugin-npmignore": "^4.0.0", + "@putout/plugin-npmignore": "^5.0.0", "@putout/plugin-package-json": "^7.0.0", "@putout/plugin-promises": "^14.0.0", "@putout/plugin-putout": "^19.0.0", @@ -13427,9 +16259,9 @@ } }, "node_modules/remeda": { - "version": "1.58.1", - "resolved": "https://registry.npmjs.org/remeda/-/remeda-1.58.1.tgz", - "integrity": "sha512-jTLnELfFSIaQxA7A/lkQdgdOSfzrta22OhRvdp5Y7RY3VY2jSBhXsiJRJbZAULfka/IfQUg1Lt/4rW/r6qNC5Q==" + "version": "1.59.0", + "resolved": "https://registry.npmjs.org/remeda/-/remeda-1.59.0.tgz", + "integrity": "sha512-yqIz7z+eriLF6ll4TxhUM56b2wIrmHgJNbzRGYqfJ0Jx6QOioSvGJuT9jD6MqtKzGUizaxSlJZXTVYjVSC4Qig==" }, "node_modules/remove-blank-lines": { "version": "1.4.1", diff --git a/package.json b/package.json index ce53c7b9f5..481604dcaa 100644 --- a/package.json +++ b/package.json @@ -101,7 +101,7 @@ "pinyin": "^3.1.0", "punycode2": "^1.0.1", "puqeue": "^1.1.4", - "remeda": "^1.58.1", + "remeda": "^1.59.0", "sprintf-js": "^1.1.3", "string.prototype.matchall": "^4.0.11", "tar-js": "^0.3.0", @@ -114,7 +114,7 @@ "zotero-plugin": "2.0.14" }, "devDependencies": { - "@retorquere/bibtex-parser": "^8.0.14", + "@retorquere/bibtex-parser": "^9.0.2", "@retorquere/zotero-sync": "^1.0.27", "@types/bluebird": "^3.5.42", "@types/lokijs": "^1.5.14", @@ -134,7 +134,7 @@ "diff": "^5.2.0", "dom-parser": "^1.1.5", "dotenv": "^16.4.5", - "ejs": "^3.1.9", + "ejs": "^3.1.10", "esbuild": "^0.20.2", "eslint": "^8.57.0", "estrace": "^5.0.1", @@ -169,7 +169,7 @@ "process": "^0.11.10", "properties-reader": "^2.3.0", "pug": "^3.0.2", - "putout": "^35.13.0", + "putout": "^35.15.0", "recast": "^0.23.6", "regenerate": "^1.4.2", "rimraf": "^5.0.5", diff --git a/test/fixtures/import/Allow spaces between href arguments for import #2504.json b/test/fixtures/import/Allow spaces between href arguments for import #2504.json index 27dd743a5a..3d8ae95365 100644 --- a/test/fixtures/import/Allow spaces between href arguments for import #2504.json +++ b/test/fixtures/import/Allow spaces between href arguments for import #2504.json @@ -2,117 +2,35 @@ "config": { "id": "36a3b0b5-bad0-4a04-b79b-441c7cef77db", "label": "BetterBibTeX JSON", - "preferences": { - "ascii": "", - "asciiBibLaTeX": false, - "asciiBibTeX": true, - "autoAbbrev": false, - "autoAbbrevStyle": "", - "autoExport": "immediate", - "autoExportDelay": 5, - "autoExportIdleWait": 10, - "autoExportPathReplaceDiacritics": false, - "autoExportPathReplaceDirSep": "-", - "autoExportPathReplaceSpace": " ", - "automaticTags": true, - "autoPinDelay": 0, - "auxImport": false, - "baseAttachmentPath": "", - "biblatexExtendedDateFormat": true, - "biblatexExtendedNameFormat": true, - "biblatexExtractEprint": true, - "bibtexParticleNoOp": false, - "bibtexURL": "off", - "cache": true, - "cacheFlushInterval": 5, - "charmap": "", - "citeCommand": "cite", - "citekeyFold": true, - "citekeyFormat": "auth + year", - "citekeySearch": true, - "citekeyUnsafeChars": "\\\"#%'(),={}~", - "csquotes": "", - "DOIandURL": "both", - "exportBibTeXStrings": "off", - "exportBraceProtection": true, - "exportTitleCase": true, - "extraMergeCitekeys": false, - "extraMergeCSL": false, - "extraMergeTeX": false, - "git": "config", - "import": true, - "importBibTeXStrings": true, - "importCaseProtection": "as-needed", - "importCitationKey": true, - "importExtra": true, - "importJabRefAbbreviations": true, - "importJabRefStrings": true, - "importNoteToExtra": "", - "importSentenceCase": "on+guess", - "importUnknownTexCommand": "ignore", - "itemObserverDelay": 5, - "jabrefFormat": 0, - "jieba": false, - "keyConflictPolicy": "keep", - "keyScope": "library", - "kuroshiro": false, - "language": "langid", - "mapMath": "", - "mapText": "", - "parseParticles": true, - "patchDates": "dateadded=dateAdded, date-added=dateAdded, datemodified=dateModified, date-modified=dateModified", - "postscript": "", - "postscriptOverride": "", - "preferencesOverride": "", - "qualityReport": false, - "quickCopyEta": "", - "quickCopyMode": "latex", - "quickCopyOrgMode": "zotero", - "quickCopyPandocBrackets": false, - "quickCopySelectLink": "zotero", - "rawImports": false, - "rawLaTag": "#LaTeX", - "relativeFilePaths": false, - "retainCache": false, - "separatorList": "and", - "separatorNames": "and", - "skipFields": "", - "skipWords": "a,ab,aboard,about,above,across,after,against,al,along,amid,among,an,and,anti,around,as,at,before,behind,below,beneath,beside,besides,between,beyond,but,by,d,da,das,de,del,dell,dello,dei,degli,della,dell,delle,dem,den,der,des,despite,die,do,down,du,during,ein,eine,einem,einen,einer,eines,el,en,et,except,for,from,gli,i,il,in,inside,into,is,l,la,las,le,les,like,lo,los,near,nor,of,off,on,onto,or,over,past,per,plus,round,save,since,so,some,sur,than,the,through,to,toward,towards,un,una,unas,under,underneath,une,unlike,uno,unos,until,up,upon,versus,via,von,while,with,within,without,yet,zu,zum", - "startupProgress": "popup", - "strings": "", - "stringsOverride": "", - "verbatimFields": "url,doi,file,pdf,ids,eprint,/^verb[a-z]$/,groups,/^citeulike-linkout-[0-9]+$/, /^bdsk-url-[0-9]+$/", - "warnBulkModify": 10, - "warnTitleCased": false - }, "options": { - "exportNotes": true, - "exportFileData": false, - "keepUpdated": false, - "worker": false, - "Normalize": true + "Items": true, + "Preferences": true, + "exportNotes": true + }, + "preferences": { + "citekeyFormat": "auth + year" } }, - "version": { - "zotero": "6.0.26", - "bbt": "6.7.77.emile.limonia" - }, - "collections": {}, "items": [ { - "version": 0, - "itemType": "document", - "url": "https://www.math.uni-bielefeld.de/~gaehler/gap/packages.php", - "date": "2022-07", - "extra": "Citation Key: CaratInterface2.3.4\ntex.printedkey: Gäh22", - "title": "CaratInterface, interface to CARAT, a crystallographic groups package, Version 2.3.4", + "citationKey": "CaratInterface2.3.4", "creators": [ { + "creatorType": "author", "firstName": "F.", - "lastName": "Gähler", - "creatorType": "author" + "lastName": "G\u00e4hler" } ], + "date": "2022-07", + "extra": [ + "Citation Key: CaratInterface2.3.4", + "tex.printedkey: G\u00e4h22" + ], + "itemID": 1, + "itemType": "document", + "notes": [ + "Refereed GAP package" + ], "tags": [ { "tag": "crystallographic groups" @@ -124,64 +42,48 @@ "tag": "GLnZ" } ], - "relations": [], - "dateAdded": "2023-05-02T14:04:07Z", - "dateModified": "2023-05-02T14:04:07Z", - "uri": "http://zotero.org/users/8230813/items/HJZ7MCCF", - "attachments": [], - "notes": [ - { - "key": "6WRLYPAU", - "version": 0, - "itemType": "note", - "parentItem": "HJZ7MCCF", - "note": "Refereed GAP package", - "tags": [], - "relations": {}, - "dateAdded": "2023-05-02T14:04:07Z", - "dateModified": "2023-05-02T14:04:07Z", - "uri": "http://zotero.org/users/8230813/items/6WRLYPAU" - } - ], - "citationKey": "CaratInterface2.3.4", - "itemID": 104, - "itemKey": "HJZ7MCCF", - "libraryID": 1 + "title": "CaratInterface, Interface to CARAT, a crystallographic groups package, Version 2.3.4", + "url": "https://www.math.uni-bielefeld.de/~gaehler/gap/packages.php" }, { - "version": 0, - "itemType": "document", - "url": "https://www.math.uni-bielefeld.de/~gaehler/gap/packages.php", - "date": "2023-04", - "extra": "Citation Key: Cryst4.1.26\ntex.printedkey: EGN23", - "title": "Cryst, Computing with crystallographic groups, Version 4.1.26", + "citationKey": "Cryst4.1.26", "creators": [ { + "creatorType": "author", "firstName": "B.", - "lastName": "Eick", - "creatorType": "author" + "lastName": "Eick" }, { + "creatorType": "author", "firstName": "F.", - "lastName": "Gähler", - "creatorType": "author" + "lastName": "G\u00e4hler" }, { + "creatorType": "author", "firstName": "W.", - "lastName": "Nickel", - "creatorType": "author" + "lastName": "Nickel" } ], + "date": "2023-04", + "extra": [ + "Citation Key: Cryst4.1.26", + "tex.printedkey: EGN23" + ], + "itemID": 2, + "itemType": "document", + "notes": [ + "Refereed GAP package" + ], "tags": [ - { - "tag": "crystallographic groups" - }, { "tag": "affine crystallographic groups" }, { "tag": "color groups" }, + { + "tag": "crystallographic groups" + }, { "tag": "International Tables for Crystallography" }, @@ -201,49 +103,33 @@ "tag": "Wyckoff positions" } ], - "relations": [], - "dateAdded": "2023-05-02T14:04:07Z", - "dateModified": "2023-05-02T14:04:07Z", - "uri": "http://zotero.org/users/8230813/items/QR8Q5VB5", - "attachments": [], - "notes": [ - { - "key": "DBJHY38M", - "version": 0, - "itemType": "note", - "parentItem": "QR8Q5VB5", - "note": "Refereed GAP package", - "tags": [], - "relations": {}, - "dateAdded": "2023-05-02T14:04:07Z", - "dateModified": "2023-05-02T14:04:07Z", - "uri": "http://zotero.org/users/8230813/items/DBJHY38M" - } - ], - "citationKey": "Cryst4.1.26", - "itemID": 107, - "itemKey": "QR8Q5VB5", - "libraryID": 1 + "title": "Cryst, Computing with crystallographic groups, Version 4.1.26", + "url": "https://www.math.uni-bielefeld.de/~gaehler/gap/packages.php" }, { - "version": 0, - "itemType": "document", - "url": "https://www.math.uni-bielefeld.de/~gaehler/gap/packages.php", - "date": "2022-07", - "extra": "Citation Key: CrystCat1.1.10\ntex.printedkey: FG22", - "title": "CrystCat, The crystallographic groups catalog, Version 1.1.10", + "citationKey": "CrystCat1.1.10", "creators": [ { + "creatorType": "author", "firstName": "V.", - "lastName": "Felsch", - "creatorType": "author" + "lastName": "Felsch" }, { + "creatorType": "author", "firstName": "F.", - "lastName": "Gähler", - "creatorType": "author" + "lastName": "G\u00e4hler" } ], + "date": "2022-07", + "extra": [ + "Citation Key: CrystCat1.1.10", + "tex.printedkey: FG22" + ], + "itemID": 3, + "itemType": "document", + "notes": [ + "Refereed GAP package" + ], "tags": [ { "tag": "crystallographic groups" @@ -252,38 +138,18 @@ "tag": "space groups" } ], - "relations": [], - "dateAdded": "2023-05-02T14:04:07Z", - "dateModified": "2023-05-02T14:04:07Z", - "uri": "http://zotero.org/users/8230813/items/57KACB4M", - "attachments": [], - "notes": [ - { - "key": "YZKTTG27", - "version": 0, - "itemType": "note", - "parentItem": "57KACB4M", - "note": "Refereed GAP package", - "tags": [], - "relations": {}, - "dateAdded": "2023-05-02T14:04:07Z", - "dateModified": "2023-05-02T14:04:07Z", - "uri": "http://zotero.org/users/8230813/items/YZKTTG27" - } - ], - "citationKey": "CrystCat1.1.10", - "itemID": 109, - "itemKey": "57KACB4M", - "libraryID": 1 + "title": "CrystCat, The crystallographic groups catalog, Version 1.1.10", + "url": "https://www.math.uni-bielefeld.de/~gaehler/gap/packages.php" }, { - "version": 0, + "citationKey": "GAP4.13dev", + "extra": [ + "Citation Key: GAP4.13dev", + "tex.key: GAP" + ], + "itemID": 4, "itemType": "document", - "url": "https://www.gap-system.org", "publisher": "The GAP Group", - "extra": "Citation Key: GAP4.13dev\ntex.key: GAP", - "title": "GAP – Groups, Algorithms, and Programming, Version 4.13dev", - "creators": [], "tags": [ { "tag": "*" @@ -298,16 +164,8 @@ "tag": "manual" } ], - "relations": [], - "dateAdded": "2023-05-02T14:04:07Z", - "dateModified": "2023-05-02T14:04:07Z", - "uri": "http://zotero.org/users/8230813/items/ACF2Q7U2", - "attachments": [], - "notes": [], - "citationKey": "GAP4.13dev", - "itemID": 106, - "itemKey": "ACF2Q7U2", - "libraryID": 1 + "title": "GAP \u2013 Groups, Algorithms, and Programming, Version 4.13dev", + "url": "https://www.gap-system.org" } ] -} +} \ No newline at end of file diff --git a/test/fixtures/import/BBT does not import groups from JabRef 5.1 #1641.json b/test/fixtures/import/BBT does not import groups from JabRef 5.1 #1641.json index 503933a7b6..8f80edf97d 100644 --- a/test/fixtures/import/BBT does not import groups from JabRef 5.1 #1641.json +++ b/test/fixtures/import/BBT does not import groups from JabRef 5.1 #1641.json @@ -164,7 +164,7 @@ "tag": "sense" } ], - "title": "The Logic of Sense", + "title": "The logic of sense", "url": "https://www.bloomsbury.com/uk/logic-of-sense-9781474234887/" }, { @@ -174,7 +174,7 @@ "creators": [ { "creatorType": "author", - "firstName": "Ragnhe\u1ecbur", + "firstName": "Ragnhei \u0323ur", "lastName": "Bogad\u00f3ttir" }, { diff --git a/test/fixtures/import/Better BibLaTeX import improvements #549.json b/test/fixtures/import/Better BibLaTeX import improvements #549.json index a70beb777c..1753ae4377 100644 --- a/test/fixtures/import/Better BibLaTeX import improvements #549.json +++ b/test/fixtures/import/Better BibLaTeX import improvements #549.json @@ -2,10 +2,13 @@ "config": { "id": "36a3b0b5-bad0-4a04-b79b-441c7cef77db", "label": "BetterBibTeX JSON", - "localeDateOrder": "dmy", - "options": {}, + "options": { + "Items": true, + "Preferences": true, + "exportNotes": true + }, "preferences": { - "citekeyFormat": "[auth][year]" + "citekeyFormat": "auth + year" } }, "items": [ @@ -22,7 +25,7 @@ ], "itemID": 1, "itemType": "journalArticle", - "title": "Blah mkbibemph and \u201cmkbibquote\u201d." + "title": "Blah mkbibemph and \u201cmkbibquote\u201d." }, { "citationKey": "1e", @@ -37,7 +40,7 @@ ], "itemID": 2, "itemType": "journalArticle", - "title": "Blah emph and \u201cenquote\u201d." + "title": "Blah emph and \u201cenquote\u201d." }, { "citationKey": "2b", @@ -52,7 +55,7 @@ ], "itemID": 3, "itemType": "book", - "title": "Blah mkbibemph and \u201cmkbibquote\u201d." + "title": "Blah mkbibemph and \u201cmkbibquote\u201d." }, { "citationKey": "2e", @@ -67,7 +70,7 @@ ], "itemID": 4, "itemType": "book", - "title": "Blah emph and \u201cenquote\u201d." + "title": "Blah emph and \u201cenquote\u201d." }, { "citationKey": "Algar1985", @@ -143,8 +146,7 @@ ], "date": "2013", "extra": [ - "Citation Key: Cooper2013", - "tex.crossref: Classen2013" + "Citation Key: Cooper2013" ], "itemID": 8, "itemType": "bookSection", @@ -168,7 +170,7 @@ "itemType": "journalArticle", "pages": "1-11", "publicationTitle": "Beitr\u00e4ge zur Geschichte der Philosophie des Mittelalters", - "title": "Die dem boethius f\u00e4lschlich zugeschriebene abhandlung des dominicus gundisalvi 'De unitate'", + "title": "Die dem Boethius f\u00e4lschlich zugeschriebene Abhandlung des Dominicus Gundisalvi 'De unitate'", "volume": "1" } ] diff --git a/test/fixtures/import/Better BibTeX.009.json b/test/fixtures/import/Better BibTeX.009.json index 9c07897094..c1aad4c059 100644 --- a/test/fixtures/import/Better BibTeX.009.json +++ b/test/fixtures/import/Better BibTeX.009.json @@ -2,9 +2,13 @@ "config": { "id": "36a3b0b5-bad0-4a04-b79b-441c7cef77db", "label": "BetterBibTeX JSON", - "options": {}, + "options": { + "Items": true, + "Preferences": true, + "exportNotes": true + }, "preferences": { - "citekeyFormat": "[auth][year]" + "citekeyFormat": "auth + year" } }, "items": [ @@ -133,7 +137,7 @@ { "itemID": 3, "itemType": "note", - "note": "Import errors found:
  • No fields in @emptyreference
", + "note": "Import errors found:
  • No fields in @emptyreference
    @misc{emptyreference,\n  \n}
", "tags": [ { "tag": "#Better BibTeX import error", diff --git a/test/fixtures/import/Copy date-addeddate-modified from extra field regenerates citation key #2142.json b/test/fixtures/import/Copy date-addeddate-modified from extra field regenerates citation key #2142.json index 1d438f4add..6e8bbadb24 100644 --- a/test/fixtures/import/Copy date-addeddate-modified from extra field regenerates citation key #2142.json +++ b/test/fixtures/import/Copy date-addeddate-modified from extra field regenerates citation key #2142.json @@ -19,7 +19,7 @@ "accessDate": "2015-07-25", "attachments": [ { - "accessDate": "2024-01-19T08:16:28Z", + "accessDate": "2024-04-13T12:47:05Z", "itemType": "attachment", "linkMode": "linked_url", "title": "bdsk-url-2", @@ -49,7 +49,7 @@ "lastName": "Hwang" } ], - "date": "October 2008", + "date": "2008-10", "extra": [ "Citation Key: ReedClark2008War-Power", "tex.local-url: War/Bargain/ReedClark2008War-Power.pdf" diff --git a/test/fixtures/import/Copy date-addeddate-modified menu option not working #2378.json b/test/fixtures/import/Copy date-addeddate-modified menu option not working #2378.json index 5e198695f4..79dd63e2e5 100644 --- a/test/fixtures/import/Copy date-addeddate-modified menu option not working #2378.json +++ b/test/fixtures/import/Copy date-addeddate-modified menu option not working #2378.json @@ -27,7 +27,7 @@ "lastName": "Snidal" } ], - "date": "1998-2", + "date": "1998-02", "extra": [ "Citation Key: AbbottSnidal:1998" ], @@ -55,7 +55,7 @@ "lastName": "Snidal" } ], - "date": "1998-2", + "date": "1998-02", "extra": [ "Citation Key: AbbottSnidal" ], diff --git a/test/fixtures/import/DOIs excluded from export in 6.7.86 #2555.json b/test/fixtures/import/DOIs excluded from export in 6.7.86 #2555.json index f449a91aa3..1b06f0edf9 100644 --- a/test/fixtures/import/DOIs excluded from export in 6.7.86 #2555.json +++ b/test/fixtures/import/DOIs excluded from export in 6.7.86 #2555.json @@ -3,6 +3,8 @@ "id": "36a3b0b5-bad0-4a04-b79b-441c7cef77db", "label": "BetterBibTeX JSON", "options": { + "Items": true, + "Preferences": true, "exportNotes": true }, "preferences": { @@ -57,9 +59,9 @@ "publicationTitle": "Logics in artificial intelligence", "publisher": "Springer Berlin Heidelberg", "series": "Lecture notes in computer science", - "title": "Z-log: Applying system-Z", + "title": "Z-log: Applying system-z", "url": "http://dx.doi.org/10.1007/3-540-45757-7_52", "volume": "2424" } ] -} +} \ No newline at end of file diff --git a/test/fixtures/import/Dealing with base64-encoded paths from BibDesk #2374.json b/test/fixtures/import/Dealing with base64-encoded paths from BibDesk #2374.json index 74d05c96dd..c4078fde61 100644 --- a/test/fixtures/import/Dealing with base64-encoded paths from BibDesk #2374.json +++ b/test/fixtures/import/Dealing with base64-encoded paths from BibDesk #2374.json @@ -101,7 +101,7 @@ "lastName": "Smith" } ], - "date": "2019-1", + "date": "2019-01", "extra": [ "Citation Key: KraftSmith:2019", "tex.date-added: 2020-08-07 09:07:58 -0400", diff --git a/test/fixtures/import/Double newlines means parbreak #2789.json b/test/fixtures/import/Double newlines means parbreak #2789.json index 6fef40ec5c..7fabba3395 100644 --- a/test/fixtures/import/Double newlines means parbreak #2789.json +++ b/test/fixtures/import/Double newlines means parbreak #2789.json @@ -2,157 +2,48 @@ "config": { "id": "36a3b0b5-bad0-4a04-b79b-441c7cef77db", "label": "BetterBibTeX JSON", - "preferences": { - "ascii": "", - "asciiBibLaTeX": false, - "asciiBibTeX": true, - "autoAbbrev": false, - "autoAbbrevStyle": "", - "autoExport": "immediate", - "autoExportDelay": 5, - "autoExportIdleWait": 10, - "autoExportPathReplaceDiacritics": false, - "autoExportPathReplaceDirSep": "-", - "autoExportPathReplaceSpace": " ", - "automaticTags": true, - "autoPinDelay": 0, - "auxImport": false, - "baseAttachmentPath": "", - "biblatexExtendedDateFormat": true, - "biblatexExtendedNameFormat": true, - "biblatexExtractEprint": true, - "bibtexEditionOrdinal": false, - "bibtexParticleNoOp": false, - "bibtexURL": "off", - "cache": true, - "cacheFlushInterval": 5, - "charmap": "", - "citeCommand": "cite", - "citekeyCaseInsensitive": true, - "citekeyFold": true, - "citekeyFormat": "auth + year", - "citekeySearch": true, - "citekeyUnsafeChars": "\\\"#%'(),={}~", - "csquotes": "", - "DOIandURL": "both", - "exportBibTeXStrings": "off", - "exportBraceProtection": true, - "exportTitleCase": true, - "extraMergeCitekeys": false, - "extraMergeCSL": false, - "extraMergeTeX": false, - "git": "config", - "import": true, - "importBibTeXStrings": true, - "importCaseProtection": "as-needed", - "importCitationKey": true, - "importDetectURLs": true, - "importExtra": true, - "importJabRefAbbreviations": true, - "importJabRefStrings": true, - "importNoteToExtra": "", - "importSentenceCase": "on+guess", - "importSentenceCaseQuoted": true, - "importUnknownTexCommand": "ignore", - "itemObserverDelay": 5, - "jabrefFormat": 0, - "jieba": false, - "keyConflictPolicy": "keep", - "keyScope": "library", - "kuroshiro": false, - "language": "langid", - "mapMath": "", - "mapText": "", - "packages": "", - "parseParticles": true, - "patchDates": "dateadded=dateAdded, date-added=dateAdded, datemodified=dateModified, date-modified=dateModified", - "postscript": "", - "postscriptOverride": "", - "preferencesOverride": "", - "qualityReport": false, - "quickCopyEta": "", - "quickCopyMode": "latex", - "quickCopyOrgMode": "zotero", - "quickCopyPandocBrackets": false, - "quickCopySelectLink": "zotero", - "rawImports": false, - "rawLaTag": "#LaTeX", - "relativeFilePaths": false, - "retainCache": false, - "separatorList": "and", - "separatorNames": "and", - "skipFields": "", - "skipWords": "a,ab,aboard,about,above,across,after,against,al,along,amid,among,an,and,anti,around,as,at,before,behind,below,beneath,beside,besides,between,beyond,but,by,d,da,das,de,del,dell,dello,dei,degli,della,dell,delle,dem,den,der,des,despite,die,do,down,du,during,ein,eine,einem,einen,einer,eines,el,en,et,except,for,from,gli,i,il,in,inside,into,is,l,la,las,le,les,like,lo,los,near,nor,of,off,on,onto,or,over,past,per,plus,round,save,since,so,some,sur,than,the,through,to,toward,towards,un,una,unas,under,underneath,une,unlike,uno,unos,until,up,upon,versus,via,von,while,with,within,without,yet,zu,zum", - "startupProgress": "popup", - "strings": "", - "stringsOverride": "", - "verbatimFields": "url,doi,file,pdf,ids,eprint,/^verb[a-z]$/,groups,/^citeulike-linkout-[0-9]+$/, /^bdsk-url-[0-9]+$/, keywords", - "warnBulkModify": 10, - "warnTitleCased": false - }, "options": { - "exportNotes": true, - "exportFileData": false, "Items": true, "Preferences": true, - "keepUpdated": false, - "worker": false, - "Normalize": true + "exportNotes": true + }, + "preferences": { + "citekeyFormat": "auth + year" } }, - "version": { - "zotero": "6.0.30", - "bbt": "6.7.160.emile.HUAWEI_P30_lite-9994ba306.localdomain" - }, - "collections": {}, "items": [ { - "version": 0, - "itemType": "journalArticle", - "url": "https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3989732/", - "volume": "8", - "publicationTitle": "Frontiers in computational neuroscience", - "date": "2014", - "extra": "Citation Key: Straube14infreqPerfEstImbal\nPublisher: Frontiers Media SA\ntex.owner: sotterson\ntex.timestamp: 2017.01.17", "DOI": "10.3389/fncom.2014.00043", "abstractNote": "In everyday life, humans and animals often have to base decisions on infrequent relevant stimuli with respect to frequent irrelevant ones. When research in neuroscience mimics this situation, the effect of this imbalance in stimulus classes on performance evaluation has to be considered. This is most obvious for the often used overall accuracy, because the proportion of correct responses is governed by the more frequent class. This imbalance problem has been widely debated across disciplines and out of the discussed treatments this review focusses on performance estimation. For this, a more universal view is taken: an agent performing a classification task. Commonly used performance measures are characterized when used with imbalanced classes. Metrics like Accuracy, F-Measure, Matthews Correlation Coefficient, and Mutual Information are affected by imbalance, while other metrics do not have this drawback, like AUC, d-prime, Balanced Accuracy, Weighted Accuracy and G-Mean. It is pointed out that one is not restricted to this group of metrics, but the sensitivity to the class ratio has to be kept in mind for a proper choice. Selecting an appropriate metric is critical to avoid drawing misled conclusions. Keywords: metrics, decision making, confusion matrix, oddball, imbalance, performance evaluation, classification", - "title": "How to evaluate an agent's behavior to infrequent events??Reliable performance estimation insensitive to class distribution", + "citationKey": "Straube14infreqPerfEstImbal", "creators": [ { + "creatorType": "author", "firstName": "Sirko", - "lastName": "Straube", - "creatorType": "author" + "lastName": "Straube" }, { + "creatorType": "author", "firstName": "Mario M", - "lastName": "Krell", - "creatorType": "author" + "lastName": "Krell" } ], - "tags": [], - "relations": {}, - "dateAdded": "2024-02-15T14:48:20Z", - "dateModified": "2024-02-15T14:48:20Z", - "uri": "http://zotero.org/users/8230813/items/A4K3RZHH", - "attachments": [], + "date": "2014", + "extra": [ + "Citation Key: Straube14infreqPerfEstImbal", + "Publisher: Frontiers Media SA", + "tex.owner: sotterson", + "tex.timestamp: 2017.01.17" + ], + "itemID": 1, + "itemType": "journalArticle", "notes": [ - { - "key": "L6V67WXL", - "version": 0, - "itemType": "note", - "parentItem": "A4K3RZHH", - "note": "Straube14infreqPerfEstImbal

\nCommonly used performance measures are characterized when used with imbalanced classes. A nice review paper.

\nMetrics like Accuracy, F-Measure, Matthews Correlation Coefficient (really?), and Mutual Information are affected by imbalance, while other metrics do not have this drawback, like AUC, d-prime, Balanced Accuracy, Weighted Accuracy and G-Mean.

\nMutual Information and Imbalance - I(X;Y) = H(X) - H(X|Y) - if X is a binary class prediction, then H(X) is solely determined by the prior class distribution - so you'll get a different # for different class imbalance - but if you're just doing featsel using MI, then all features will have the same H(X) and (I think) it still makes sense to pick features w/ max MI, right?

\nMatthews Correlation Coefficient is said to be one of the best metrics for multi-class imbalanced accuracy: Liang21sleepStagePred", - "tags": [], - "relations": {}, - "dateAdded": "2024-02-15T14:48:20Z", - "dateModified": "2024-02-15T14:48:20Z", - "uri": "http://zotero.org/users/8230813/items/L6V67WXL" - } + "Straube14infreqPerfEstImbal

Commonly used performance measures are characterized when used with imbalanced classes. A nice review paper.

Metrics like Accuracy, F-Measure, Matthews Correlation Coefficient (really?), and Mutual Information are affected by imbalance, while other metrics do not have this drawback, like AUC, d-prime, Balanced Accuracy, Weighted Accuracy and G-Mean.

Mutual Information and Imbalance

- I(X;Y) = H(X) - H(X|Y)

- if X is a binary class prediction, then H(X) is solely determined by the prior class distribution

- so you'll get a different # for different class imbalance

- but if you're just doing featsel using MI, then all features will have the same H(X) and (I think) it still makes sense to pick features w/ max MI, right?

Matthews Correlation Coefficient is said to be one of the best metrics for multi-class imbalanced accuracy: Liang21sleepStagePred" ], - "citationKey": "Straube14infreqPerfEstImbal", - "itemID": 102, - "itemKey": "A4K3RZHH", - "libraryID": 1 + "publicationTitle": "Frontiers in computational neuroscience", + "title": "How to evaluate an agent's behavior to infrequent events??Reliable performance estimation insensitive to class distribution", + "url": "https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3989732/", + "volume": "8" } ] -} \ No newline at end of file +} diff --git a/test/fixtures/import/Film references do not export properly for APA formating #2494.bib b/test/fixtures/import/Film references do not export properly for APA formating #2494.bib index 66154b962d..cbcc730e3a 100644 --- a/test/fixtures/import/Film references do not export properly for APA formating #2494.bib +++ b/test/fixtures/import/Film references do not export properly for APA formating #2494.bib @@ -8,7 +8,7 @@ @video{formanOneFlewCuckoo1975 } @video{formanOneFlewCuckoo1975-film, - entrysubtype = {film} + entrysubtype = {film}, title = {One Flew over the Cuckoo's Nest}, editor = {Forman, Miloš}, date = {1975}, @@ -18,7 +18,7 @@ @video{formanOneFlewCuckoo1975-film } @video{formanOneFlewCuckoo1975-tv, - entrysubtype = {tvbroadcast} + entrysubtype = {tvbroadcast}, title = {One Flew over the Cuckoo's Nest}, editor = {Forman, Miloš}, date = {1975}, @@ -28,7 +28,7 @@ @video{formanOneFlewCuckoo1975-tv } @video{formanOneFlewCuckoo1975-epi, - entrysubtype = {tvepisode} + entrysubtype = {tvepisode}, title = {One Flew over the Cuckoo's Nest}, editor = {Forman, Miloš}, date = {1975}, diff --git a/test/fixtures/import/Improve import of films #1837.json b/test/fixtures/import/Improve import of films #1837.json index 7eb1b51b1e..e50e7d58f8 100644 --- a/test/fixtures/import/Improve import of films #1837.json +++ b/test/fixtures/import/Improve import of films #1837.json @@ -3,6 +3,8 @@ "id": "36a3b0b5-bad0-4a04-b79b-441c7cef77db", "label": "BetterBibTeX JSON", "options": { + "Items": true, + "Preferences": true, "exportNotes": true }, "preferences": { @@ -111,7 +113,7 @@ "itemType": "book", "place": "New York", "publisher": "Oxford University Press", - "title": "Jihad and death. The Global Appeal of Islamic State" + "title": "Jihad and death. The global appeal of islamic state" } ] -} +} \ No newline at end of file diff --git a/test/fixtures/import/LaTeX commands in Zotero should be exported untouched #1380.json b/test/fixtures/import/LaTeX commands in Zotero should be exported untouched #1380.json index 20df6205c6..4c2619160c 100644 --- a/test/fixtures/import/LaTeX commands in Zotero should be exported untouched #1380.json +++ b/test/fixtures/import/LaTeX commands in Zotero should be exported untouched #1380.json @@ -2,10 +2,13 @@ "config": { "id": "36a3b0b5-bad0-4a04-b79b-441c7cef77db", "label": "BetterBibTeX JSON", - "localeDateOrder": "ymd", - "options": {}, + "options": { + "Items": true, + "Preferences": true, + "exportNotes": true + }, "preferences": { - "citekeyFormat": "[auth][year]", + "citekeyFormat": "auth + year", "rawImports": true } }, @@ -16,38 +19,31 @@ "creators": [ { "creatorType": "author", - "firstName": "Frank", - "lastName": "Mittelbach" + "name": "Mittelbach, Frank" }, { "creatorType": "author", - "firstName": "Michel", - "lastName": "Goossens" + "name": "Goossens, Michel" }, { "creatorType": "translator", - "firstName": "Jacques", - "lastName": "Andr\\'e" + "name": "Andr\\'e, Jacques" }, { "creatorType": "translator", - "firstName": "Beno\u00eet", - "lastName": "Bellet" + "name": "Bellet, Beno\u00eet" }, { "creatorType": "translator", - "firstName": "Jean-C\u00f4me", - "lastName": "Charpentier" + "name": "Charpentier, Jean-C\u00f4me" }, { "creatorType": "translator", - "firstName": "Jean-Michel", - "lastName": "Hufflen" + "name": "Hufflen, Jean-Michel" }, { "creatorType": "translator", - "firstName": "Yves", - "lastName": "Soulet" + "name": "Soulet, Yves" } ], "date": "2006-02", diff --git a/test/fixtures/import/Lowercase A in BBT Sentence Case #2078.json b/test/fixtures/import/Lowercase A in BBT Sentence Case #2078.json index 2b5077665f..cefd7cd646 100644 --- a/test/fixtures/import/Lowercase A in BBT Sentence Case #2078.json +++ b/test/fixtures/import/Lowercase A in BBT Sentence Case #2078.json @@ -45,7 +45,7 @@ "pages": "1412", "publicationTitle": "Journal of Open Source Software", "shortTitle": "Insight", - "title": "Insight: A unified interface to access information from model objects in R", + "title": "Insight: a unified interface to access information from model objects in R", "url": "http://joss.theoj.org/papers/10.21105/joss.01412", "volume": "4" } diff --git a/test/fixtures/import/Overline during Import #1467.json b/test/fixtures/import/Overline during Import #1467.json index c6768ca325..9745474acb 100644 --- a/test/fixtures/import/Overline during Import #1467.json +++ b/test/fixtures/import/Overline during Import #1467.json @@ -304,7 +304,7 @@ "journalAbbreviation": "Semicond. Sci. Technol.", "pages": "113001", "publicationTitle": "Semiconductor Science and Technology", - "title": "Recent progress in metal-organic chemical vapor deposition of (0001\u0305) N-Polar group-III nitrides", + "title": "Recent progress in metal-organic chemical vapor deposition of (0001\u0305) N-polar group-III nitrides", "volume": "29" }, { @@ -400,7 +400,7 @@ "journalAbbreviation": "Appl. Phys. Express", "pages": "061005", "publicationTitle": "Applied Physics Express", - "title": "Red to blue wavelength emission of N-Polar (0001\u0305) InGaN light-emitting diodes grown by metalorganic vapor phase epitaxy", + "title": "Red to blue wavelength emission of N-polar (0001\u0305) InGaN light-emitting diodes grown by metalorganic vapor phase epitaxy", "volume": "8" } ] diff --git a/test/fixtures/import/issuenumberarticle-number #2551.json b/test/fixtures/import/issuenumberarticle-number #2551.json index a05ce8a987..c51be35d5a 100644 --- a/test/fixtures/import/issuenumberarticle-number #2551.json +++ b/test/fixtures/import/issuenumberarticle-number #2551.json @@ -53,7 +53,7 @@ "itemID": 1, "itemType": "journalArticle", "publicationTitle": "Remote Sensing", - "title": "Precipitation retrieval over the tibetan plateau from the geostationary Orbit\u2014Part 2: Precipitation rates with elektro-l2 and insat-3D", + "title": "Precipitation retrieval over the tibetan plateau from the geostationary orbit\u2014part 2: Precipitation rates with elektro-L2 and insat-3D", "url": "https://www.mdpi.com/2072-4292/12/13/2114", "volume": "12" } diff --git a/translators/Better BibTeX.ts b/translators/Better BibTeX.ts index ce4564f234..88dfac0191 100644 --- a/translators/Better BibTeX.ts +++ b/translators/Better BibTeX.ts @@ -1,5 +1,6 @@ import { Translation, collect } from './lib/translator' import type { Translators } from '../typings/translators.d.ts' +import type { ParseError } from '@retorquere/bibtex-parser' declare const Zotero: any declare var ZOTERO_TRANSLATOR_INFO: Translators.Header // eslint-disable-line no-var @@ -82,7 +83,7 @@ export async function doImport(): Promise { if (translation.preferences.strings && translation.preferences.importBibTeXStrings) input = `${translation.preferences.strings}\n${input}` const bib = await Zotero.BetterBibTeX.parseBibTeX(input, translation) - const errors = bib.errors + const errors: ParseError[] = bib.errors const whitelist = bib.comments .filter((comment: string) => comment.startsWith('zotero-better-bibtex:whitelist:')) @@ -106,7 +107,7 @@ export async function doImport(): Promise { } catch (err) { Zotero.debug('bbt import error:', err) - errors.push({ message: err.message }) + errors.push({ error: err.message, input: '' }) } imported += 1 @@ -120,13 +121,9 @@ export async function doImport(): Promise { if (errors.length) { const item = new Zotero.Item('note') item.note = 'Import errors found:

    ' + Zotero.debug(`import errors: ${JSON.stringify(errors)}`) for (const err of errors) { item.note += '
  • ' - if (err.line) { - item.note += `line ${err.line}` - if (err.column) item.note += `, column ${err.column}` - item.note += ': ' - } item.note += escape.html(err.error) if (err.input) { Zotero.debug(`import error: ${err.error}\n>>>\n${err.input}\n<<<`) diff --git a/translators/bibtex/bibtex.ts b/translators/bibtex/bibtex.ts index 34deb071f8..0d443fd7d6 100644 --- a/translators/bibtex/bibtex.ts +++ b/translators/bibtex/bibtex.ts @@ -420,17 +420,37 @@ export function generateBibTeX(translation: Translation): void { translation.bibtex.complete() } -const importJabRef = new class { +const importJabRef = new class JabRefDefaults { + public unabbrev: Record = {} public strings = '' private loaded = { + unabbrev: false, strings: false, } load(translation: Translation) { - if (!this.loaded.strings && translation.preferences.importJabRefStrings) { - this.strings = Zotero.File.getContentsFromURL('chrome://zotero-better-bibtex/content/resource/bibtex/strings.bib') - this.loaded.strings = true + const assets = { + 'strings.bib': translation.preferences.importJabRefStrings, + 'unabbrev.json': translation.preferences.importJabRefAbbreviations, + } + + for (const [ asset, enabled ] of Object.entries(assets)) { + if (!enabled) continue + const cache = asset.split('.')[0] + if (this.loaded[cache]) continue + + const data = Zotero.File.getContentsFromURL(`chrome://zotero-better-bibtex/content/resource//bibtex/${asset}`) + switch (cache) { + case 'unabbrev': + Object.assign(this[cache], JSON.parse(data)) + break + case 'strings': + this[cache] = data + break + } + + this.loaded[cache] = true } } } @@ -442,11 +462,10 @@ export async function parseBibTeX(input: string, translation: Translation): Prom return await parse(input, { // we are actually sure it's a valid enum value; stupid workaround for TS2322: Type 'string' is not assignable to type 'boolean | "as-needed" | "strict"'. - caseProtection: (translation.preferences.importCaseProtection as 'as-needed'), unsupported: (node, tex, _entry) => { switch (translation.preferences.importUnknownTexCommand) { case 'tex': - return tex + return `` case 'text': return node.type === 'macro' ? node.content : tex case 'ignore': @@ -455,15 +474,16 @@ export async function parseBibTeX(input: string, translation: Translation): Prom return tex } }, + english: translation.preferences.importSentenceCase !== 'off', sentenceCase: { - langids: translation.preferences.importSentenceCase !== 'off', guess: translation.preferences.importSentenceCase === 'on+guess', preserveQuoted: !translation.preferences.importSentenceCaseQuoted, }, + caseProtection: (translation.preferences.importCaseProtection as 'as-needed'), verbatimFields: translation.verbatimFields, raw: translation.preferences.rawImports, - unabbreviations: translation.preferences.importJabRefAbbreviations, strings: importJabRef.strings, + removeOuterBraces: [ 'doi', 'publisher', 'location', 'title', 'booktitle' ], }) } @@ -543,6 +563,10 @@ export class ZoteroItem { return false } + protected $crossref(): boolean { + return true + } + protected $title(): boolean { let title: string[] = [] @@ -679,9 +703,11 @@ export class ZoteroItem { protected $journaltitle(): boolean { let journal: { field: string, value: string}, abbr: { field: string, value: string} = null + const unpack = (v: string | string[]): string => Array.isArray(v) ? v[0] : (v || '') + // journal-full is bibdesk const titles = [ 'journal-full', 'journal', 'journaltitle', 'shortjournal' ].map(field => { - const value = this.bibtex.fields[field]?.[0] || '' + const value = unpack(this.bibtex.fields[field]) delete this.bibtex.fields[field] // this makes sure we're not ran again return { field, value } }) @@ -715,10 +741,34 @@ export class ZoteroItem { return true }) + // the remainer goes to the `extra` field for (const candidate of titles) { this.extra.push(`tex.${candidate.field}: ${candidate.value}`) } + const resolve = (a: string): string => { + if (!importJabRef.unabbrev) return '' + + a = a.toUpperCase() + let j: string + + if (j = importJabRef.unabbrev[a]) return j + + const m = a.match(/(.*)(\s+\S*\d\S*)$/) + if (m && (j = importJabRef.unabbrev[m[1]])) return `${j}${m[2]}` + + return '' + } + + let resolved: string + if (abbr && !journal && (resolved = resolve(abbr.value))) { + journal = { field: '', value: resolved } + } + else if (journal && !abbr && (resolved = resolve(journal.value))) { + abbr = { ...journal } + journal = { field: '', value: resolved } + } + if (journal) { switch (this.item.itemType) { case 'conferencePaper': @@ -738,7 +788,7 @@ export class ZoteroItem { else if (!this.extra.find(line => line.startsWith('Journal abbreviation:'))) { this.extra.push(`Journal abbreviation: ${abbr.value}`) } - else { + else if (abbr.field) { this.extra.push(`tex.${abbr.field}: ${abbr.value}`) } } @@ -774,7 +824,7 @@ export class ZoteroItem { if (typeof data === 'string') { tags.push(...(data.split(/\s*[,;]\s*/))) } - else { + else if (data) { tags.push(...data) } } @@ -1124,7 +1174,7 @@ export class ZoteroItem { this.item.itemType === 'book' && this.bibtex.fields.title?.length && this.bibtex.fields.booktitle?.length - && !this.bibtex.crossref.donated.includes('booktitle')) this.item.itemType = 'bookSection' + && !this.bibtex.crossref?.donated.includes('booktitle')) this.item.itemType = 'bookSection' if ( this.item.itemType === 'journalArticle' @@ -1265,7 +1315,7 @@ export class ZoteroItem { const urls: Set = new Set for (let [field, values] of Object.entries(this.bibtex.fields)) { - if (!Array.isArray(values)) values = [ values ] + if (typeof values === 'string') values = [ values ] for (const value of values) { if (typeof value !== 'string') { @@ -1273,7 +1323,7 @@ export class ZoteroItem { continue } - if (field.match(/^(local-zo-url-[0-9]+|file-[0-9]+)$/)) { + if (field.match(/^(local-zo-url-[0-9]+|file-[0-9]+)$/) || field.match(/^file[+]duplicate-\s+$/)) { if (this.$file(value)) continue } else if (field.match(/^(bdsk-url-[0-9]+|url|howpublished|remote-url)$/)) { @@ -1295,7 +1345,6 @@ export class ZoteroItem { if (this.$note(value, 'note')) continue } - log.debug('parsing', { field, value }) if (this[`$${field}`]?.(value, field)) continue switch (field) { diff --git a/translators/bibtex/entry.ts b/translators/bibtex/entry.ts index 7c4f2ce1de..1c5e8b60a5 100644 --- a/translators/bibtex/entry.ts +++ b/translators/bibtex/entry.ts @@ -985,7 +985,10 @@ export class Entry { const encoded = [] for (const creator of f.value) { let name - if (creator.name || (creator.lastName && (creator.fieldMode === 1))) { + if (creator.name && raw) { + name = creator.name + } + else if (creator.name || (creator.lastName && (creator.fieldMode === 1))) { name = creator.name || creator.lastName if (name !== 'others') name = raw ? `{${name}}` : this.enc_literal({value: new String(this._enc_creators_scrub_name(name))}) // eslint-disable-line no-new-wrappers From 50e866c3756bbe2e9b82129ee8686f58a216b8eb Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Mon, 15 Apr 2024 03:11:45 +0200 Subject: [PATCH 038/177] import updates --- test/fixtures/import/Better BibTeX.010.json | 242 +++++------------- test/fixtures/import/Better BibTeX.011.json | 10 +- ...reamble with def create problems #732.json | 8 +- ... to handle unparsed author names (92).json | 2 +- ... to event-place for conference papers.json | 10 +- ...ile) are a single tag in Zotero #2743.json | 2 +- .../Jabref import - groups lost #1730.json | 70 +++-- ...with percent sign #95 or preamble #96.json | 2 +- ...rted to lowercase during import #1350.json | 18 +- ... from BibDesk2Zotero_attachments #667.json | 15 +- .../import/unknown command handler #1733.json | 183 +++---------- ...bb (quietly) chokes on this .bib #664.json | 4 +- 12 files changed, 175 insertions(+), 391 deletions(-) diff --git a/test/fixtures/import/Better BibTeX.010.json b/test/fixtures/import/Better BibTeX.010.json index 8b905fc637..6809caeb8a 100644 --- a/test/fixtures/import/Better BibTeX.010.json +++ b/test/fixtures/import/Better BibTeX.010.json @@ -2,228 +2,114 @@ "config": { "id": "36a3b0b5-bad0-4a04-b79b-441c7cef77db", "label": "BetterBibTeX JSON", - "preferences": { - "ascii": "", - "asciiBibLaTeX": false, - "asciiBibTeX": true, - "autoAbbrev": false, - "autoAbbrevStyle": "", - "autoExport": "immediate", - "autoExportDelay": 5, - "autoExportIdleWait": 10, - "autoExportPathReplaceDiacritics": false, - "autoExportPathReplaceDirSep": "-", - "autoExportPathReplaceSpace": " ", - "automaticTags": true, - "autoPinDelay": 0, - "auxImport": false, - "baseAttachmentPath": "", - "biblatexExtendedDateFormat": true, - "biblatexExtendedNameFormat": true, - "biblatexExtractEprint": true, - "bibtexEditionOrdinal": false, - "bibtexParticleNoOp": false, - "bibtexURL": "off", - "cache": true, - "cacheFlushInterval": 5, - "charmap": "", - "citeCommand": "cite", - "citekeyFold": true, - "citekeyFormat": "auth + year", - "citekeySearch": true, - "citekeyUnsafeChars": "\\\"#%'(),={}~", - "csquotes": "", - "DOIandURL": "both", - "exportBibTeXStrings": "off", - "exportBraceProtection": true, - "exportTitleCase": true, - "extraMergeCitekeys": false, - "extraMergeCSL": false, - "extraMergeTeX": false, - "git": "config", - "import": true, - "importBibTeXStrings": true, - "importCaseProtection": "as-needed", - "importCitationKey": true, - "importDetectURLs": true, - "importExtra": true, - "importJabRefAbbreviations": true, - "importJabRefStrings": true, - "importNoteToExtra": "", - "importSentenceCase": "on+guess", - "importSentenceCaseQuoted": true, - "importUnknownTexCommand": "ignore", - "itemObserverDelay": 5, - "jabrefFormat": 0, - "jieba": false, - "keyConflictPolicy": "keep", - "keyScope": "library", - "kuroshiro": false, - "language": "langid", - "mapMath": "", - "mapText": "", - "parseParticles": true, - "patchDates": "dateadded=dateAdded, date-added=dateAdded, datemodified=dateModified, date-modified=dateModified", - "postscript": "", - "postscriptOverride": "", - "preferencesOverride": "", - "qualityReport": false, - "quickCopyEta": "", - "quickCopyMode": "latex", - "quickCopyOrgMode": "zotero", - "quickCopyPandocBrackets": false, - "quickCopySelectLink": "zotero", - "rawImports": false, - "rawLaTag": "#LaTeX", - "relativeFilePaths": false, - "retainCache": false, - "separatorList": "and", - "separatorNames": "and", - "skipFields": "", - "skipWords": "a,ab,aboard,about,above,across,after,against,al,along,amid,among,an,and,anti,around,as,at,before,behind,below,beneath,beside,besides,between,beyond,but,by,d,da,das,de,del,dell,dello,dei,degli,della,dell,delle,dem,den,der,des,despite,die,do,down,du,during,ein,eine,einem,einen,einer,eines,el,en,et,except,for,from,gli,i,il,in,inside,into,is,l,la,las,le,les,like,lo,los,near,nor,of,off,on,onto,or,over,past,per,plus,round,save,since,so,some,sur,than,the,through,to,toward,towards,un,una,unas,under,underneath,une,unlike,uno,unos,until,up,upon,versus,via,von,while,with,within,without,yet,zu,zum", - "startupProgress": "popup", - "strings": "", - "stringsOverride": "", - "verbatimFields": "url,doi,file,pdf,ids,eprint,/^verb[a-z]$/,groups,/^citeulike-linkout-[0-9]+$/, /^bdsk-url-[0-9]+$/", - "warnBulkModify": 10, - "warnTitleCased": false - }, "options": { - "exportNotes": true, - "exportFileData": false, - "keepUpdated": false, - "worker": false, - "Normalize": true + "Items": true, + "Preferences": true, + "exportNotes": true + }, + "preferences": { + "citekeyFormat": "auth + year" } }, - "version": { - "zotero": "6.0.27", - "bbt": "6.7.122.emile.limonia" - }, - "collections": {}, "items": [ { - "version": 0, - "itemType": "conferencePaper", - "url": "http://dblp.uni-trier.de/db/conf/icdm/icdmw2009.html#HulseKNW09", - "publisher": "IEEE Computer Society", - "pages": "507-514", "ISBN": "978-0-7695-3902-7", - "date": "2010-01-27", - "extra": "Citation Key: Hulse2009\ntex.added-at: 2010-01-27T00:00:00.000+0100\ntex.crossref: conf/icdm/2009w\ntex.description: dblp\ntex.interhash: aad604c231737dbf8f6155082e3535ae\ntex.intrahash: c97a29e90fbd958a0990360f70252458\ntex.owner: sstudent\ntex.timestamp: 2011.01.03", - "title": "Feature selection with high-dimensional imbalanced data#", + "attachments": [ + { + "accessDate": "2024-04-15T01:00:16Z", + "itemType": "attachment", + "linkMode": "linked_url", + "title": "biburl", + "url": "http://www.bibsonomy.org/bibtex/2c97a29e90fbd958a0990360f70252458/dblp" + }, + { + "accessDate": "2024-04-15T01:00:16Z", + "itemType": "attachment", + "linkMode": "linked_url", + "title": "ee", + "url": "http://doi.ieeecomputersociety.org/10.1109/ICDMW.2009.35" + } + ], + "citationKey": "Hulse2009", "creators": [ { + "creatorType": "author", "firstName": "Jason Van", - "lastName": "Hulse", - "creatorType": "author" + "lastName": "Hulse" }, { + "creatorType": "author", "firstName": "Taghi M.", - "lastName": "Khoshgoftaar", - "creatorType": "author" + "lastName": "Khoshgoftaar" }, { + "creatorType": "author", "firstName": "Amri", - "lastName": "Napolitano", - "creatorType": "author" + "lastName": "Napolitano" }, { + "creatorType": "author", "firstName": "Randall", - "lastName": "Wald", - "creatorType": "author" + "lastName": "Wald" }, { - "firstName": "Yücel", - "lastName": "Saygin", - "creatorType": "editor" + "creatorType": "editor", + "firstName": "Y\u00fccel", + "lastName": "Saygin" }, { + "creatorType": "editor", "firstName": "Jeffrey Xu", - "lastName": "Yu", - "creatorType": "editor" + "lastName": "Yu" }, { + "creatorType": "editor", "firstName": "Hillol", - "lastName": "Kargupta", - "creatorType": "editor" + "lastName": "Kargupta" }, { + "creatorType": "editor", "firstName": "Wei", - "lastName": "Wang", - "creatorType": "editor" + "lastName": "Wang" }, { + "creatorType": "editor", "firstName": "Sanjay", - "lastName": "Ranka", - "creatorType": "editor" + "lastName": "Ranka" }, { + "creatorType": "editor", "firstName": "Philip S.", - "lastName": "Yu", - "creatorType": "editor" + "lastName": "Yu" }, { + "creatorType": "editor", "firstName": "Xindong", - "lastName": "Wu", - "creatorType": "editor" + "lastName": "Wu" } ], + "date": "2010-01-27", + "extra": [ + "Citation Key: Hulse2009", + "tex.added-at: 2010-01-27T00:00:00.000+0100", + "tex.description: dblp", + "tex.interhash: aad604c231737dbf8f6155082e3535ae", + "tex.intrahash: c97a29e90fbd958a0990360f70252458", + "tex.owner: sstudent", + "tex.timestamp: 2011.01.03" + ], + "itemID": 1, + "itemType": "conferencePaper", + "pages": "507-514", + "publicationTitle": "ICDM workshops", + "publisher": "IEEE Computer Society", "tags": [ { "tag": "dblp" } ], - "relations": [], - "dateAdded": "2023-10-07T20:22:32Z", - "dateModified": "2023-10-07T20:22:32Z", - "uri": "http://zotero.org/users/8230813/items/9IGTWAGK", - "attachments": [ - { - "version": 0, - "itemType": "attachment", - "url": "http://www.bibsonomy.org/bibtex/2c97a29e90fbd958a0990360f70252458/dblp", - "accessDate": "2023-10-07T20:22:32Z", - "title": "biburl", - "parentItem": "9IGTWAGK", - "linkMode": "linked_url", - "contentType": "", - "charset": "", - "tags": [], - "relations": {}, - "dateAdded": "2023-10-07T20:22:32Z", - "dateModified": "2023-10-07T20:22:32Z", - "uri": "http://zotero.org/users/8230813/items/B4BF4LJR", - "itemID": 103, - "itemKey": "B4BF4LJR", - "libraryID": 1 - }, - { - "version": 0, - "itemType": "attachment", - "url": "http://doi.ieeecomputersociety.org/10.1109/ICDMW.2009.35", - "accessDate": "2023-10-07T20:22:32Z", - "title": "ee", - "parentItem": "9IGTWAGK", - "linkMode": "linked_url", - "contentType": "", - "charset": "", - "tags": [], - "relations": {}, - "dateAdded": "2023-10-07T20:22:32Z", - "dateModified": "2023-10-07T20:22:32Z", - "uri": "http://zotero.org/users/8230813/items/WNHNHZR9", - "itemID": 104, - "itemKey": "WNHNHZR9", - "libraryID": 1 - } - ], - "notes": [], - "citationKey": "Hulse2009", - "itemID": 102, - "itemKey": "9IGTWAGK", - "libraryID": 1, - "publicationTitle": "ICDM workshops" + "title": "Feature selection with high-dimensional imbalanced data#", + "url": "http://dblp.uni-trier.de/db/conf/icdm/icdmw2009.html#HulseKNW09" } ] -} +} \ No newline at end of file diff --git a/test/fixtures/import/Better BibTeX.011.json b/test/fixtures/import/Better BibTeX.011.json index 06ca7b77e8..116b7b666d 100644 --- a/test/fixtures/import/Better BibTeX.011.json +++ b/test/fixtures/import/Better BibTeX.011.json @@ -2,14 +2,13 @@ "config": { "id": "36a3b0b5-bad0-4a04-b79b-441c7cef77db", "label": "BetterBibTeX JSON", - "localeDateOrder": "ymd", "options": { + "Items": true, + "Preferences": true, "exportNotes": true }, "preferences": { - "citekeyFormat": "[auth][year]", - "importCaseProtection": "off", - "itemObserverDelay": 100 + "citekeyFormat": "auth + year" } }, "items": [ @@ -36,14 +35,13 @@ "extra": [ "Citation Key: Klassen2010", "tex.bibsource: DBLP, http://dblp.uni-trier.de", - "tex.crossref: DBLP:conf/cata/2010", "tex.owner: sstudent", "tex.timestamp: 2011.03.22" ], "itemID": 1, "itemType": "conferencePaper", "notes": [ - "

    svm liniowe najlepsze

    " + "svm liniowe najlepsze" ], "pages": "25-30", "publicationTitle": "CATA", diff --git a/test/fixtures/import/BibTeX import; preamble with def create problems #732.json b/test/fixtures/import/BibTeX import; preamble with def create problems #732.json index 7d9e7a7828..e52aae3aed 100644 --- a/test/fixtures/import/BibTeX import; preamble with def create problems #732.json +++ b/test/fixtures/import/BibTeX import; preamble with def create problems #732.json @@ -2,13 +2,13 @@ "config": { "id": "36a3b0b5-bad0-4a04-b79b-441c7cef77db", "label": "BetterBibTeX JSON", - "localeDateOrder": "ymd", "options": { + "Items": true, + "Preferences": true, "exportNotes": true }, "preferences": { - "citekeyFormat": "[auth][year]", - "itemObserverDelay": 100 + "citekeyFormat": "auth + year" } }, "items": [ @@ -23,7 +23,7 @@ { "creatorType": "author", "firstName": "Pavel", - "lastName": "Krej\u010d\u00ed" + "lastName": "Krej\u010d\u0131\u0301" } ], "extra": [ diff --git a/test/fixtures/import/Failure to handle unparsed author names (92).json b/test/fixtures/import/Failure to handle unparsed author names (92).json index e474d9d1ce..0c5cd152bd 100644 --- a/test/fixtures/import/Failure to handle unparsed author names (92).json +++ b/test/fixtures/import/Failure to handle unparsed author names (92).json @@ -51,7 +51,7 @@ "itemType": "bookSection", "publicationTitle": "Landolt-B\u00f6rnstein", "publisher": "Springer-Verlag", - "series": "SpringerMaterials - the Landolt-B\u00f6rnstein database", + "series": "SpringerMaterials - the landolt-b\u00f6rnstein database", "title": "Cuprous oxide (Cu\u2082O) crystal structure, lattice parameters", "volume": "III/41c" } diff --git a/test/fixtures/import/Import location to event-place for conference papers.json b/test/fixtures/import/Import location to event-place for conference papers.json index de1cc38193..54e5dfe464 100644 --- a/test/fixtures/import/Import location to event-place for conference papers.json +++ b/test/fixtures/import/Import location to event-place for conference papers.json @@ -2,9 +2,13 @@ "config": { "id": "36a3b0b5-bad0-4a04-b79b-441c7cef77db", "label": "BetterBibTeX JSON", - "options": {}, + "options": { + "Items": true, + "Preferences": true, + "exportNotes": true + }, "preferences": { - "citekeyFormat": "[auth][year]" + "citekeyFormat": "auth + year" } }, "items": [ @@ -37,7 +41,7 @@ "place": "New York, NY, USA", "publicationTitle": "Proceedings of the 7th international conference on principles and practice of programming in java", "publisher": "ACM", - "series": "PPPJ '09", + "series": "Pppj '09", "tags": [ { "tag": "calling context tree" diff --git a/test/fixtures/import/Imported tags from Calibre (bibtex.file) are a single tag in Zotero #2743.json b/test/fixtures/import/Imported tags from Calibre (bibtex.file) are a single tag in Zotero #2743.json index 2012c27f48..a1b8c2ea8b 100644 --- a/test/fixtures/import/Imported tags from Calibre (bibtex.file) are a single tag in Zotero #2743.json +++ b/test/fixtures/import/Imported tags from Calibre (bibtex.file) are a single tag in Zotero #2743.json @@ -53,7 +53,7 @@ "tag": "Minderheiten" } ], - "title": "Rechte nationaler minderheiten: ethische begr\u00fcndung, rechtliche verankerung und historische erfahrung", + "title": "Rechte nationaler Minderheiten: ethische Begr\u00fcndung, rechtliche Verankerung und historische Erfahrung", "volume": "1" } ] diff --git a/test/fixtures/import/Jabref import - groups lost #1730.json b/test/fixtures/import/Jabref import - groups lost #1730.json index 1473b6dbf7..c690541585 100644 --- a/test/fixtures/import/Jabref import - groups lost #1730.json +++ b/test/fixtures/import/Jabref import - groups lost #1730.json @@ -2,17 +2,12 @@ "collections": { "coll:00000": { "collections": [ - "coll:00004", - "coll:00007" - ], - "items": [ - 1, - 3, - 5, - 7 + "coll:00006" ], + "items": [], "key": "coll:00000", - "name": "Jabref import - groups lost #1730-3" + "name": "Markings", + "parent": "coll:00004" }, "coll:00001": { "collections": [ @@ -24,43 +19,48 @@ ], "key": "coll:00001", "name": "Group1", - "parent": "coll:00003" + "parent": "coll:00004" }, "coll:00002": { "collections": [ - "coll:00006" + "coll:00008", + "coll:00009" + ], + "items": [ + 1 ], - "items": [], "key": "coll:00002", - "name": "Markings", + "name": "Group1", "parent": "coll:00003" }, "coll:00003": { "collections": [ - "coll:00001", "coll:00002", - "coll:00010" + "coll:00007" ], "items": [ - 2, - 4, - 6, - 8 + 1, + 3, + 5, + 7 ], "key": "coll:00003", - "name": "Jabref import - groups lost #1730-5" + "name": "Jabref import - groups lost #1730-3" }, "coll:00004": { "collections": [ - "coll:00008", - "coll:00009" + "coll:00000", + "coll:00001", + "coll:00010" ], "items": [ - 1 + 2, + 4, + 6, + 8 ], "key": "coll:00004", - "name": "Group1", - "parent": "coll:00000" + "name": "Jabref import - groups lost #1730-5" }, "coll:00005": { "collections": [], @@ -74,7 +74,7 @@ "items": [], "key": "coll:00006", "name": "jfd1", - "parent": "coll:00002" + "parent": "coll:00000" }, "coll:00007": { "collections": [], @@ -84,7 +84,7 @@ ], "key": "coll:00007", "name": "Group2", - "parent": "coll:00000" + "parent": "coll:00003" }, "coll:00008": { "collections": [], @@ -95,7 +95,7 @@ ], "key": "coll:00008", "name": "Group1a", - "parent": "coll:00004" + "parent": "coll:00002" }, "coll:00009": { "collections": [], @@ -104,7 +104,7 @@ ], "key": "coll:00009", "name": "Group1b", - "parent": "coll:00004" + "parent": "coll:00002" }, "coll:00010": { "collections": [], @@ -114,7 +114,7 @@ ], "key": "coll:00010", "name": "Group2", - "parent": "coll:00003" + "parent": "coll:00004" }, "coll:00011": { "collections": [], @@ -278,7 +278,7 @@ "Submitted 6 Feb 2020, Accepted 17 April 2020," ], "publicationTitle": "2020 international symposium on electromagnetic compatibility - EMC EUROPE", - "title": "Coupling of Energy into PCB traces in a reverberant environment: Absorption cross-section and Risk of Susceptibility", + "title": "Coupling of energy into PCB traces in a reverberant environment: Absorption cross-section and risk of susceptibility", "url": "http://eprints.whiterose.ac.uk/160133/" }, { @@ -328,7 +328,7 @@ "Submitted 6 Feb 2020, Accepted 17 April 2020," ], "publicationTitle": "2020 international symposium on electromagnetic compatibility - EMC EUROPE", - "title": "Coupling of Energy into PCB traces in a reverberant environment: Absorption cross-section and Risk of Susceptibility", + "title": "Coupling of energy into PCB traces in a reverberant environment: Absorption cross-section and risk of susceptibility", "url": "http://eprints.whiterose.ac.uk/160133/" }, { @@ -445,12 +445,11 @@ "issue": "8", "itemID": 7, "itemType": "journalArticle", - "journalAbbreviation": "Electronics", "notes": [ "Submitted: 8 June 2020; Revised 13 July 2020, Accepted 27 July 2020" ], "pages": "1219", - "publicationTitle": "Electronicsweek", + "publicationTitle": "Electronics", "title": "Virtual sensing directional hub MAC (VSDH-MAC) protocol with power control", "url": "http://eprints.whiterose.ac.uk/163808/", "volume": "9" @@ -489,12 +488,11 @@ "issue": "8", "itemID": 8, "itemType": "journalArticle", - "journalAbbreviation": "Electronics", "notes": [ "Submitted: 8 June 2020; Revised 13 July 2020, Accepted 27 July 2020" ], "pages": "1219", - "publicationTitle": "Electronicsweek", + "publicationTitle": "Electronics", "title": "Virtual sensing directional hub MAC (VSDH-MAC) protocol with power control", "url": "http://eprints.whiterose.ac.uk/163808/", "volume": "9" diff --git a/test/fixtures/import/Problem when importing BibTeX entries with percent sign #95 or preamble #96.json b/test/fixtures/import/Problem when importing BibTeX entries with percent sign #95 or preamble #96.json index 884a49b9b2..25f059f9fb 100644 --- a/test/fixtures/import/Problem when importing BibTeX entries with percent sign #95 or preamble #96.json +++ b/test/fixtures/import/Problem when importing BibTeX entries with percent sign #95 or preamble #96.json @@ -15,7 +15,7 @@ { "DOI": "10.1016/j.tsf.2009.05.016", "ISSN": "0040-6090", - "abstractNote": "In this study, electrochromic properties of cuprous oxide nanoparticles, self-accumulated on the surface of a sol-gel silica thin film, have been investigated by using UV-visible spectrophotometry in a lithium-based electrolyte cell. The cuprous oxide nanoparticles showed a reversible electrochromic process with a thin film transmission reduction of about 50% in a narrow wavelength range of 400-500\u00c2nm, as compared to the bleached state of the film. Using optical transmission measurement, we have found that the band gap energy of the films reduced from 2.7\u00c2eV for Cu2O to 1.3\u00c2eV for CuO by increasing the annealing temperature from 220 to 300\u00c2\u00b0C in an N2 environment for 1\u00c2h. Study of the band gaps of the as-deposited, colored and bleached states of the nanoparticles showed that the electrochromic process corresponded to a reversible red-ox conversion of Cu2O to CuO on the film surface, in addition to the reversible red-ox reaction of the Cu2O film. X-ray photoelectron spectroscopy indicated that the copper oxide nanoparticles accumulated on the film surface, after annealing the samples at 200\u00c2\u00b0C. Surface morphology of the films and particle size of the surface copper oxides have also been studied by atomic force microscopy analysis. The copper oxide nanoparticles with average size of about 100\u00c2nm increased the surface area ratio and surface roughness of the silica films from 2.2% and 0.8\u00c2nm to 51% and 21\u00c2nm, respectively.", + "abstractNote": "In this study, electrochromic properties of cuprous oxide nanoparticles, self-accumulated on the surface of a sol-gel silica thin film, have been investigated by using UV-visible spectrophotometry in a lithium-based electrolyte cell. The cuprous oxide nanoparticles showed a reversible electrochromic process with a thin film transmission reduction of about 50transmission measurement, we have found that the band gap energy of the films reduced from 2.7\u00c2eV for Cu2O to 1.3\u00c2eV for CuO by increasing the annealing temperature from 220 to 300\u00c2\u00b0C in an N2 environment for 1\u00c2h. Study of the band gaps of the as-deposited, colored and bleached states of the nanoparticles showed that the electrochromic process corresponded to a reversible red-ox conversion of Cu2O to CuO on the film surface, in addition to the reversible red-ox reaction of the Cu2O film. X-ray photoelectron spectroscopy indicated that the copper oxide nanoparticles accumulated on the film surface, after annealing the samples at 200\u00c2\u00b0C. Surface morphology of the films and particle size of the surface copper oxides have also been studied by atomic force microscopy analysis. The copper oxide nanoparticles with average size of about 100\u00c2nm increased the surface area ratio and surface roughness of the silica films from 2.221\u00c2nm, respectively.", "citationKey": "Akhavan_2009", "creators": [ { diff --git a/test/fixtures/import/Title of German entry converted to lowercase during import #1350.json b/test/fixtures/import/Title of German entry converted to lowercase during import #1350.json index a19c819f5e..a528f5f922 100644 --- a/test/fixtures/import/Title of German entry converted to lowercase during import #1350.json +++ b/test/fixtures/import/Title of German entry converted to lowercase during import #1350.json @@ -2,9 +2,13 @@ "config": { "id": "36a3b0b5-bad0-4a04-b79b-441c7cef77db", "label": "BetterBibTeX JSON", - "options": {}, + "options": { + "Items": true, + "Preferences": true, + "exportNotes": true + }, "preferences": { - "citekeyFormat": "[auth][year]" + "citekeyFormat": "auth + year" } }, "items": [ @@ -65,7 +69,7 @@ "itemType": "bookSection", "pages": "93 \u2013 108", "place": "Paderborn", - "publicationTitle": "Religion heute \u2013 \u00f6ffentlich und politisch: Provokationen, kontroversen, perspektiven", + "publicationTitle": "Religion heute \u2013 \u00f6ffentlich und politisch: Provokationen, Kontroversen, Perspektiven", "publisher": "Sch\u00f6ningh", "title": "Die R\u00fcckkehr der Religionen in der politischen und medialen \u00d6ffent\u00ad lichkeit" }, @@ -86,9 +90,9 @@ "itemType": "bookSection", "language": "german", "place": "W\u00fcrzburg", - "publicationTitle": "Eine Auswahl von Techniken und Beispielen", + "publicationTitle": "Eine auswahl von techniken und beispielen", "publisher": "Ergon", - "title": "Die Darstellung des Islams in der Presse: Sprache, Bilder, Suggestionen" + "title": "Die darstellung des islams in der presse: Sprache, bilder, suggestionen" }, { "citationKey": "schiffer2005a", @@ -107,9 +111,9 @@ "itemType": "bookSection", "language": "german", "place": "W\u00fcrzburg", - "publicationTitle": "Eine Auswahl von Techniken und Beispielen", + "publicationTitle": "Eine auswahl von techniken und beispielen", "publisher": "Ergon", - "title": "Die Darstellung des Islams in der Presse: Sprache, Bilder, Suggestionen" + "title": "Die darstellung des islams in der presse: Sprache, bilder, suggestionen" } ] } \ No newline at end of file diff --git a/test/fixtures/import/support Local-Zo-Url-x field from BibDesk2Zotero_attachments #667.json b/test/fixtures/import/support Local-Zo-Url-x field from BibDesk2Zotero_attachments #667.json index 513bc60e48..405929c0ab 100644 --- a/test/fixtures/import/support Local-Zo-Url-x field from BibDesk2Zotero_attachments #667.json +++ b/test/fixtures/import/support Local-Zo-Url-x field from BibDesk2Zotero_attachments #667.json @@ -2,13 +2,13 @@ "config": { "id": "36a3b0b5-bad0-4a04-b79b-441c7cef77db", "label": "BetterBibTeX JSON", - "localeDateOrder": "ymd", "options": { + "Items": true, + "Preferences": true, "exportNotes": true }, "preferences": { - "citekeyFormat": "[auth][year]", - "itemObserverDelay": 100 + "citekeyFormat": "auth + year" } }, "items": [ @@ -16,9 +16,8 @@ "attachments": [ { "itemType": "attachment", - "path": "/Users/emile/.BBTTEST/zotero/storage/8VZFW8AS/1.pdf", - "title": "1", - "uri": "http://zotero.org/users/local/6z7M0kXV/items/8VZFW8AS" + "path": "ATTACHMENT_KEY/1.pdf", + "title": "1" } ], "citationKey": "Abbott-2007-aa", @@ -50,7 +49,7 @@ "tag": "Political Economy" } ], - "title": "Are developing countries deterred from using the WTO dispute settlement system? - participation of developing countries in the DSM in the years 1995-2005" + "title": "Are developing countries deterred from using the WTO dispute settlement system? - Participation of developing countries in the DSM in the years 1995-2005" } ] -} +} \ No newline at end of file diff --git a/test/fixtures/import/unknown command handler #1733.json b/test/fixtures/import/unknown command handler #1733.json index cd1e42eb4c..aa261abe78 100644 --- a/test/fixtures/import/unknown command handler #1733.json +++ b/test/fixtures/import/unknown command handler #1733.json @@ -2,143 +2,66 @@ "config": { "id": "36a3b0b5-bad0-4a04-b79b-441c7cef77db", "label": "BetterBibTeX JSON", + "options": { + "Items": true, + "Preferences": true, + "exportNotes": true + }, "preferences": { - "ascii": "", - "asciiBibLaTeX": false, - "asciiBibTeX": true, - "autoAbbrev": false, - "autoAbbrevStyle": "", - "autoExport": "immediate", - "autoExportDelay": 5, - "autoExportIdleWait": 10, - "autoExportPathReplaceDiacritics": false, - "autoExportPathReplaceDirSep": "-", - "autoExportPathReplaceSpace": " ", - "automaticTags": true, - "autoPinDelay": 0, - "auxImport": false, - "baseAttachmentPath": "", - "biblatexExtendedDateFormat": true, - "biblatexExtendedNameFormat": true, - "biblatexExtractEprint": true, - "bibtexEditionOrdinal": false, - "bibtexParticleNoOp": false, - "bibtexURL": "off", - "cache": true, - "cacheFlushInterval": 5, - "charmap": "", - "citeCommand": "cite", - "citekeyFold": true, "citekeyFormat": "auth + year", - "citekeySearch": true, - "citekeyUnsafeChars": "\\\"#%'(),={}~", - "csquotes": "", - "DOIandURL": "both", - "exportBibTeXStrings": "off", - "exportBraceProtection": true, - "exportTitleCase": true, - "extraMergeCitekeys": false, - "extraMergeCSL": false, - "extraMergeTeX": false, - "git": "config", - "import": true, - "importBibTeXStrings": true, - "importCaseProtection": "as-needed", - "importCitationKey": true, - "importDetectURLs": true, - "importExtra": true, - "importJabRefAbbreviations": true, - "importJabRefStrings": true, - "importNoteToExtra": "", - "importSentenceCase": "on+guess", - "importSentenceCaseQuoted": true, - "importUnknownTexCommand": "tex", - "itemObserverDelay": 5, - "jabrefFormat": 0, - "jieba": false, - "keyConflictPolicy": "keep", - "keyScope": "library", - "kuroshiro": false, - "language": "langid", - "mapMath": "", - "mapText": "", - "parseParticles": true, - "patchDates": "dateadded=dateAdded, date-added=dateAdded, datemodified=dateModified, date-modified=dateModified", - "postscript": "", - "postscriptOverride": "", - "preferencesOverride": "", - "qualityReport": false, - "quickCopyEta": "", - "quickCopyMode": "latex", - "quickCopyOrgMode": "zotero", - "quickCopyPandocBrackets": false, - "quickCopySelectLink": "zotero", - "rawImports": false, - "rawLaTag": "#LaTeX", - "relativeFilePaths": false, - "retainCache": false, - "separatorList": "and", - "separatorNames": "and", - "skipFields": "", - "skipWords": "a,ab,aboard,about,above,across,after,against,al,along,amid,among,an,and,anti,around,as,at,before,behind,below,beneath,beside,besides,between,beyond,but,by,d,da,das,de,del,dell,dello,dei,degli,della,dell,delle,dem,den,der,des,despite,die,do,down,du,during,ein,eine,einem,einen,einer,eines,el,en,et,except,for,from,gli,i,il,in,inside,into,is,l,la,las,le,les,like,lo,los,near,nor,of,off,on,onto,or,over,past,per,plus,round,save,since,so,some,sur,than,the,through,to,toward,towards,un,una,unas,under,underneath,une,unlike,uno,unos,until,up,upon,versus,via,von,while,with,within,without,yet,zu,zum", - "startupProgress": "popup", - "strings": "", - "stringsOverride": "", - "verbatimFields": "url,doi,file,pdf,ids,eprint,/^verb[a-z]$/,groups,/^citeulike-linkout-[0-9]+$/, /^bdsk-url-[0-9]+$/", - "warnBulkModify": 10, - "warnTitleCased": false - }, - "options": { - "exportNotes": true, - "exportFileData": false, - "keepUpdated": false, - "worker": false, - "Normalize": true + "importUnknownTexCommand": "tex" } }, - "version": { - "zotero": "6.0.27", - "bbt": "6.7.122.emile.limonia" - }, - "collections": {}, "items": [ { - "version": 0, - "itemType": "journalArticle", - "volume": "424", - "pages": "927-934", - "publicationTitle": "", - "date": "2004-09", - "extra": "Citation Key: 2004A&A...424..927C\narXiv: astro-ph/0405395 [astro-ph]\ntex.adsnote: Provided by the SAO/NASA Astrophysics Data System", "DOI": "10.1051/0004-6361:20040307", - "title": "Bright metal-poor variables: Why “Anomalous” cepheids?", + "attachments": [ + { + "accessDate": "2024-04-15T01:01:22Z", + "itemType": "attachment", + "linkMode": "linked_url", + "title": "adsurl", + "url": "https://ui.adsabs.harvard.edu/abs/2004A&A...424..927C" + } + ], + "citationKey": "2004A&A...424..927C", "creators": [ { + "creatorType": "author", "firstName": "F.", - "lastName": "Caputo", - "creatorType": "author" + "lastName": "Caputo" }, { + "creatorType": "author", "firstName": "V.", - "lastName": "Castellani", - "creatorType": "author" + "lastName": "Castellani" }, { + "creatorType": "author", "firstName": "S.", - "lastName": "Degl'Innocenti", - "creatorType": "author" + "lastName": "Degl'Innocenti" }, { + "creatorType": "author", "firstName": "G.", - "lastName": "Fiorentino", - "creatorType": "author" + "lastName": "Fiorentino" }, { + "creatorType": "author", "firstName": "M.", - "lastName": "Marconi", - "creatorType": "author" + "lastName": "Marconi" } ], + "date": "2004-09", + "extra": [ + "Citation Key: 2004A&A...424..927C", + "arXiv: astro-ph/0405395 [astro-ph]", + "tex.adsnote: Provided by the SAO/NASA Astrophysics Data System" + ], + "itemID": 1, + "itemType": "journalArticle", + "pages": "927-934", + "publicationTitle": "", "tags": [ { "tag": "Astrophysics" @@ -150,36 +73,8 @@ "tag": "stars: variables: Cepheids" } ], - "relations": [], - "dateAdded": "2023-10-07T18:59:30Z", - "dateModified": "2023-10-07T18:59:30Z", - "uri": "http://zotero.org/users/8230813/items/BN2NFCZR", - "attachments": [ - { - "version": 0, - "itemType": "attachment", - "url": "https://ui.adsabs.harvard.edu/abs/2004A&A...424..927C", - "accessDate": "2023-10-07T18:59:30Z", - "title": "adsurl", - "parentItem": "BN2NFCZR", - "linkMode": "linked_url", - "contentType": "", - "charset": "", - "tags": [], - "relations": {}, - "dateAdded": "2023-10-07T18:59:30Z", - "dateModified": "2023-10-07T18:59:30Z", - "uri": "http://zotero.org/users/8230813/items/PZ4EZPTF", - "itemID": 1505, - "itemKey": "PZ4EZPTF", - "libraryID": 1 - } - ], - "notes": [], - "citationKey": "2004A&A...424..927C", - "itemID": 1504, - "itemKey": "BN2NFCZR", - "libraryID": 1 + "title": "Bright metal-poor variables: Why \u201canomalous\u201d cepheids?", + "volume": "424" } ] -} +} \ No newline at end of file diff --git a/test/fixtures/import/zbb (quietly) chokes on this .bib #664.json b/test/fixtures/import/zbb (quietly) chokes on this .bib #664.json index fb11c41e99..86ec4562ec 100644 --- a/test/fixtures/import/zbb (quietly) chokes on this .bib #664.json +++ b/test/fixtures/import/zbb (quietly) chokes on this .bib #664.json @@ -18,7 +18,7 @@ "abstractNote": "Do societies choose inefficient policies and institutions? An extension of the Coase theorem to politics would suggest the answer is no. This paper discusses various approaches to political economy and develops the argument that there are strong empirical and theoretical grounds for believing that inefficient policies and institutions are prevalent. We conclude that these inefficient institutions and policies are chosen because they serve the interests of politicians or social groups that hold political power at the expense of the rest. The theoretical case depends on commitment problems inherent in politics; parties holding political power cannot make commitments to bind their future actions because there is no outside agency with the coercive capacity to enforce such arrangements. Journal of Comparative Economics 31 (4) (2003) 620-652.", "attachments": [ { - "accessDate": "2024-01-19T08:18:11Z", + "accessDate": "2024-04-15T01:00:49Z", "itemType": "attachment", "linkMode": "linked_url", "title": "bdsk-url-2", @@ -38,7 +38,7 @@ "Citation Key: Acemoglu2003Whynotpolitical", "tex.date-added: 2015-04-15 15:21:27 +0000", "tex.date-modified: 2017-05-15 14:14:57 +0000", - "tex.jlprojects: spatial\u2091lections, continuous\u2092piniondynamics", + "tex.jlprojects: spatial_elections, continuous_opinion_dynamics", "tex.project: ODCD", "tex.rating: 4", "tex.timestamp: 2011.06.01" From 6f9fc072469d4e84d35e7691918f988ba372ed65 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Mon, 15 Apr 2024 03:47:28 +0200 Subject: [PATCH 039/177] finally --- ...ate files in the wrong location #2300.json | 19 ++++++------------- translators/bibtex/bibtex.ts | 2 +- 2 files changed, 7 insertions(+), 14 deletions(-) diff --git a/test/fixtures/import/BBT + Zotfile creating duplicate files in the wrong location #2300.json b/test/fixtures/import/BBT + Zotfile creating duplicate files in the wrong location #2300.json index fac5124a8a..0b934f9c1f 100644 --- a/test/fixtures/import/BBT + Zotfile creating duplicate files in the wrong location #2300.json +++ b/test/fixtures/import/BBT + Zotfile creating duplicate files in the wrong location #2300.json @@ -32,7 +32,7 @@ "itemID": 1, "itemType": "journalArticle", "notes": [ - "In the paper at hand, I provide an editorial history of Isaac Newton\u2019s famous regulae philosophandi on the basis of extant manuscript material.&amp;lt;/p&amp;gt;" + "In the paper at hand, I provide an editorial history of Isaac Newton\u2019s famous regulae philosophandi on the basis of extant manuscript material.&lt;/p&gt;" ], "pages": "143\u2013164", "publicationTitle": "Estudios de Filosof\u00eda", @@ -105,12 +105,13 @@ "tex.category: Secondary", "tex.date-added: 2022-10-26 18:58:57 -0400", "tex.date-modified: 2022-10-26 18:58:57 -0400", - "tex.price: $80.00" + "tex.price: $80.00", + "tex.title+duplicate-1: The Cambridge History of Seventeenth-Century Philosophy" ], "itemID": 3, "itemType": "book", "publisher": "Cambridge University Press", - "title": "The cambridge history of seventeenth-century philosophy" + "title": "The Cambridge history of seventeenth-century philosophy" }, { "ISBN": "0-521-65177-8", @@ -145,13 +146,6 @@ }, { "ISBN": "0415170540 (hardcover)", - "attachments": [ - { - "itemType": "attachment", - "path": "ATTACHMENT_KEY/Gaukroger - The Soft Underbelly of Reason The Passions in the Seventeenth (1998).pdf", - "title": "Gaukroger - The Soft Underbelly of Reason The Passions in the Seventeenth (1998)" - } - ], "citationKey": "ZGaukroger1998a", "creators": [ { @@ -201,9 +195,8 @@ "issue": "4075", "itemID": 6, "itemType": "journalArticle", - "journalAbbreviation": "Science", "pages": "751\u2013758", - "publicationTitle": "Science (New York, N.Y.)", + "publicationTitle": "Science", "title": "Newton and the fudge factor", "volume": "179" }, @@ -247,7 +240,7 @@ "tag": "Synthesis" } ], - "title": "Constituting the \u2018object\u2019 of science in Newton's Principia: the many faces of Janus", + "title": "Constituting the \u2018object\u2019 of science in newton's principia: the many faces of janus", "url": "https://doi.org/10.1016/j.shpsa.2022.07.002", "volume": "95" } diff --git a/translators/bibtex/bibtex.ts b/translators/bibtex/bibtex.ts index 0d443fd7d6..e6e4bde190 100644 --- a/translators/bibtex/bibtex.ts +++ b/translators/bibtex/bibtex.ts @@ -1323,7 +1323,7 @@ export class ZoteroItem { continue } - if (field.match(/^(local-zo-url-[0-9]+|file-[0-9]+)$/) || field.match(/^file[+]duplicate-\s+$/)) { + if (field.match(/^(local-zo-url-[0-9]+|file-[0-9]+)$/) || field.match(/^file[+]duplicate-\d+$/)) { if (this.$file(value)) continue } else if (field.match(/^(bdsk-url-[0-9]+|url|howpublished|remote-url)$/)) { From eafbd7e622e4ccf42dd0940129a6ddbe116a7fd4 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Mon, 15 Apr 2024 04:12:47 +0200 Subject: [PATCH 040/177] submodules --- site/themes/relearn | 2 +- submodules/biber | 2 +- submodules/citation-style-language-locales | 2 +- submodules/zotero | 2 +- submodules/zotero-utilities | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/site/themes/relearn b/site/themes/relearn index 0add74a831..77ed3f431a 160000 --- a/site/themes/relearn +++ b/site/themes/relearn @@ -1 +1 @@ -Subproject commit 0add74a831b25d64272e8e769880f32d970f5b79 +Subproject commit 77ed3f431ae6fffa8f63c0ac59a407f06167cb19 diff --git a/submodules/biber b/submodules/biber index 80c047759e..c517652a0a 160000 --- a/submodules/biber +++ b/submodules/biber @@ -1 +1 @@ -Subproject commit 80c047759e3fd2986b21579a69854cfc5d9422db +Subproject commit c517652a0a9df27f209a593932bc48f27679af4a diff --git a/submodules/citation-style-language-locales b/submodules/citation-style-language-locales index cf4b49404f..1159f592d0 160000 --- a/submodules/citation-style-language-locales +++ b/submodules/citation-style-language-locales @@ -1 +1 @@ -Subproject commit cf4b49404fc15cf9a37372e4707ce710b0935ccc +Subproject commit 1159f592d095d890ba5b338a330be0f2c774c537 diff --git a/submodules/zotero b/submodules/zotero index b44757ad3c..c6e5850e1c 160000 --- a/submodules/zotero +++ b/submodules/zotero @@ -1 +1 @@ -Subproject commit b44757ad3c91401f7c532ea295952bd15e072a20 +Subproject commit c6e5850e1c6fe2edde499cdb9a10cbac320e2266 diff --git a/submodules/zotero-utilities b/submodules/zotero-utilities index fbc4d6ad1c..eab0922a2d 160000 --- a/submodules/zotero-utilities +++ b/submodules/zotero-utilities @@ -1 +1 @@ -Subproject commit fbc4d6ad1c947035404db4321912ed46fb113380 +Subproject commit eab0922a2dd3e1254d1ab69e87cb673f208c6257 From a6ff192ff3a4dbc6952a02e86a9bd0ee714d96b8 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Mon, 15 Apr 2024 04:23:20 +0200 Subject: [PATCH 041/177] holder handling --- translators/bibtex/bibtex.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/translators/bibtex/bibtex.ts b/translators/bibtex/bibtex.ts index e6e4bde190..fe69625ed6 100644 --- a/translators/bibtex/bibtex.ts +++ b/translators/bibtex/bibtex.ts @@ -1318,6 +1318,8 @@ export class ZoteroItem { if (typeof values === 'string') values = [ values ] for (const value of values) { + if (this.bibtex.mode[field] === 'creatorlist' && this[`$${field}`]?.(value, field)) continue + if (typeof value !== 'string') { errors.push({ error: `unexpected value ${JSON.stringify(value)} for ${field}`, input: JSON.stringify(value) }) continue From 365ef810f75571c7e9901169a5232608edfc7e70 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Mon, 15 Apr 2024 05:02:56 +0200 Subject: [PATCH 042/177] maybe no shims? --- content/better-bibtex.ts | 6 ++++-- package-lock.json | 8 ++++---- package.json | 2 +- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/content/better-bibtex.ts b/content/better-bibtex.ts index 2a6d0a0952..a4d2b9e206 100644 --- a/content/better-bibtex.ts +++ b/content/better-bibtex.ts @@ -1,7 +1,9 @@ /* eslint-disable prefer-rest-params */ -require('array.prototype.flatmap/auto') -require('string.prototype.matchall/auto') +// import flatMapShim from 'array.prototype.flatmap' +// if (!Array.prototype.flatMap) flatMapShim() +// import matchAllShim from 'string.prototype.matchall' +// if (!String.prototype.matchAll) matchAllShim() import { Shim } from './os' import { is7 } from './client' diff --git a/package-lock.json b/package-lock.json index 1ea569e527..681cb2b9fb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -60,7 +60,7 @@ "zotero-plugin": "2.0.14" }, "devDependencies": { - "@retorquere/bibtex-parser": "^9.0.2", + "@retorquere/bibtex-parser": "^9.0.3", "@retorquere/zotero-sync": "^1.0.27", "@types/bluebird": "^3.5.42", "@types/lokijs": "^1.5.14", @@ -2987,9 +2987,9 @@ } }, "node_modules/@retorquere/bibtex-parser": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/@retorquere/bibtex-parser/-/bibtex-parser-9.0.2.tgz", - "integrity": "sha512-vfUuUX3piWih4J+3ZdWZPhplaiV2oYUgUKBZEHMdg2QTRP7G5BhBzhM0kYqcfEyfS+w+pfNaB4Qs+fTbV0YhIg==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@retorquere/bibtex-parser/-/bibtex-parser-9.0.3.tgz", + "integrity": "sha512-v4ZcqCMZgm74WbCA+LnhSjkg+fKrWiMETMuA3+/AVsIonmla15zjzLqiq+SmT58/2vtU95yCZwV+0dmDYrTPfw==", "dev": true, "dependencies": { "@unified-latex/unified-latex-util-pegjs": "^1.7.1", diff --git a/package.json b/package.json index 481604dcaa..256eba0dd1 100644 --- a/package.json +++ b/package.json @@ -114,7 +114,7 @@ "zotero-plugin": "2.0.14" }, "devDependencies": { - "@retorquere/bibtex-parser": "^9.0.2", + "@retorquere/bibtex-parser": "^9.0.3", "@retorquere/zotero-sync": "^1.0.27", "@types/bluebird": "^3.5.42", "@types/lokijs": "^1.5.14", From a966f29f815758e5ffa546ca1bac09c1e5f39190 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Mon, 15 Apr 2024 08:03:45 +0200 Subject: [PATCH 043/177] not all fields are arrays anymore --- content/better-bibtex.ts | 8 ++++---- translators/bibtex/bibtex.ts | 5 ++--- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/content/better-bibtex.ts b/content/better-bibtex.ts index a4d2b9e206..e37a443ac4 100644 --- a/content/better-bibtex.ts +++ b/content/better-bibtex.ts @@ -1,9 +1,9 @@ /* eslint-disable prefer-rest-params */ -// import flatMapShim from 'array.prototype.flatmap' -// if (!Array.prototype.flatMap) flatMapShim() -// import matchAllShim from 'string.prototype.matchall' -// if (!String.prototype.matchAll) matchAllShim() +import flatMap from 'array.prototype.flatmap' +flatMap.shim() +import matchAll from 'string.prototype.matchall' +matchAll.shim() import { Shim } from './os' import { is7 } from './client' diff --git a/translators/bibtex/bibtex.ts b/translators/bibtex/bibtex.ts index fe69625ed6..e092ef176c 100644 --- a/translators/bibtex/bibtex.ts +++ b/translators/bibtex/bibtex.ts @@ -1078,7 +1078,7 @@ export class ZoteroItem { protected $series(value: string): boolean { return this.set('series', value) } protected $collection(value: string): boolean { - return this.bibtex.fields.series ? (this.bibtex.fields.series[0].toLowerCase() === value.toLowerCase()) : this.$series(value) + return this.bibtex.fields.series ? (this.bibtex.fields.series.toLowerCase() === value.toLowerCase()) : this.$series(value) } // horrid jabref 3.8+ groups format @@ -1300,7 +1300,6 @@ export class ZoteroItem { conference: 'conferenceName', } - if (this.item.itemType === 'patent' && this.bibtex.fields.type) { this.patentNumberPrefix = { patent: '', @@ -1310,7 +1309,7 @@ export class ZoteroItem { patentdede: 'DE', patentde: 'DE', patentfr: 'FR', - }[this.bibtex.fields.type[0].toLowerCase()] || '' + }[this.bibtex.fields.type.toLowerCase()] || '' } const urls: Set = new Set From 8757ec98ad2efce0ddd08717ae97c1287f3a37f8 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Mon, 15 Apr 2024 08:23:13 +0200 Subject: [PATCH 044/177] shim in workers --- content/worker/zotero.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/content/worker/zotero.ts b/content/worker/zotero.ts index 212c28e137..18c12082f1 100644 --- a/content/worker/zotero.ts +++ b/content/worker/zotero.ts @@ -1,5 +1,10 @@ /* eslint-disable @typescript-eslint/restrict-template-expressions, @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-assignment */ +import flatMap from 'array.prototype.flatmap' +flatMap.shim() +import matchAll from 'string.prototype.matchall' +matchAll.shim() + declare const IOUtils: any import { Shim } from '../os' From cda5a03e0cfb63c782b71e548e6e8cdb8d35da01 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Mon, 15 Apr 2024 09:15:27 +0200 Subject: [PATCH 045/177] css for image --- setup/preferences.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/setup/preferences.ts b/setup/preferences.ts index 23b6b6c3bd..6314a249a1 100755 --- a/setup/preferences.ts +++ b/setup/preferences.ts @@ -678,7 +678,14 @@ class XHTML extends BaseASTWalker { } if (node.name === 'script') throw new Error("scripts don't work in preference panes") + let style: string switch (node.name) { + switch (node.name) { + case'image': + style = node.attrs.filter(a => a.name === 'height' || a.name === 'width').map(a => `${a.name}:${a.val}`).join(';') + if (style) node.attrs.push({ name: 'style', val: JSON.stringify(style), mustEscape: false }) + break + case 'textbox': node.attrs = node.attrs.filter(a => a.name !== 'flex') From ad181d10bbccf28754368a9ee1458a11ba324e88 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Mon, 15 Apr 2024 14:14:00 +0200 Subject: [PATCH 046/177] adjust tests --- setup/preferences.ts | 1 - submodules/zotero | 2 +- ...racter '+' in BibTeX field name #2660.json | 129 ++- ...iscarded on import from bib file #873.json | 744 +++++++----------- .../web_page and other mendeley idiocy.json | 602 +++++++------- translators/Better BibTeX.ts | 1 + translators/bibtex/bibtex.ts | 1 + 7 files changed, 655 insertions(+), 825 deletions(-) diff --git a/setup/preferences.ts b/setup/preferences.ts index 6314a249a1..65f69bbc42 100755 --- a/setup/preferences.ts +++ b/setup/preferences.ts @@ -680,7 +680,6 @@ class XHTML extends BaseASTWalker { let style: string switch (node.name) { - switch (node.name) { case'image': style = node.attrs.filter(a => a.name === 'height' || a.name === 'width').map(a => `${a.name}:${a.val}`).join(';') if (style) node.attrs.push({ name: 'style', val: JSON.stringify(style), mustEscape: false }) diff --git a/submodules/zotero b/submodules/zotero index c6e5850e1c..df014bfb0b 160000 --- a/submodules/zotero +++ b/submodules/zotero @@ -1 +1 @@ -Subproject commit c6e5850e1c6fe2edde499cdb9a10cbac320e2266 +Subproject commit df014bfb0b73f0c4d33b8996cca0482b4ea5dbb5 diff --git a/test/fixtures/import/Import error with character '+' in BibTeX field name #2660.json b/test/fixtures/import/Import error with character '+' in BibTeX field name #2660.json index 0433836af5..3c193370c0 100644 --- a/test/fixtures/import/Import error with character '+' in BibTeX field name #2660.json +++ b/test/fixtures/import/Import error with character '+' in BibTeX field name #2660.json @@ -266,7 +266,7 @@ "itemID": 13, "itemType": "journalArticle", "publicationTitle": "The New Yorker", - "title": "On video games and storytelling. An Interview with Tom Bissell", + "title": "On video games and storytelling. An interview with Tom Bissell", "url": "https://www.newyorker.com/books/page-turner/on-video-games-and-storytelling-an-interview-with-tom-bissell" }, { @@ -423,7 +423,7 @@ "itemType": "journalArticle", "pages": "17\u201339", "publicationTitle": "Journal of Postsecondary Education and Disability", - "title": "A descriptive review of ADHD coaching research. Implications for College Students", + "title": "A descriptive review of ADHD coaching research. Implications for college students", "url": "https://www.ahead.org/professional-resources/publications/jped/archived-jped/jped-volume-31", "volume": "31" }, @@ -488,7 +488,7 @@ "itemID": 23, "itemType": "journalArticle", "publicationTitle": "Psychonomic Bulletin & Review", - "title": "Unpacking buyer-seller differences in valuation from experience. A Cognitive Modeling Approach" + "title": "Unpacking buyer-seller differences in valuation from experience. A cognitive modeling approach" }, { "citationKey": "10.10:77", @@ -624,7 +624,7 @@ "itemID": 29, "itemType": "report", "publisher": "Pearson", - "title": "Minnesota Multiphasic Personality Inventory\u20132 Restructured Form (MMPI-2-RF). Technical Manual", + "title": "Minnesota Multiphasic Personality Inventory\u20132 Restructured Form (MMPI-2-RF). Technical manual", "type": "manual" }, { @@ -785,7 +785,7 @@ "four-disc special extended ed. on DVD" ], "publisher": "WingNut Films and The Saul Zaentz Company", - "title": "The lord of the rings. The Fellowship of the Ring" + "title": "The lord of the rings. The fellowship of the ring" }, { "citationKey": "10.12:85", @@ -925,7 +925,7 @@ "itemID": 41, "itemType": "videoRecording", "publisher": "YouTube", - "title": "Bren\u00e9 Brown. Listening to Shame", + "title": "Bren\u00e9 Brown. Listening to shame", "url": "https://www.youtube.com/watch?v=psN1DORYYV0" }, { @@ -1440,7 +1440,7 @@ ], "itemID": 66, "itemType": "webpage", - "title": "College students are forming mental-health Clubs\u2013and they're making a difference @washingtonpost. Thumbnail with link attached", + "title": "College students are forming mental-health clubs\u2013and they're making a difference @washingtonpost. Thumbnail with link attached", "url": "https://twitter.com/apaeducation/status/1012810490530140161" }, { @@ -1539,7 +1539,7 @@ ], "itemID": 71, "itemType": "webpage", - "title": "These frogs walk instead of hop. https://scimag.2KlriwH", + "title": "These frogs walk instead of hop. https://scimag.2KlriwH", "url": "https://www.facebook.com/ScienceNOW/videos/10155508587605108" }, { @@ -1670,7 +1670,7 @@ ], "itemID": 78, "itemType": "webpage", - "title": "Be kind to yourself. How Self-Compassion can Improve Your Resiliency", + "title": "Be kind to yourself. How self-compassion can improve your resiliency", "url": "https://www.mayoclinic.org/healthy-lifestyle/adult-health/in-depth/self-compassion-can-improve-your-resiliency/art-20267193" }, { @@ -1773,7 +1773,7 @@ "itemID": 82, "itemType": "book", "publisher": "Routledge", - "title": "Rethinking global health. Frameworks of Power" + "title": "Rethinking global health. Frameworks of power" }, { "citationKey": "10.2:22a", @@ -1793,7 +1793,7 @@ "itemID": 83, "itemType": "book", "publisher": "Random House Audio", - "title": "Quiet. The Power of Introverts in a World that Can't Stop Talking", + "title": "Quiet. The power of introverts in a world that can't stop talking", "url": "http://bit.ly/2GOBpbl" }, { @@ -1817,7 +1817,7 @@ "itemID": 84, "itemType": "book", "publisher": "Henry Holt and Co.", - "title": "Algorithms to live by. The Computer Science of Human Decisions", + "title": "Algorithms to live by. The computer science of human decisions", "url": "http://a.co/7qGBZAk" }, { @@ -1841,7 +1841,7 @@ "itemID": 85, "itemType": "book", "publisher": "Chelsea Green Publishing", - "title": "Thinking in systems. A Primer" + "title": "Thinking in systems. A primer" }, { "citationKey": "10.2:24", @@ -1860,7 +1860,7 @@ "itemID": 86, "itemType": "book", "publisher": "American Psychological Association and De Gruyter Mouton", - "title": "Entrenchment and the psychology of language learning. How we Reorganize and Adapt Linguistic Knowledge" + "title": "Entrenchment and the psychology of language learning. How we reorganize and adapt linguistic knowledge" }, { "citationKey": "10.2:25", @@ -1878,7 +1878,7 @@ "itemID": 87, "itemType": "book", "publisher": "Routledge", - "title": "Military veteran psychological health and social care. Contemporary Approaches" + "title": "Military veteran psychological health and social care. Contemporary approaches" }, { "citationKey": "10.2:26", @@ -1906,7 +1906,7 @@ "itemID": 88, "itemType": "book", "publisher": "Springer Publishing Company", - "title": "Guided participation in pediatric nursing practice. Relationship-based Teaching and Learning with Parents, Children and Adolescents", + "title": "Guided participation in pediatric nursing practice. Relationship-based teaching and learning with parents, children and adolescents", "url": "http://a.co/0IAiVgt" }, { @@ -2015,7 +2015,7 @@ "itemID": 92, "itemType": "book", "publisher": "Basic Books", - "title": "The interpretation of dreams. The Complete and Definitive Text" + "title": "The interpretation of dreams. The complete and definitive text" }, { "citationKey": "10.2:29b", @@ -2091,7 +2091,7 @@ "itemID": 95, "itemType": "book", "publisher": "American Psychological Association", - "title": "APA handbook of the psychology of women. Vol. 1. History, theory, and Battlegrounds" + "title": "APA handbook of the psychology of women. Vol. 1. History, theory, and battlegrounds" }, { "citationKey": "10.2:31", @@ -2193,7 +2193,7 @@ "itemID": 100, "itemType": "book", "publisher": "American Psychological Association", - "title": "The complete social scientist. A Kurt Lewin Reader" + "title": "The complete social scientist. A Kurt Lewin reader" }, { "citationKey": "10.2:35a", @@ -2237,7 +2237,7 @@ "itemID": 103, "itemType": "book", "publisher": "The Jewish Publication Society", - "title": "The Torah. The Five Books of Moses" + "title": "The Torah. The five books of Moses" }, { "citationKey": "10.2:35d", @@ -2393,7 +2393,7 @@ "pages": "7\u201313", "publicationTitle": "Principles and practise of forensic psychiatry", "publisher": "CRC Press", - "title": "Defining forensic psychiatry. Roles and Responsibilities" + "title": "Defining forensic psychiatry. Roles and responsibilities" }, { "citationKey": "10.3:40", @@ -2461,7 +2461,7 @@ "pages": "67\u201386", "publicationTitle": "Gu\u00eda pr\u00e1ctica de terapias estimulativas en el Alzh\u00e9imer", "publisher": "Editorial S\u00edntesis", - "title": "Auditory sensory therapy. Brain Activation Through Music", + "title": "Auditory sensory therapy. Brain activation through music", "url": "http://www.sintesis.com/guias-profesionales-203/guia-practica-de-terapias-estimulativas-en-el-alzheimer-libro-1943.html" }, { @@ -2531,7 +2531,7 @@ "pages": "100\u2013108", "publicationTitle": "Cognitive psychology", "publisher": "Psychology Press", - "title": "Calling a squirrel and squirrel but a canoe a wigwam. A Category-specific Deficit for Artefactual Objects and Body Parts" + "title": "Calling a squirrel and squirrel but a canoe a wigwam. A category-specific deficit for artefactual objects and body parts" }, { "citationKey": "10.3:44", @@ -2559,7 +2559,7 @@ "pages": "72\u201340", "publicationTitle": "Making human beings human", "publisher": "SAGE Publications", - "title": "The social ecology of human development. A Retrospective Conclusion" + "title": "The social ecology of human development. A retrospective conclusion" }, { "citationKey": "10.3:44r", @@ -2578,7 +2578,7 @@ "itemID": 114, "itemType": "book", "publisher": "National Education Press", - "title": "Brain and intelligence. The Ecology of Child Development" + "title": "Brain and intelligence. The ecology of child development" }, { "citationKey": "10.3:45", @@ -2714,7 +2714,7 @@ ], "itemID": 120, "itemType": "report", - "title": "What we heard. Summary of Key Findings: 2013 Canada Council's Inter-Arts Office Consultation", + "title": "What we heard. Summary of key findings: 2013 Canada Council's Inter-Arts Office consultation", "url": "http://publications.gc.ca/collections/collection_2017/canadacouncil/K23-65-2013-eng.pdf" }, { @@ -2732,8 +2732,8 @@ "itemID": 121, "itemType": "report", "number": "18-2424", - "title": "Facing forward. Life After Cancer Treatment", - "type": "NIH publication", + "title": "Facing forward. Life after cancer treatment", + "type": "NIH Publication", "url": "https://www.cancer.gov/publications/patient-education/life-after-cancer-treatment.pdf" }, { @@ -2830,7 +2830,7 @@ "itemID": 125, "itemType": "report", "publisher": "British Cardiovascular Society", - "title": "British Cardiovascular Society Working Group report. Out-of-hours Cardiovascular Care: Management of Cardiac Emergencies and Hospital In-patients", + "title": "British Cardiovascular Society Working Group report. Out-of-hours cardiovascular care: Management of cardiac emergencies and hospital in-patients", "url": "http://www.bcs.com/documents/BCSOOHWP_Final_Report_05092016.pdf" }, { @@ -2847,7 +2847,7 @@ ], "itemID": 126, "itemType": "report", - "title": "Agency financial report. Fiscal Year 2017", + "title": "Agency financial report. Fiscal year 2017", "url": "https://www.sec.gov/files/sec-2017-agency-financial-report.pdf" }, { @@ -2943,8 +2943,8 @@ "itemType": "report", "number": "1", "publisher": "U.S. Small Business Administration, Office of Advocacy", - "title": "Profile of veteran business owners. More Young Veterans Appear to be Starting Businesses", - "type": "Issue brief", + "title": "Profile of veteran business owners. More young veterans appear to be starting businesses", + "type": "Issue Brief", "url": "https://www.sba.org/sites/default/files/Issue%20Brief%201,%20Veteran%20Business%20Owners.pdf" }, { @@ -2963,7 +2963,7 @@ "itemID": 132, "itemType": "report", "publisher": "National Education Policy Center", - "title": "Don't expect too much. Policy Brief. The Limited Usefulness of Common SES Measures and a Prescription for Change", + "title": "Don't expect too much. Policy Brief. The limited usefulness of common SES measures and a prescription for change", "url": "https://nepc.colorado.edu/publication/SES" }, { @@ -3011,7 +3011,7 @@ ], "itemID": 134, "itemType": "presentation", - "title": "Everybody's got a little music in them. Conference session. Using Music Therapy to Connect, Engage, and Motivate", + "title": "Everybody's got a little music in them. Conference session. Using music therapy to connect, engage, and motivate", "url": "https://asa.confex.com/asa/2017/webprogramarchives/Session9517.html" }, { @@ -3046,7 +3046,7 @@ ], "itemID": 135, "itemType": "presentation", - "title": "If mama ain't happy, nobody's happy. Paper presentation. The Effect of Parental Depression on Mood Dysregulation in Children" + "title": "If mama ain't happy, nobody's happy. Paper presentation. The effect of parental depression on mood dysregulation in children" }, { "citationKey": "10.5:62", @@ -3103,7 +3103,7 @@ ], "itemID": 137, "itemType": "presentation", - "title": "The art and significance of successfully identifying resilient individuals. A Person-Focused Approach" + "title": "The art and significance of successfully identifying resilient individuals. A person-focused approach" }, { "citationKey": "10.5:A2", @@ -3167,7 +3167,7 @@ "itemID": 140, "itemType": "thesis", "publisher": "ProQuest Dissertations and Theses Global / University of Wisconsin\u2013Madison", - "title": "Resistance to authority. Methodological Innovations and New Lessons from the Milgram Experiment", + "title": "Resistance to authority. Methodological innovations and new lessons from the Milgram experiment", "type": "phd" }, { @@ -3186,7 +3186,7 @@ "itemID": 141, "itemType": "thesis", "publisher": "William & Mary Digital Archive / The College of William & Mary", - "title": "Dealing with dual differences. Social Coping Strategies of Gifted and Lesbian, Gay, Bisexual, Transgender, and Queer Adolescents", + "title": "Dealing with dual differences. Social coping strategies of gifted and lesbian, gay, bisexual, transgender, and queer adolescents", "type": "master", "url": "https://digitalarchive.wm.edu/bitstream/handle/10288/16594/HutchesonVirginia2012.pdf" }, @@ -3246,7 +3246,7 @@ ], "itemID": 144, "itemType": "book", - "title": "We are displaced. My Journey and Stories From Refugee Girls Around the World" + "title": "We are displaced. My journey and stories from refugee girls around the world" }, { "citationKey": "10.7:69", @@ -3321,7 +3321,7 @@ ], "itemID": 147, "itemType": "manuscript", - "title": "Linking positive affect to blood lipids. A Cultural Perspective" + "title": "Linking positive affect to blood lipids. A cultural perspective" }, { "citationKey": "10.8:71", @@ -3366,7 +3366,7 @@ ], "itemID": 149, "itemType": "manuscript", - "title": "Emotion recognition as a function of facial cues. Implications for Practice" + "title": "Emotion recognition as a function of facial cues. Implications for practice" }, { "citationKey": "10.8:73a", @@ -3400,7 +3400,7 @@ ], "itemID": 150, "itemType": "webpage", - "title": "When money talks. Judging Risk and Coercion in High-Paying Clinical Trials" + "title": "When money talks. Judging risk and coercion in high-paying clinical trials" }, { "citationKey": "10.8:73b", @@ -3520,7 +3520,7 @@ ], "itemID": 157, "itemType": "case", - "title": "Brown v. Board of education", + "title": "Brown v. board of education", "url": "http://www.oyez.org/cases/1940-1955/347us483" }, { @@ -3532,7 +3532,7 @@ ], "itemID": 158, "itemType": "case", - "title": "Obergefell v. Hodges", + "title": "Obergefell v. hodges", "url": "https://www.supremecourt.gov/opinions/14pdf/14-556_3204.pdf" }, { @@ -3545,7 +3545,7 @@ ], "itemID": 159, "itemType": "case", - "title": "Daubert v. Merrell dow pharmaceuticals, inc.", + "title": "Daubert v. merrell dow pharmaceuticals, inc.", "url": "https://openjurist.org/951/f2d/1128/william-dabert-v-merrell-dow-pharmaceuticals" }, { @@ -3558,7 +3558,7 @@ ], "itemID": 160, "itemType": "case", - "title": "Burriola v. Greater toledo YMCA", + "title": "Burriola v. greater toledo YMCA", "url": "https://law.justia.com/cases/federal/district-courts/FSupp2/133/1034/2293141/" }, { @@ -3574,7 +3574,7 @@ ], "itemID": 161, "itemType": "case", - "title": "Durflinger v. Artiles", + "title": "Durflinger v. artiles", "url": "https://openjurist.org/727/f2d/888/durflinger-v-artiles" }, { @@ -3586,7 +3586,7 @@ ], "itemID": 162, "itemType": "case", - "title": "Tarasoff v. Regents of the university of california", + "title": "Tarasoff v. regents of the university of california", "url": "https://www.casebriefs.com/blog/law/torts/tors-keyed-to-dobbs/the-duty-to-protect-from-third-persons/tarasoff-v-regents-of-university-of-california" }, { @@ -3600,7 +3600,7 @@ ], "itemID": 163, "itemType": "case", - "title": "Texas v. Morales", + "title": "Texas v. morales", "url": "https://www.leagle.com/decision/19921027826sw2d20111010" }, { @@ -3703,7 +3703,7 @@ "itemID": 171, "itemType": "bill", "shortTitle": "Strengthening the federal student loan program", - "title": "Strengthening the federal student loan program for borrowers. Hearing before the U.S. Senate Committee on Health, Education, Labor & Pensions", + "title": "Strengthening the federal student loan program for borrowers. Hearing before the U.S. senate committee on health, education, labor & pensions", "url": "https://www.help.senate.gov/hearings/strengthening-the-federal-student-load-program-for-borrowers" }, { @@ -3821,7 +3821,7 @@ "extra": [ "Citation Key: 11.8:22", "Publisher: U.S. Patent and Trademark Office", - "Type: U.S. patent" + "Type: U.S. Patent" ], "itemID": 178, "itemType": "patent", @@ -4959,7 +4959,7 @@ "itemID": 245, "itemType": "journalArticle", "publicationTitle": "Journal of the Decline of Academia", - "title": "Annoyingly casual titles. How to Exhaust all Effort on the Title Alone" + "title": "Annoyingly casual titles. How to exhaust all effort on the title alone" }, { "citationKey": "9.49:6", @@ -4978,7 +4978,7 @@ "itemID": 246, "itemType": "journalArticle", "publicationTitle": "Journal of the Decline of Academia", - "title": "Annoyingly casual titles. Creating Titles to Distract from Vacuity" + "title": "Annoyingly casual titles. Creating titles to distract from vacuity" }, { "citationKey": "9.51:1", @@ -5023,7 +5023,7 @@ "pages": "111\u2013113", "publicationTitle": "The psychologically healthy workplace", "publisher": "American Psychological Association", - "title": "Work-life balance. Contemporary Perspectives" + "title": "Work-life balance. Contemporary perspectives" }, { "citationKey": "9.52:2", @@ -5489,7 +5489,7 @@ "itemType": "journalArticle", "pages": "161\u2013174", "publicationTitle": "Organizational Behaviour", - "title": "General and specific measures in organizational behaviour research. Considerations, Examples, and Recommandations for Researchers", + "title": "General and specific measures in organizational behaviour research. Considerations, examples, and recommandations for researchers", "volume": "33" }, { @@ -5677,7 +5677,7 @@ "itemType": "journalArticle", "pages": "155\u2013161", "publicationTitle": "Cl\u00ednica y Salud", - "title": "Sensorineural anosmia. Relationship Between Subtype, Recognition Time, and Age", + "title": "Sensorineural anosmia. Relationship between subtype, recognition time, and age", "volume": "28" }, { @@ -5838,7 +5838,7 @@ "itemType": "journalArticle", "pages": "758\u2013775", "publicationTitle": "Journal of Applied Psychology", - "title": "On the value of aiming high. The Causes and Consequences of Ambition", + "title": "On the value of aiming high. The causes and consequences of ambition", "volume": "97" }, { @@ -5873,7 +5873,7 @@ ], "pages": "214\u2013228", "publicationTitle": "Journal of Applied Psychology", - "title": "Double crossed. The Spillover and Crossover Effect of Work Demands on Work Outcomes Through the Family", + "title": "Double crossed. The spillover and crossover effect of work demands on work outcomes through the family", "volume": "104" }, { @@ -5897,7 +5897,7 @@ "itemType": "journalArticle", "pages": "611\u2013618", "publicationTitle": "American Journal of Orthopsychiatry", - "title": "Marking time in the land of plenty. Reflections on Mental Health in the United States", + "title": "Marking time in the land of plenty. Reflections on mental health in the United States", "volume": "84" }, { @@ -5924,7 +5924,7 @@ "itemType": "journalArticle", "pages": "1\u201351", "publicationTitle": "Psychological Review", - "title": "Language learning as language use. A Cross-linguistic Model of Child Language Development", + "title": "Language learning as language use. A cross-linguistic model of child language development", "url": "http://some.url", "volume": "126" }, @@ -6045,7 +6045,7 @@ "itemType": "journalArticle", "pages": "391\u2013402", "publicationTitle": "American Journal of Orthopsychiatry", - "title": "Marking time in the land of plenty. Reflections on Mental Health in the United States", + "title": "Marking time in the land of plenty. Reflections on mental health in the United States", "volume": "51" }, { @@ -6066,9 +6066,8 @@ "issue": "6422", "itemID": 276, "itemType": "journalArticle", - "journalAbbreviation": "Science", "pages": "33\u201334", - "publicationTitle": "Science (New York, N.Y.)", + "publicationTitle": "Science", "title": "Really cool neutral plasmas", "volume": "363" }, @@ -6187,7 +6186,7 @@ "itemType": "dataset", "number": "ICPSR 35531", "publisher": "National Archive of Data on Arts and Culture", - "title": "Fast response survey system (FRSS). Teacher's Use of Educational Technology in U.S. Public Schools, 2009", + "title": "Fast response survey system (FRSS). Teacher's use of educational technology in U.S. public schools, 2009", "versionNumber": "V3" }, { @@ -6241,7 +6240,7 @@ "itemType": "journalArticle", "pages": "73\u201386", "publicationTitle": "Cognitive Neuropsychology", - "title": "Calling a squirrel and squirrel but a canoe a wigwam. A Category-specific Deficit for Artefactual Objects and Body Parts", + "title": "Calling a squirrel and squirrel but a canoe a wigwam. A category-specific deficit for artefactual objects and body parts", "volume": "9" }, { diff --git a/test/fixtures/import/Some bibtex entries quietly discarded on import from bib file #873.json b/test/fixtures/import/Some bibtex entries quietly discarded on import from bib file #873.json index f550e0bbd5..ad38a1b364 100644 --- a/test/fixtures/import/Some bibtex entries quietly discarded on import from bib file #873.json +++ b/test/fixtures/import/Some bibtex entries quietly discarded on import from bib file #873.json @@ -134,10 +134,10 @@ "itemID": 3, "itemType": "book", "notes": [ - "Contents: 1. An introduction to description logics D. Nardi and R. J. Brachman; Part I. Theory: 2. Basic description logics F. Baader and W. Nutt; 3. Complexity of reasoning F. M. Donini; 4. Relationships with other formalisms U. Sattler, D. Calvanese and R. Molitor; 5. Expressive description logics D. Calvanese and G. De Giacomo; 6. Extensions to description logics F. Baader, R. Ku\u0308sters and F. Wolter; Part II. Implementation: 7. From description logic provers to knowledge representation systems D. L. McGuinness and P. F. Patel-Schneider; 8. Description logics systems R. Mo\u0308ller and V. Haarslev; 9. Implementation and optimisation techniques I. Horrocks; Part III. Applications: 10. Conceptual modeling with description logics A. Borgida and R. J. Brachman; 11. Software engineering C. Welty; 12. Configuration D. L. McGuinness; 13. Medical informatics A. Rector; 14. Digital libraries and web-based information systems I. Horrocks, D. L. McGuinness and C. Welty; 15. Natural language processing E. Franconi; 16. Description logics for data bases A. Borgida, M. Lenzerini and R. Rosati; Appendix. Description logic terminology F. Baader; Bibliography. See also http://www.inf.unibz.it/%7efranconi/dl/course/" + "Contents: 1. An introduction to description logics D. Nardi and R. J. Brachman; Part I. Theory: 2. Basic description logics F. Baader and W. Nutt; 3. Complexity of reasoning F. M. Donini; 4. Relationships with other formalisms U. Sattler, D. Calvanese and R. Molitor; 5. Expressive description logics D. Calvanese and G. De Giacomo; 6. Extensions to description logics F. Baader, R. Ku\u0308sters and F. Wolter; Part II. Implementation: 7. From description logic provers to knowledge representation systems D. L. McGuinness and P. F. Patel-Schneider; 8. Description logics systems R. Mo\u0308ller and V. Haarslev; 9. Implementation and optimisation techniques I. Horrocks; Part III. Applications: 10. Conceptual modeling with description logics A. Borgida and R. J. Brachman; 11. Software engineering C. Welty; 12. Configuration D. L. McGuinness; 13. Medical informatics A. Rector; 14. Digital libraries and web-based information systems I. Horrocks, D. L. McGuinness and C. Welty; 15. Natural language processing E. Franconi; 16. Description logics for data bases A. Borgida, M. Lenzerini and R. Rosati; Appendix. Description logic terminology F. Baader; Bibliography. See also http://www.inf.unibz.it/" ], "publisher": "Cambridge University Press", - "title": "The description logic handbook \u2014 Theory, implementation and applications", + "title": "The description logic handbook \u2014 theory, implementation and applications", "url": "http://titles.cambridge.org/catalogue.asp?ISBN=0521781760" }, { @@ -165,7 +165,7 @@ ], "rights": "unrestricted", "title": "Programming hierarchical task networks in the situation calculus", - "url": "http://citeseer.ist.psu.edu/525546.html; http://www.cs.toronto.edu/cogrobo/Papers/htn-opw.ps" + "url": "http://citeseer.ist.psu.edu/525546.html; http://www.cs.toronto.edu/cogrobo/Papers/htn-opw.ps" }, { "abstractNote": "Hierarchical task network and action-based planning approaches have traditionally been studied separately. In many domains, human expertise in the form of hierarchical reduction schemas exists, but is incomplete. In such domains, hybrid approaches that use both HTN and action-based planning techniques are needed. In this paper, we extend our previous work on refinement planning to include hierarchical planning. Specifically, we provide a generalized plan-space refinement that is capable of handling non-primitive actions. The generalization provides a principled way of handling partially hierarchical domains, while preserving systematicity, and respecting the user-intent inherent in the reduction schemas. Our general account also puts into perspective the many surface differences between the HTN and action-based planners, and could support the transfer of progress between HTN and action-based planning approaches.", @@ -188,8 +188,7 @@ } ], "extra": [ - "Citation Key: rao:_hybrid_plann_partial_hierar_domain", - "tex.crossref: AAAI98" + "Citation Key: rao:_hybrid_plann_partial_hierar_domain" ], "itemID": 5, "itemType": "conferencePaper", @@ -228,7 +227,7 @@ ], "rights": "unrestricted", "title": "Propice-plan: Toward a unified framework for planning and execution", - "url": "http://citeseer.ist.psu.edu/507370.html; http://www.informatik.uni-ulm.de/ki/biundo/ECP-Papers/61-despouys.ps.gz" + "url": "http://citeseer.ist.psu.edu/507370.html; http://www.informatik.uni-ulm.de/ki/biundo/ECP-Papers/61-despouys.ps.gz" }, { "abstractNote": "Planning is a central activity in many areas including robotics, manufacturing, space mission sequencing, and logistics. As the size and complexity of planning problems grow, there is great economic pressure to automate this process in order to reduce the cost of planning effort, and to improve the quality of produced plans. AI planning research has focused on general-purpose planning systems which can process the specifications of an application domain and generate solutions to planning problems in that domain. Unfortunately, there is a big gap between theoretical and application oriented work in AI planning. The theoretical work has been mostly based on state-based planning, which has limited practical applications. The application-oriented work has been based on hierarchical task network (HTN) planning, which lacks a theoretical foundation. As a result, in spite of many years of research, building planning applications remains a formidable task. The goal of this dissertation is to facilitate building reliable and effective planning applications. The methodology includes design of a mathematical framework for HTN planning, analysis of this framework, development of provably correct algorithms based on this analysis, and the implementation of these algorithms for further evaluation and exploration. The representation, analyses, and algorithms described in this thesis will make it easier to apply HTN planning techniques effectively and correctly to planning applications. The precise and mathematical nature of the descriptions will also help teaching about HTN planning, will clarify misconceptions in the literature, and will stimulate further research.", @@ -293,7 +292,7 @@ "number": "CS-TR-3981", "publisher": "University of Maryland, College Park", "title": "SHOP: Simple hierarchical ordered planner", - "type": "Technical report" + "type": "Technical Report" }, { "abstractNote": "The Act formalism provides a medium in which to express knowledge about actions for both the SIPE-2 plan generation system and the PRS plan execution system. This document describes the Act-Editor, which provides a graphical user interface for creating and manipulating Acts. The document is designed for individuals who are already familiar with the Act formalism. The Act-Editor runs on Sun workstations with either Allegro Common Lisp 4.2/4.3 with CLIM 2.0/2.1, or Lucid Lisp 4.1 with CLIM 1.1., as well as Symbolics Lisp Machines.", @@ -310,7 +309,7 @@ "lastName": "Wilkins" } ], - "date": "September 1997", + "date": "1997-09", "extra": [ "Citation Key: AICPub215:1997" ], @@ -318,7 +317,7 @@ "itemType": "report", "place": "Menlo Park, CA", "publisher": "Artificial Intelligence Center, SRI International", - "title": "The act-editor user's guide: A manual for version 2.2", + "title": "The act-editor user's guide: a manual for version 2.2", "type": "manual" }, { @@ -431,8 +430,7 @@ } ], "extra": [ - "Citation Key: aaai96-2*1215", - "tex.crossref: AAAI96" + "Citation Key: aaai96-2*1215" ], "itemID": 13, "itemType": "conferencePaper", @@ -563,7 +561,7 @@ "itemType": "book", "place": "Menlo Park, California", "publisher": "Benjamin / Cummings Publishing Company", - "title": "Natural Lan\u00adguage Un\u00adder\u00adstand\u00ading" + "title": "Natural lan\u00adguage un\u00adder\u00adstand\u00ading" }, { "citationKey": "Alterman:85", @@ -596,8 +594,7 @@ } ], "extra": [ - "Citation Key: Alterman:86", - "tex.crossref: aaai86" + "Citation Key: Alterman:86" ], "itemID": 21, "itemType": "conferencePaper", @@ -644,8 +641,7 @@ } ], "extra": [ - "Citation Key: Appelt:87", - "tex.crossref: ijcai87" + "Citation Key: Appelt:87" ], "itemID": 23, "itemType": "conferencePaper", @@ -751,8 +747,7 @@ } ], "extra": [ - "Citation Key: AtkinsDurfeeShin:96", - "tex.crossref: UAI96" + "Citation Key: AtkinsDurfeeShin:96" ], "itemID": 27, "itemType": "conferencePaper", @@ -782,8 +777,7 @@ } ], "extra": [ - "Citation Key: AtkinsETAL:97", - "tex.crossref: AAAI97" + "Citation Key: AtkinsETAL:97" ], "itemID": 28, "itemType": "conferencePaper", @@ -946,7 +940,7 @@ "lastName": "McIlraith" } ], - "date": "January 2007", + "date": "2007-01", "extra": [ "Citation Key: bai-bac-mci-ijcai07" ], @@ -999,8 +993,7 @@ } ], "extra": [ - "Citation Key: Baker:AAAI94", - "tex.crossref: AAAI94" + "Citation Key: Baker:AAAI94" ], "itemID": 36, "itemType": "conferencePaper", @@ -1110,7 +1103,7 @@ "lastName": "Weld" } ], - "date": "February 1994", + "date": "1994-02", "extra": [ "Citation Key: Barrett:UCPOP" ], @@ -1351,7 +1344,7 @@ "lastName": "Barto" } ], - "date": "September 1989", + "date": "1989-09", "extra": [ "Citation Key: Barto:89" ], @@ -1361,7 +1354,7 @@ "place": "Amherst, MA", "publisher": "Department of Computer and Information Science, University of Massachusetts, Amherst", "title": "Connectionist learning for control: An overview", - "type": "COINS technical report" + "type": "COINS Technical Report" }, { "citationKey": "Barto:MSS", @@ -1451,13 +1444,12 @@ } ], "extra": [ - "Citation Key: Bauer:93", - "tex.crossref: ijcai93" + "Citation Key: Bauer:93" ], "itemID": 53, "itemType": "conferencePaper", "pages": "460\u2013466", - "title": "PHI \u2014 A logic-based tool for intelligent help systems" + "title": "PHI \u2014 a logic-based tool for intelligent help systems" }, { "citationKey": "Beck:72", @@ -1540,8 +1532,7 @@ } ], "extra": [ - "Citation Key: BeetzGrosskreutz:98", - "tex.crossref: AIPS98" + "Citation Key: BeetzGrosskreutz:98" ], "itemID": 57, "itemType": "conferencePaper", @@ -1688,7 +1679,7 @@ "itemID": 63, "itemType": "conferencePaper", "pages": "49-53", - "publicationTitle": "Proceedings of the 18th Conference of the Association for Computational Linguistics", + "publicationTitle": "Proceedings of the 18th conference of the association for computational linguistics", "publisher": "Association for Computational Linguistics", "title": "Computational analogues of constraints on grammars: A model of syntactic acquisition" }, @@ -1738,8 +1729,7 @@ } ], "extra": [ - "Citation Key: Bessiere:91", - "tex.crossref: AAAI91" + "Citation Key: Bessiere:91" ], "itemID": 66, "itemType": "conferencePaper", @@ -1761,8 +1751,7 @@ } ], "extra": [ - "Citation Key: BG00:incomplete", - "tex.crossref: AIPS00" + "Citation Key: BG00:incomplete" ], "itemID": 67, "itemType": "conferencePaper", @@ -1785,7 +1774,7 @@ "itemID": 68, "itemType": "manuscript", "notes": [ - "Unpublished manuscript based on invited address to IJCAI-97 http://aida.intellektik.informatik.th-darmstadt.de/ bibel/" + "Unpublished manuscript based on invited address to IJCAI-97 http://aida.intellektik.informatik.th-darmstadt.de/ bibel/" ], "title": "Let's plan it deductively!" }, @@ -1882,7 +1871,7 @@ "lastName": "Birnbaum" } ], - "date": "December 1986", + "date": "1986-12", "extra": [ "Citation Key: Birnbaum:86" ], @@ -1909,7 +1898,7 @@ "itemType": "journalArticle", "pages": "57\u201377", "publicationTitle": "AIJ", - "title": "Rigor mortis: a response to Nilsson's \u201cLogic and artificial intelligence\u201d", + "title": "Rigor mortis: a response to Nilsson's \u201clogic and artificial intelligence\u201d", "volume": "47" }, { @@ -1928,8 +1917,7 @@ ], "extra": [ "Citation Key: BlaylockAllen:2014", - "Section: 1", - "tex.crossref: sukthankar-etal:2014a" + "Section: 1" ], "itemID": 74, "itemType": "bookSection", @@ -2085,8 +2073,7 @@ } ], "extra": [ - "Citation Key: Blythe:94", - "tex.crossref: UAI94" + "Citation Key: Blythe:94" ], "itemID": 81, "itemType": "conferencePaper", @@ -2272,8 +2259,7 @@ } ], "extra": [ - "Citation Key: Bonet:97", - "tex.crossref: AAAI97" + "Citation Key: Bonet:97" ], "itemID": 89, "itemType": "conferencePaper", @@ -2295,13 +2281,12 @@ } ], "extra": [ - "Citation Key: bonetGeffner:06LDFS", - "tex.crossref: ICAPS-06" + "Citation Key: bonetGeffner:06LDFS" ], "itemID": 90, "itemType": "conferencePaper", "pages": "142\u2013151", - "title": "Learning depth-first search: A unified approach to heuristic search in deterministic and non-deterministic settings, and its application to MDPs" + "title": "Learning depth-first search: a unified approach to heuristic search in deterministic and non-deterministic settings, and its application to MDPs" }, { "citationKey": "Bonissone:PI", @@ -2318,8 +2303,7 @@ } ], "extra": [ - "Citation Key: Bonissone:PI", - "tex.crossref: PlanInit1" + "Citation Key: Bonissone:PI" ], "itemID": 91, "itemType": "conferencePaper", @@ -2383,7 +2367,7 @@ "itemType": "conferencePaper", "pages": "58\u201367", "publicationTitle": "ACM SIGMOD international conference on the management of data", - "title": "CLASSIC: A structural data model for objects" + "title": "CLASSIC: a structural data model for objects" }, { "citationKey": "Boutilier95", @@ -2487,8 +2471,7 @@ } ], "extra": [ - "Citation Key: Bowen:91", - "tex.crossref: AAAI91" + "Citation Key: Bowen:91" ], "itemID": 97, "itemType": "conferencePaper", @@ -2548,8 +2531,7 @@ } ], "extra": [ - "Citation Key: Brachman:79", - "tex.crossref: Findler" + "Citation Key: Brachman:79" ], "itemID": 100, "itemType": "bookSection", @@ -2617,8 +2599,7 @@ ], "extra": [ "Citation Key: BrachmanETAL:91", - "Section: 14", - "tex.crossref: Sowa:91" + "Section: 14" ], "itemID": 102, "itemType": "bookSection", @@ -2710,8 +2691,7 @@ ], "extra": [ "Citation Key: Bratman:90", - "Section: 2", - "tex.crossref: Intentions" + "Section: 2" ], "itemID": 106, "itemType": "bookSection", @@ -2728,13 +2708,8 @@ }, { "creatorType": "editor", - "firstName": "M.", - "lastName": "Halle" - }, - { - "creatorType": "editor", - "firstName": "J.", - "lastName": "Bresnan" + "firstName": "J. Bresnan", + "lastName": "M. Halle" }, { "creatorType": "editor", @@ -2802,7 +2777,7 @@ "lastName": "Brooks" } ], - "date": "March 1986", + "date": "1986-03", "extra": [ "Citation Key: Brooks:86" ], @@ -2823,7 +2798,7 @@ "lastName": "Brooks" } ], - "date": "September 1987", + "date": "1987-09", "extra": [ "Citation Key: Brooks:87" ], @@ -2866,7 +2841,7 @@ "lastName": "Brooks" } ], - "date": "January 1991", + "date": "1991-01", "extra": [ "Citation Key: Brooks:91" ], @@ -3232,8 +3207,7 @@ } ], "extra": [ - "Citation Key: Burstein:PI", - "tex.crossref: PlanInit1" + "Citation Key: Burstein:PI" ], "itemID": 127, "itemType": "conferencePaper", @@ -3291,9 +3265,8 @@ "issue": "3", "itemID": 129, "itemType": "journalArticle", - "journalAbbreviation": "Science", "pages": "927-929", - "publicationTitle": "Science (New York, N.Y.)", + "publicationTitle": "Science", "title": "Recognition of a hidden mineral deposit by an artificial intelligence program", "volume": "217" }, @@ -3432,8 +3405,7 @@ } ], "extra": [ - "Citation Key: Carbonell", - "tex.crossref: Strategies4NLP" + "Citation Key: Carbonell" ], "itemID": 136, "itemType": "bookSection", @@ -3743,8 +3715,7 @@ ], "date": "1992", "extra": [ - "Citation Key: Chrisman:92", - "tex.crossref: aips92" + "Citation Key: Chrisman:92" ], "itemID": 149, "itemType": "conferencePaper", @@ -3958,8 +3929,7 @@ ], "date": "1992", "extra": [ - "Citation Key: CNLP", - "tex.crossref: aips92" + "Citation Key: CNLP" ], "itemID": 157, "itemType": "conferencePaper", @@ -4007,8 +3977,7 @@ ], "extra": [ "Citation Key: Cohen:90", - "Section: 3", - "tex.crossref: Intentions" + "Section: 3" ], "itemID": 159, "itemType": "bookSection", @@ -4029,7 +3998,7 @@ "lastName": "Levesque" } ], - "date": "March 1990", + "date": "1990-03", "extra": [ "Citation Key: Cohen:90a" ], @@ -4290,8 +4259,7 @@ ], "date": "1992", "extra": [ - "Citation Key: Collins:92", - "tex.crossref: AAAI92" + "Citation Key: Collins:92" ], "itemID": 169, "itemType": "conferencePaper", @@ -4371,8 +4339,7 @@ "extra": [ "Citation Key: conf/aaai/SrivastavaIZ08", "tex.bibdate: 2008-08-15", - "tex.bibsource: DBLP, http://dblp.uni-trier.de/db/conf/aaai/aaai2008.html#SrivastavaIZ08", - "tex.crossref: AAAI05" + "tex.bibsource: DBLP, http://dblp.uni-trier.de/db/conf/aaai/aaai2008.html#SrivastavaIZ08" ], "itemID": 172, "itemType": "conferencePaper", @@ -4443,8 +4410,7 @@ "extra": [ "Citation Key: conf/ijcai/Levesque05", "tex.bibdate: 2005-12-09", - "tex.bibsource: DBLP, http://dblp.uni-trier.de/db/conf/ijcai/ijcai2005.html#Levesque05", - "tex.crossref: IJCAI05" + "tex.bibsource: DBLP, http://dblp.uni-trier.de/db/conf/ijcai/ijcai2005.html#Levesque05" ], "itemID": 175, "itemType": "conferencePaper", @@ -4508,8 +4474,7 @@ "Place: Lake District of the United Kingdom", "Citation Key: conf/kr/BienvenuFM06", "tex.bibdate: 2006-06-09", - "tex.bibsource: DBLP, http://dblp.uni-trier.de/db/conf/kr/kr2006.html#BienvenuFM06", - "tex.crossref: KR-2006" + "tex.bibsource: DBLP, http://dblp.uni-trier.de/db/conf/kr/kr2006.html#BienvenuFM06" ], "itemID": 177, "itemType": "conferencePaper", @@ -4537,7 +4502,7 @@ ], "pages": "89\u201395", "publicationTitle": "AIJ", - "title": "An optimal k/-consistency algorithm", + "title": "An Optimal k-consistency algorithm", "volume": "41" }, { @@ -4555,8 +4520,7 @@ } ], "extra": [ - "Citation Key: CoradeschiVidal:99", - "tex.crossref: ijcai99" + "Citation Key: CoradeschiVidal:99" ], "itemID": 179, "itemType": "conferencePaper", @@ -4622,8 +4586,7 @@ ], "date": "1981", "extra": [ - "Citation Key: Cullingford:81", - "tex.crossref: ICU" + "Citation Key: Cullingford:81" ], "itemID": 182, "itemType": "bookSection", @@ -4832,7 +4795,6 @@ "Citation Key: DBLP:conf/aips/Edelkamp02", "tex.bibsource: dblp computer science bibliography, http://dblp.org", "tex.biburl: http://dblp.uni-trier.de/rec/bib/conf/aips/Edelkamp02", - "tex.crossref: AIPS02", "tex.timestamp: Thu, 13 Dec 2012 14:15:16 +0100" ], "itemID": 191, @@ -5090,8 +5052,7 @@ ], "date": "1993", "extra": [ - "Citation Key: Dean:93", - "tex.crossref: aaai93" + "Citation Key: Dean:93" ], "itemID": 202, "itemType": "conferencePaper", @@ -5116,8 +5077,7 @@ } ], "extra": [ - "Citation Key: Dean:97a", - "tex.crossref: AAAI97" + "Citation Key: Dean:97a" ], "itemID": 203, "itemType": "conferencePaper", @@ -5133,7 +5093,7 @@ "lastName": "Dean" } ], - "date": "December 1984", + "date": "1984-12", "extra": [ "Citation Key: dean84a", "tex.key: dean84a" @@ -5153,14 +5113,16 @@ "lastName": "Dean" } ], - "date": "1985", + "date": "1985-08", "extra": [ "Citation Key: dean85" ], "itemID": 205, - "itemType": "report", - "publisher": "Yale University Computer Science Department", - "title": "Temporal imagery: an approach to reasoning about time for planning and problem solving" + "itemType": "conferencePaper", + "pages": "1060-1062", + "publicationTitle": "IJCAI-85", + "publisher": "IJCAI", + "title": "Temporal reasoning involving counterfactuals and disjunctions" }, { "citationKey": "dean85", @@ -5171,16 +5133,14 @@ "lastName": "Dean" } ], - "date": "August 1985", + "date": "1985", "extra": [ "Citation Key: dean85" ], "itemID": 206, - "itemType": "conferencePaper", - "pages": "1060-1062", - "publicationTitle": "IJCAI-85", - "publisher": "IJCAI", - "title": "Temporal reasoning involving counterfactuals and disjunctions" + "itemType": "report", + "publisher": "Yale University Computer Science Department", + "title": "Temporal imagery: an approach to reasoning about time for planning and problem solving" }, { "citationKey": "dean86", @@ -5191,7 +5151,7 @@ "lastName": "Dean" } ], - "date": "July 1986", + "date": "1986-07", "extra": [ "Citation Key: dean86" ], @@ -5289,8 +5249,7 @@ ], "date": "1993", "extra": [ - "Citation Key: DeanETAL:93", - "tex.crossref: UAI93" + "Citation Key: DeanETAL:93" ], "itemID": 211, "itemType": "conferencePaper", @@ -5341,7 +5300,7 @@ ], "pages": "35\u201374", "publicationTitle": "AIJ", - "title": "Planning under time constraints in Stochastic Domains", + "title": "Planning under time constraints in stochastic domains", "volume": "76" }, { @@ -5479,7 +5438,7 @@ "lastName": "Sussman" } ], - "date": "August 1977", + "date": "1977-08", "extra": [ "Citation Key: deKleer:77", "Number: 8" @@ -5533,8 +5492,7 @@ } ], "extra": [ - "Citation Key: desJardins:PI", - "tex.crossref: PlanInit1" + "Citation Key: desJardins:PI" ], "itemID": 219, "itemType": "conferencePaper", @@ -5666,7 +5624,7 @@ "lastName": "Weld" } ], - "date": "December 1993", + "date": "1993-12", "extra": [ "Citation Key: Draper:93" ], @@ -5717,8 +5675,7 @@ } ], "extra": [ - "Citation Key: Drexler:Incentives", - "tex.crossref: EcologyOfComp" + "Citation Key: Drexler:Incentives" ], "itemID": 226, "itemType": "bookSection", @@ -5740,8 +5697,7 @@ ], "date": "1990", "extra": [ - "Citation Key: Drummond:90", - "tex.crossref: AAAI90" + "Citation Key: Drummond:90" ], "itemID": 227, "itemType": "conferencePaper", @@ -5783,8 +5739,7 @@ } ], "extra": [ - "Citation Key: DSmith:PI", - "tex.crossref: PlanInit1" + "Citation Key: DSmith:PI" ], "itemID": 229, "itemType": "conferencePaper", @@ -5963,7 +5918,7 @@ "itemType": "book", "place": "Cambridge", "publisher": "Cambridge University Press", - "title": "Dynamic memory: A theory of learning in computers and people" + "title": "Dynamic memory: a theory of learning in computers and people" }, { "citationKey": "editors", @@ -6066,7 +6021,7 @@ "itemType": "book", "place": "New York", "publisher": "Academic Press", - "title": "GPS: A case study in generality and problem solving" + "title": "GPS: a case study in generality and problem solving" }, { "citationKey": "Erol:94a", @@ -6088,8 +6043,7 @@ } ], "extra": [ - "Citation Key: Erol:94a", - "tex.crossref: AIPS94" + "Citation Key: Erol:94a" ], "itemID": 240, "itemType": "conferencePaper", @@ -6097,7 +6051,7 @@ "As the name suggests, presents a sound and complete algorithm for HTN planning. The accomplishment is less overwhelming than it might at first seem, because the HTN plan's semantics rests on STRIPS-style world updates. So an HTN planner constructed according to this method will have the same knowledge-engineering demands as a first-principles STRIPS planner." ], "pages": "249\u2013254", - "title": "UMCP: A sound and complete procedure for hierarchical task network planning" + "title": "UMCP: a sound and complete procedure for hierarchical task network planning" }, { "citationKey": "Erol:94b", @@ -6119,8 +6073,7 @@ } ], "extra": [ - "Citation Key: Erol:94b", - "tex.crossref: AAAI94" + "Citation Key: Erol:94b" ], "itemID": 241, "itemType": "conferencePaper", @@ -6232,7 +6185,7 @@ "date": "1997", "extra": [ "Citation Key: Etzioni-etal:1997a", - "tex.acontentnote: Abstract: Closed-world inference-an essential component of many planning algorithms-is the process of determining that a logical sentence is false based on its absence from a knowledge base, or the inability to derive it. We describe a novel method for closed-world inference and update over the first-order theories of action used by planning algorithms such as NONLIN, TWEAK, and UCPOP. We show the method to be sound and efficient, but incomplete. In our experiments, closed-world inference consistently averaged about 2 milliseconds while updates averaged approximately 1.2 milliseconds. Furthermore, we demonstrate that incompleteness is nonproblematic in practice, since our mechanism makes over 99% of the desired inferences. We incorporated our method into the XII planner, which supports our Internet Softbot (software robot). The technique cut the number of actions executed by the Softbot by a factor of one hundred, and resulted in a corresponding speedup to XII.", + "tex.acontentnote: Abstract: Closed-world inference-an essential component of many planning algorithms-is the process of determining that a logical sentence is false based on its absence from a knowledge base, or the inability to derive it. We describe a novel method for closed-world inference and update over the first-order theories of action used by planning algorithms such as NONLIN, TWEAK, and UCPOP. We show the method to be sound and efficient, but incomplete. In our experiments, closed-world inference consistently averaged about 2 milliseconds while updates averaged approximately 1.2 milliseconds. Furthermore, we demonstrate that incompleteness is nonproblematic in practice, since our mechanism makes over 99incorporated our method into the XII planner, which supports our Internet Softbot (software robot). The technique cut the number of actions executed by the Softbot by a factor of one hundred, and resulted in a corresponding speedup to XII.", "tex.topic: planning;circumscription;closed-world-reasoning;" ], "issue": "1\u20132", @@ -6253,13 +6206,12 @@ } ], "extra": [ - "Citation Key: Etzioni:91", - "tex.crossref: AAAI91" + "Citation Key: Etzioni:91" ], "itemID": 246, "itemType": "conferencePaper", "pages": "533\u2013540", - "title": "STATIC: A problem-space compiler for PRODIGY" + "title": "STATIC: a problem-space compiler for PRODIGY" }, { "citationKey": "Etzioni:92", @@ -6297,8 +6249,7 @@ ], "date": "1992", "extra": [ - "Citation Key: Etzioni:92", - "tex.crossref: KR:92" + "Citation Key: Etzioni:92" ], "itemID": 247, "itemType": "conferencePaper", @@ -6325,8 +6276,7 @@ } ], "extra": [ - "Citation Key: Etzioni:94", - "tex.crossref: KR:94" + "Citation Key: Etzioni:94" ], "itemID": 248, "itemType": "conferencePaper", @@ -6412,7 +6362,7 @@ ], "itemID": 251, "itemType": "conferencePaper", - "publicationTitle": "Proceedings of the 1992 AAAI Spring Symposium on knowledge assimilation", + "publicationTitle": "Proceedings of the 1992 AAAI spring symposium on knowledge assimilation", "title": "Softbots as testbeds for machine learning" }, { @@ -6433,7 +6383,7 @@ "itemType": "journalArticle", "pages": "7\u201313", "publicationTitle": "AIM", - "title": "Intelligence without robots: A reply to Brooks", + "title": "Intelligence without robots: a reply to Brooks", "volume": "14" }, { @@ -6482,16 +6432,15 @@ "lastName": "Finin" } ], - "date": "September 1990", + "date": "1990-09", "extra": [ "Citation Key: eval:90" ], "issue": "3", "itemID": 254, "itemType": "journalArticle", - "journalAbbreviation": "CL", "pages": "175-181", - "publicationTitle": "Corolla Londiniensis", + "publicationTitle": "CL", "title": "Workshop on the evaluation of natural language processing systems", "volume": "16" }, @@ -6533,7 +6482,7 @@ "itemType": "book", "place": "Cambridge, Mass.", "publisher": "MIT Press", - "title": "NETL: A system for representing and using real-world knowledge" + "title": "NETL: a system for representing and using real-world knowledge" }, { "citationKey": "Fanty:85", @@ -6828,8 +6777,7 @@ ], "date": "1987", "extra": [ - "Citation Key: FirbyAAAI-87", - "tex.crossref: AAAI87" + "Citation Key: FirbyAAAI-87" ], "itemID": 268, "itemType": "conferencePaper", @@ -6857,7 +6805,7 @@ "itemID": 269, "itemType": "book", "publisher": "Brown University Department of Computer Science", - "title": "FRANZ LISP ... The manual" + "title": "FRANZ LISP ... the manual" }, { "citationKey": "Foderaro", @@ -6875,7 +6823,7 @@ "itemID": 270, "itemType": "book", "publisher": "University of California, Berkeley, Department of Computer Science", - "title": "FRANZ LISP ... The manual" + "title": "FRANZ LISP ... the manual" }, { "citationKey": "Forbus:1981", @@ -7122,7 +7070,7 @@ "itemID": 280, "itemType": "conferencePaper", "publicationTitle": "American institute of aeronautics and astronautics", - "title": "Human vs. Autonomous control of UAV surveillance", + "title": "Human vs. autonomous control of UAV surveillance", "url": "http://human-factors.arc.nasa.gov/apex/content/papers.html" }, { @@ -7205,8 +7153,7 @@ } ], "extra": [ - "Citation Key: freed98:apex", - "tex.crossref: AAAI98" + "Citation Key: freed98:apex" ], "itemID": 283, "itemType": "conferencePaper", @@ -7294,8 +7241,7 @@ } ], "extra": [ - "Citation Key: Frisch:kr91", - "tex.crossref: KR:91" + "Citation Key: Frisch:kr91" ], "itemID": 287, "itemType": "conferencePaper", @@ -7314,8 +7260,7 @@ } ], "extra": [ - "Citation Key: FRUMP", - "tex.crossref: Strategies4NLP" + "Citation Key: FRUMP" ], "itemID": 288, "itemType": "bookSection", @@ -7363,7 +7308,7 @@ "itemID": 290, "itemType": "report", "publisher": "University of British Columbia Department of Computer Science", - "title": "WHISPER: A computer implementation using analogues in reasoning" + "title": "WHISPER: a computer implementation using analogues in reasoning" }, { "citationKey": "Galton:90", @@ -7527,7 +7472,7 @@ "lastName": "Gazdar" } ], - "date": "September 1985", + "date": "1985-09", "extra": [ "Citation Key: Gazdar:85" ], @@ -7539,7 +7484,7 @@ "number": "CSLI-85-32", "place": "Stanford University, Stanford, CA", "publisher": "CSLI", - "title": "Finite state morphology: A review of Koskenniemi (1983)" + "title": "Finite state morphology: a review of Koskenniemi (1983)" }, { "citationKey": "Gelernter:1959", @@ -7575,9 +7520,8 @@ ], "itemID": 299, "itemType": "journalArticle", - "journalAbbreviation": "Science", "pages": "1041-1049", - "publicationTitle": "Science (New York, N.Y.)", + "publicationTitle": "Science", "title": "Empirical explorations of SYNCHEM", "volume": "197" }, @@ -7635,7 +7579,7 @@ "lastName": "Fikes" } ], - "date": "June 1992", + "date": "1992-06", "extra": [ "Citation Key: Genesereth:KIF3" ], @@ -7644,7 +7588,7 @@ "number": "Logic-92-1", "publisher": "Computer Science Department, Stanford University", "title": "Knowledge interchange format, version 3.0 reference manual", - "type": "Logic group report" + "type": "Logic Group Report" }, { "citationKey": "Georgeff:86", @@ -7769,7 +7713,7 @@ "place": "Brescia, Italy", "publisher": "Dept. of Electronics for Automation, University of Brescia", "title": "Plan constraints and preferences in PDDL3", - "type": "Technical report" + "type": "Technical Report" }, { "citationKey": "ghallab04:planningBook", @@ -7850,7 +7794,7 @@ ], "itemID": 309, "itemType": "document", - "title": "PDDL\u2014The planning domain definition language", + "title": "PDDL\u2014the planning domain definition language", "url": "citeseer.nj.nec.com/ghallab98pddl.html" }, { @@ -7887,9 +7831,8 @@ ], "itemID": 311, "itemType": "journalArticle", - "journalAbbreviation": "Science", "pages": "185-187", - "publicationTitle": "Science (New York, N.Y.)", + "publicationTitle": "Science", "title": "Perceived lightness depends on perceived spatial arrangement", "volume": "195" }, @@ -7924,8 +7867,7 @@ } ], "extra": [ - "Citation Key: Ginsberg-85-IJCAI", - "tex.crossref: IJCAI-85" + "Citation Key: Ginsberg-85-IJCAI" ], "itemID": 313, "itemType": "conferencePaper", @@ -7967,13 +7909,12 @@ } ], "extra": [ - "Citation Key: Ginsberg-Smith-87-FPW-1", - "tex.crossref: Brown:FPW" + "Citation Key: Ginsberg-Smith-87-FPW-1" ], "itemID": 315, "itemType": "conferencePaper", "pages": "233\u2013258", - "title": "Reasoning about action I: A possible worlds approach" + "title": "Reasoning about action I: a possible worlds approach" }, { "citationKey": "Ginsberg-Smith-87-FPW-2", @@ -7990,8 +7931,7 @@ } ], "extra": [ - "Citation Key: Ginsberg-Smith-87-FPW-2", - "tex.crossref: Brown:FPW" + "Citation Key: Ginsberg-Smith-87-FPW-2" ], "itemID": 316, "itemType": "conferencePaper", @@ -8020,7 +7960,7 @@ "itemType": "journalArticle", "pages": "165\u2013195", "publicationTitle": "AIJ", - "title": "Reasoning about action I: A possible worlds approach", + "title": "Reasoning about action I: a possible worlds approach", "volume": "35" }, { @@ -8178,8 +8118,7 @@ ], "date": "1997-08", "extra": [ - "Citation Key: Givan:97", - "tex.crossref: ijcai97" + "Citation Key: Givan:97" ], "itemID": 324, "itemType": "conferencePaper", @@ -8203,7 +8142,6 @@ "date": "1991-07", "extra": [ "Citation Key: Godefroid:91", - "tex.crossref: AAAI91", "tex.dbasekey: godefroid:91" ], "itemID": 325, @@ -8272,8 +8210,7 @@ "extra": [ "Citation Key: Golden98", "tex.bibdate: 2002-01-03", - "tex.bibsource: DBLP, http://dblp.uni-trier.de/db/conf/aips/aips1998.html#Golden98", - "tex.crossref: AIPS98" + "tex.bibsource: DBLP, http://dblp.uni-trier.de/db/conf/aips/aips1998.html#Golden98" ], "itemID": 328, "itemType": "conferencePaper", @@ -8314,8 +8251,7 @@ } ], "extra": [ - "Citation Key: Goldweic:PlanLoops", - "tex.crossref: PlanInit1" + "Citation Key: Goldweic:PlanLoops" ], "itemID": 330, "itemType": "conferencePaper", @@ -8446,7 +8382,7 @@ "itemType": "journalArticle", "pages": "365\u2013396", "publicationTitle": "JAIR", - "title": "Adaptive problem-solving for large-scale scheduling problems: A case study", + "title": "Adaptive problem-solving for large-scale scheduling problems: a case study", "volume": "4" }, { @@ -8503,8 +8439,7 @@ } ], "extra": [ - "Citation Key: Green:75", - "tex.crossref: IJCAI85" + "Citation Key: Green:75" ], "itemID": 338, "itemType": "conferencePaper", @@ -8526,13 +8461,12 @@ } ], "extra": [ - "Citation Key: Greenwald:PI", - "tex.crossref: PlanInit1" + "Citation Key: Greenwald:PI" ], "itemID": 339, "itemType": "conferencePaper", "pages": "179\u2013190", - "title": "Monte Carlo Simulation and Bottleneck-centered Heuristics for Time-critical scheduling in stochastic domains" + "title": "Monte carlo simulation and bottleneck-centered heuristics for time-critical scheduling in stochastic domains" }, { "citationKey": "Grice", @@ -8660,8 +8594,7 @@ ], "itemID": 344, "itemType": "journalArticle", - "journalAbbreviation": "CL", - "publicationTitle": "Corolla Londiniensis", + "publicationTitle": "CL", "title": "Attention, intention and the structure of discourse", "volume": "12" }, @@ -8676,8 +8609,7 @@ ], "extra": [ "Citation Key: Grosz:86a", - "Section: 21", - "tex.crossref: NLPReadings" + "Section: 21" ], "itemID": 345, "itemType": "bookSection", @@ -8879,7 +8811,7 @@ "lastName": "Hanks" } ], - "date": "June 1993", + "date": "1993-06", "extra": [ "Citation Key: Haddawy:93" ], @@ -8924,7 +8856,7 @@ "lastName": "Haddawy" } ], - "date": "July 1994", + "date": "1994-07", "extra": [ "Citation Key: Haddawy94:Generating", "tex.key: Conference" @@ -9020,8 +8952,7 @@ } ], "extra": [ - "Citation Key: hanks:YSP", - "tex.crossref: aaai86" + "Citation Key: hanks:YSP" ], "itemID": 360, "itemType": "conferencePaper", @@ -9103,8 +9034,7 @@ ], "date": "1986", "extra": [ - "Citation Key: Harper:86", - "tex.crossref: ACL-86" + "Citation Key: Harper:86" ], "itemID": 363, "itemType": "conferencePaper", @@ -9151,8 +9081,7 @@ } ], "extra": [ - "Citation Key: Harvey:IJCAI95", - "tex.crossref: ijcai95" + "Citation Key: Harvey:IJCAI95" ], "itemID": 365, "itemType": "conferencePaper", @@ -9216,8 +9145,7 @@ } ], "extra": [ - "Citation Key: Hayes:2ndManifesto", - "tex.crossref: FTCW" + "Citation Key: Hayes:2ndManifesto" ], "itemID": 368, "itemType": "bookSection", @@ -9310,8 +9238,7 @@ } ], "extra": [ - "Citation Key: Hayes:84", - "tex.crossref: FTCW" + "Citation Key: Hayes:84" ], "itemID": 373, "itemType": "bookSection", @@ -9413,7 +9340,7 @@ "itemType": "book", "place": "Hillsdale, NJ", "publisher": "LEA", - "title": "Integrated marker-passing and problem-solving: A spreading-activation approach to improved choice in planning" + "title": "Integrated marker-passing and problem-solving: a spreading-activation approach to improved choice in planning" }, { "citationKey": "Hendler:PI", @@ -9425,8 +9352,7 @@ } ], "extra": [ - "Citation Key: Hendler:PI", - "tex.crossref: PlanInit1" + "Citation Key: Hendler:PI" ], "itemID": 377, "itemType": "conferencePaper", @@ -9507,7 +9433,7 @@ "itemID": 381, "itemType": "report", "publisher": "MIT Artificial Intelligence Laboratory", - "title": "Description and theoretical analysis of PLANNER: A language for proving theorems and manipulating models in a robot" + "title": "Description and theoretical analysis of PLANNER: a language for proving theorems and manipulating models in a robot" }, { "citationKey": "Hewitt:91", @@ -9583,8 +9509,7 @@ } ], "extra": [ - "Citation Key: Hinton:86", - "tex.crossref: PDP2" + "Citation Key: Hinton:86" ], "itemID": 385, "itemType": "bookSection", @@ -9606,7 +9531,7 @@ "itemID": 386, "itemType": "report", "publisher": "University of British Columbia Department of Computer Science", - "title": "Anaphora in natural language understanding: A survey" + "title": "Anaphora in natural language understanding: a survey" }, { "citationKey": "Hirst:81", @@ -9625,7 +9550,7 @@ "itemType": "book", "place": "Berlin", "publisher": "Springer-Verlag", - "title": "Anaphora in natural language understanding: A survey" + "title": "Anaphora in natural language understanding: a survey" }, { "citationKey": "Hirst:82", @@ -9643,8 +9568,7 @@ ], "date": "1982", "extra": [ - "Citation Key: Hirst:82", - "tex.crossref: AAAI-82" + "Citation Key: Hirst:82" ], "itemID": 388, "itemType": "conferencePaper", @@ -9908,7 +9832,7 @@ "lastName": "Martin" } ], - "date": "December 1990", + "date": "1990-12", "extra": [ "Citation Key: Hobbs:IasATR" ], @@ -9998,7 +9922,7 @@ "itemType": "journalArticle", "pages": "49-117", "publicationTitle": "JAIR", - "title": "Message-based web service composition, integrity constraints, and planning under uncertainty: A new connection", + "title": "Message-based web service composition, integrity constraints, and planning under uncertainty: a new connection", "volume": "35" }, { @@ -10046,8 +9970,8 @@ }, { "creatorType": "author", - "firstName": "Frederico dos Santos", - "lastName": "Liporace" + "firstName": "Frederico", + "lastName": "dos Santos Liporace" }, { "creatorType": "author", @@ -10115,8 +10039,8 @@ }, { "creatorType": "author", - "firstName": "Frederico dos S.", - "lastName": "Liporace" + "firstName": "Frederico", + "lastName": "dos S. Liporace" }, { "creatorType": "author", @@ -10272,8 +10196,7 @@ "extra": [ "Citation Key: howey04:_val", "tex.bibdate: 2005-01-05", - "tex.bibsource: DBLP, http://dblp.uni-trier.de/db/conf/ictai/ictai2004.html#HoweyLF04", - "tex.crossref: DBLP:conf/ictai/2004" + "tex.bibsource: DBLP, http://dblp.uni-trier.de/db/conf/ictai/ictai2004.html#HoweyLF04" ], "itemID": 411, "itemType": "conferencePaper", @@ -10336,7 +10259,7 @@ "notes": [ "Relevant to the issue of creating new entities when planning." ], - "publicationTitle": "Proceedings of the 16th conference on very large databases, morgan kaufman pubs. (los altos CA), brisbane", + "publicationTitle": "Proceedings of the 16th conference on very large databases, morgan kaufman pubs. (Los altos CA), brisbane", "title": "ILOG: Declarative creation and manipulation of object-identifiers" }, { @@ -10398,8 +10321,7 @@ } ], "extra": [ - "Citation Key: IJCAI01*425", - "tex.crossref: IJCAI01" + "Citation Key: IJCAI01*425" ], "itemID": 415, "itemType": "conferencePaper", @@ -10433,7 +10355,7 @@ "itemType": "journalArticle", "journalAbbreviation": "IEEE Expert", "pages": "34\u201344", - "publicationTitle": "Ieee Expert-intelligent Systems & Their Applications", + "publicationTitle": "IEEE Expert-intelligent Systems & Their Applications", "title": "An architecture for real-time reasoning and system control", "volume": "7:6" }, @@ -10575,7 +10497,7 @@ "place": "ERLBAUM-ADDRESS", "publicationTitle": "Knowledge and cognition", "publisher": "Lawrence Erlbaum", - "title": "How can merlin understand?" + "title": "How can Merlin understand?" }, { "citationKey": "Johnson:1974", @@ -10617,7 +10539,7 @@ "lastName": "Klein" } ], - "date": "October 1986", + "date": "1986-10", "extra": [ "Citation Key: Johnson:86" ], @@ -10694,7 +10616,7 @@ "itemID": 426, "itemType": "journalArticle", "publicationTitle": "CoRR", - "title": "The metric-FF planning system: Translating \"Ignoring Delete Lists\" to numeric state variables", + "title": "The metric-FF planning system: Translating \"ignoring delete lists\" to numeric state variables", "url": "http://arxiv.org/abs/1106.5271", "volume": "abs/1106.5271" }, @@ -10943,8 +10865,7 @@ } ], "extra": [ - "Citation Key: Kabanza:95", - "tex.crossref: ijcai95" + "Citation Key: Kabanza:95" ], "itemID": 435, "itemType": "conferencePaper", @@ -10961,8 +10882,7 @@ } ], "extra": [ - "Citation Key: Kabanza:96", - "tex.crossref: Actions:96" + "Citation Key: Kabanza:96" ], "itemID": 436, "itemType": "conferencePaper", @@ -11039,8 +10959,7 @@ } ], "extra": [ - "Citation Key: Kaelbling:90", - "tex.crossref: PlanReadings" + "Citation Key: Kaelbling:90" ], "itemID": 439, "itemType": "bookSection", @@ -11057,8 +10976,7 @@ } ], "extra": [ - "Citation Key: Kaelbling:PI", - "tex.crossref: PlanInit1" + "Citation Key: Kaelbling:PI" ], "itemID": 440, "itemType": "conferencePaper", @@ -11236,7 +11154,7 @@ "lastName": "Kant" } ], - "date": "August 1977", + "date": "1977-08", "extra": [ "Citation Key: Kant:77", "Number: 64" @@ -11332,8 +11250,7 @@ ], "extra": [ "Citation Key: Kautz:90", - "Section: 6", - "tex.crossref: Intentions" + "Section: 6" ], "itemID": 451, "itemType": "bookSection", @@ -11350,8 +11267,7 @@ } ], "extra": [ - "Citation Key: Kautz:ParkingLot", - "tex.crossref: aaai86" + "Citation Key: Kautz:ParkingLot" ], "itemID": 452, "itemType": "conferencePaper", @@ -11974,7 +11890,7 @@ "lastName": "Kowalski" } ], - "date": "October 1975", + "date": "1975-10", "extra": [ "Citation Key: Kowalski:75" ], @@ -12154,14 +12070,14 @@ "lastName": "Weld" } ], - "date": "June 1993", + "date": "1993-06", "extra": [ "Citation Key: Kushmerick:93" ], "itemID": 487, "itemType": "report", "notes": [ - "This citation should be replaced with Kushmerick, et. al., Artificial Intelligence/, 1995" + "This citation should be replaced with Kushmerick, et. al., Artificial Intelligence, 1995" ], "number": "93-06-03", "place": "Seattle, WA", @@ -12236,8 +12152,7 @@ ], "date": "1991", "extra": [ - "Citation Key: Kyburg:91", - "tex.crossref: ijcai91" + "Citation Key: Kyburg:91" ], "itemID": 490, "itemType": "conferencePaper", @@ -12651,13 +12566,8 @@ }, { "creatorType": "editor", - "firstName": "Ryszard", - "lastName": "Michalski" - }, - { - "creatorType": "editor", - "firstName": "Jaime G.", - "lastName": "Carbonell" + "firstName": "Jaime G. Carbonell", + "lastName": "Ryszard Michalski" }, { "creatorType": "editor", @@ -12699,7 +12609,7 @@ "itemType": "journalArticle", "pages": "236-240", "publicationTitle": "Proc. AAAI", - "title": "Why AM and Eurisko appear to work", + "title": "Why AM and eurisko appear to work", "volume": "3" }, { @@ -12717,8 +12627,7 @@ } ], "extra": [ - "Citation Key: Lenat:88", - "tex.crossref: EcologyOfComp" + "Citation Key: Lenat:88" ], "itemID": 509, "itemType": "bookSection", @@ -12733,7 +12642,7 @@ "lastName": "Leong" } ], - "date": "June 1991", + "date": "1991-06", "extra": [ "Citation Key: Leong:91" ], @@ -12759,8 +12668,7 @@ } ], "extra": [ - "Citation Key: LeshEtzioni:95", - "tex.crossref: ijcai95" + "Citation Key: LeshEtzioni:95" ], "itemID": 511, "itemType": "conferencePaper", @@ -12782,8 +12690,7 @@ } ], "extra": [ - "Citation Key: LeshEtzioni:96", - "tex.crossref: KR:96" + "Citation Key: LeshEtzioni:96" ], "itemID": 512, "itemType": "conferencePaper", @@ -12896,8 +12803,7 @@ } ], "extra": [ - "Citation Key: Levesque:96", - "tex.crossref: AAAI96" + "Citation Key: Levesque:96" ], "itemID": 516, "itemType": "conferencePaper", @@ -12939,7 +12845,7 @@ "itemID": 518, "itemType": "report", "publisher": "MIT Artificial Intelligence Laboratory", - "title": "Instrumental with/ and the control relation in english" + "title": "Instrumental with and the control relation in english" }, { "citationKey": "Lewis:73", @@ -13005,13 +12911,12 @@ } ], "extra": [ - "Citation Key: Lifschitz:STRIPS", - "tex.crossref: PlanReadings" + "Citation Key: Lifschitz:STRIPS" ], "itemID": 521, "itemType": "bookSection", "notes": [ - "Reprinted from Reasoning about Actions and Plans/" + "Reprinted from Reasoning about Actions and Plans" ], "pages": "523\u2013530", "title": "On the semantics of STRIPS" @@ -13033,7 +12938,7 @@ "itemType": "journalArticle", "pages": "209\u2013229", "publicationTitle": "JAIR", - "title": "Learning the past tense of english verbs: The symbolic pattern associator vs. Connectionist models", + "title": "Learning the past tense of english verbs: The symbolic pattern associator vs. connectionist models", "volume": "1" }, { @@ -13217,7 +13122,7 @@ "itemID": 530, "itemType": "journalArticle", "publicationTitle": "IEEE Transactions on Computers", - "title": "Spatial planning: A configuration space approach", + "title": "Spatial Planning: A configuration space approach", "volume": "C-32" }, { @@ -13363,12 +13268,11 @@ } ], "extra": [ - "Citation Key: Malone:Enterprise", - "tex.crossref: EcologyOfComp" + "Citation Key: Malone:Enterprise" ], "itemID": 536, "itemType": "bookSection", - "title": "Enterprise: A market-like task scheduler for distributed computing environments" + "title": "Enterprise: a market-like task scheduler for distributed computing environments" }, { "citationKey": "Mano:76", @@ -13481,7 +13385,7 @@ "lastName": "Xu" } ], - "date": "November 1990", + "date": "1990-11", "extra": [ "Citation Key: Marcus:90" ], @@ -13491,7 +13395,7 @@ "place": "Cambridge, MA", "publisher": "MIT Center for Cognitive Science", "title": "Overregularization", - "type": "Occasional paper" + "type": "Occasional Paper" }, { "citationKey": "Marr:1982", @@ -13717,7 +13621,7 @@ "lastName": "McAllester" } ], - "date": "January 1980", + "date": "1980-01", "extra": [ "Citation Key: McAllester:80" ], @@ -13744,8 +13648,7 @@ ], "date": "1991", "extra": [ - "Citation Key: McAllester:91", - "tex.crossref: AAAI91" + "Citation Key: McAllester:91" ], "itemID": 551, "itemType": "conferencePaper", @@ -13927,8 +13830,7 @@ } ], "extra": [ - "Citation Key: McCarty:92", - "tex.crossref: KR:92" + "Citation Key: McCarty:92" ], "itemID": 559, "itemType": "conferencePaper", @@ -13944,7 +13846,7 @@ "lastName": "E.G. McCluskey" } ], - "date": "November 1956", + "date": "1956-11", "extra": [ "Citation Key: McCluskey:56" ], @@ -14009,7 +13911,7 @@ "Contains a description of the typed, object-oriented, language for HTN planners. The work is interesting and offers checking to make sure that transitions are well-founded, in terms of the objects that make up the domain. Somewhat limited, however, in terms of the richness of the object hierarchy, and the sorts of things that an HTN method is allowed to do. There's a discussion of how OCL\u2095 could be used to formalize O-Plan operators." ], "publisher": "Department of Computer Science, The University of Huddersfield", - "title": "OCL\u2095: a sound and supportive planning domain modelling language" + "title": "OCL\u2095: a sound and supportive planning domain modelling language" }, { "citationKey": "McCorduck:79", @@ -14357,7 +14259,7 @@ "itemID": 580, "itemType": "report", "publisher": "Yale University Department of Computer Science", - "title": "The nisp manual" + "title": "The Nisp manual" }, { "citationKey": "McDermott:83Duck", @@ -14510,8 +14412,7 @@ } ], "extra": [ - "Citation Key: McDermott:96", - "tex.crossref: AIPS96" + "Citation Key: McDermott:96" ], "itemID": 588, "itemType": "conferencePaper", @@ -14604,7 +14505,7 @@ "name": "MCDERMOTT" } ], - "date": "July 1991", + "date": "1991-07", "extra": [ "Citation Key: McDermott:Pedestal" ], @@ -14676,8 +14577,7 @@ ], "extra": [ "Citation Key: Meehan:TALE-SPIN", - "Section: 9", - "tex.crossref: ICU" + "Section: 9" ], "itemID": 594, "itemType": "bookSection", @@ -14694,8 +14594,7 @@ } ], "extra": [ - "Citation Key: Mellish:89", - "tex.crossref: ACL-89" + "Citation Key: Mellish:89" ], "itemID": 595, "itemType": "conferencePaper", @@ -14756,8 +14655,7 @@ ], "date": "1983", "extra": [ - "Citation Key: Michalski:83", - "tex.crossref: Michalski:Learning" + "Citation Key: Michalski:83" ], "itemID": 598, "itemType": "bookSection", @@ -14837,8 +14735,7 @@ } ], "extra": [ - "Citation Key: Miller:Agoric", - "tex.crossref: EcologyOfComp" + "Citation Key: Miller:Agoric" ], "itemID": 602, "itemType": "bookSection", @@ -14849,7 +14746,7 @@ "creators": [ { "creatorType": "author", - "firstName": "Firby, J., D.", + "firstName": "Firby, D.", "lastName": "Miller" }, { @@ -14907,7 +14804,7 @@ "number": "43", "publisher": "Cognitive Science Laboratory, Princeton University", "title": "Five papers on WordNet", - "type": "CSL report" + "type": "CSL Report" }, { "citationKey": "Mills:92", @@ -15040,12 +14937,11 @@ } ], "extra": [ - "Citation Key: Minton:91", - "tex.crossref: ijcai91" + "Citation Key: Minton:91" ], "itemID": 610, "itemType": "conferencePaper", - "title": "Commitment strategies in planning: A comparative analysis" + "title": "Commitment strategies in planning: a comparative analysis" }, { "citationKey": "Minton:92", @@ -15072,13 +14968,12 @@ } ], "extra": [ - "Citation Key: Minton:92", - "tex.crossref: KR:92" + "Citation Key: Minton:92" ], "itemID": 611, "itemType": "conferencePaper", "pages": "83\u201392", - "title": "Total order vs./ partial order planning: Factors influencing performance" + "title": "Total order vs. partial order planning: Factors influencing performance" }, { "citationKey": "Minton:94", @@ -15107,7 +15002,7 @@ "itemType": "journalArticle", "pages": "227\u2013262", "publicationTitle": "JAIR", - "title": "Total-order and partial-order planning: A comparative analysis", + "title": "Total-order and partial-order planning: a comparative analysis", "volume": "2" }, { @@ -15166,13 +15061,8 @@ }, { "creatorType": "editor", - "firstName": "Ryszard", - "lastName": "Michalski" - }, - { - "creatorType": "editor", - "firstName": "Jaime G.", - "lastName": "Carbonell" + "firstName": "Jaime G. Carbonell", + "lastName": "Ryszard Michalski" }, { "creatorType": "editor", @@ -15219,7 +15109,7 @@ "itemType": "journalArticle", "pages": "47\u201380", "publicationTitle": "Machine Learning", - "title": "Explanation-based generalization: A unifying view", + "title": "Explanation-based generalization: a unifying view", "volume": "1" }, { @@ -15301,13 +15191,8 @@ }, { "creatorType": "editor", - "firstName": "K.J.J.", - "lastName": "Hintikka" - }, - { - "creatorType": "editor", - "firstName": "J.M.E.", - "lastName": "Moravcsik" + "firstName": "J.M.E. Moravcsik", + "lastName": "K.J.J. Hintikka" }, { "creatorType": "editor", @@ -15462,8 +15347,7 @@ } ], "extra": [ - "Citation Key: Moore:84", - "tex.crossref: FTCW" + "Citation Key: Moore:84" ], "itemID": 626, "itemType": "bookSection", @@ -15506,8 +15390,7 @@ } ], "extra": [ - "Citation Key: Morgenstern:87", - "tex.crossref: ijcai87" + "Citation Key: Morgenstern:87" ], "itemID": 628, "itemType": "conferencePaper", @@ -15587,13 +15470,8 @@ }, { "creatorType": "editor", - "firstName": "Ryszard", - "lastName": "Michalski" - }, - { - "creatorType": "editor", - "firstName": "Jaime G.", - "lastName": "Carbonell" + "firstName": "Jaime G. Carbonell", + "lastName": "Ryszard Michalski" }, { "creatorType": "editor", @@ -15654,7 +15532,7 @@ "notes": [ "Data set from Naval Ocean Systems Center." ], - "title": "Working Papers:Navy tactical narrative paragraphs and glosses" + "title": "Working papers:navy tactical narrative paragraphs and glosses" }, { "citationKey": "Musliner:93", @@ -15684,7 +15562,7 @@ "itemType": "journalArticle", "pages": "1561\u20131574", "publicationTitle": "SMC", - "title": "CIRCA: A cooperative intelligent real-time control architecture", + "title": "CIRCA: a cooperative intelligent real-time control architecture", "volume": "23" }, { @@ -15721,7 +15599,6 @@ "date": "1994-08", "extra": [ "Citation Key: musliner:94a", - "tex.crossref: AAAI94", "tex.dbasekey: musliner:94a" ], "itemID": 637, @@ -15778,7 +15655,7 @@ "itemID": 639, "itemType": "manuscript", "notes": [ - "Prepublication draft; to appear in Artificial Intelligence/" + "Prepublication draft; to appear in Artificial Intelligence" ], "title": "The Effect of resource limits and task complexity on collaborative planning in dialogue" }, @@ -16185,7 +16062,7 @@ "lastName": "Levy" } ], - "date": "December 1995", + "date": "1995-12", "extra": [ "Citation Key: Ngo95:Probabilistic", "tex.key: Conference" @@ -16219,7 +16096,7 @@ "lastName": "Helwig" } ], - "date": "August 1995", + "date": "1995-08", "extra": [ "Citation Key: Ngo95:Theoretical", "tex.key: Conference" @@ -16358,8 +16235,7 @@ "date": "2001", "extra": [ "Citation Key: NguyenRao01", - "tex.bibsource: DBLP, http://dblp.uni-trier.de", - "tex.crossref: DBLP:conf/ijcai/2001" + "tex.bibsource: DBLP, http://dblp.uni-trier.de" ], "itemID": 659, "itemType": "conferencePaper", @@ -16596,7 +16472,7 @@ ], "itemID": 671, "itemType": "thesis", - "publisher": "Computer Science Division (EECS), % University of California at Berkeley", + "publisher": "Computer Science Division (EECS),University of California at Berkeley", "title": "Unified theory of inference for text understanding", "type": "phd" }, @@ -16615,8 +16491,7 @@ } ], "extra": [ - "Citation Key: Oates:PI", - "tex.crossref: PlanInit1" + "Citation Key: Oates:PI" ], "itemID": 672, "itemType": "conferencePaper", @@ -16644,8 +16519,7 @@ ], "date": "1992", "extra": [ - "Citation Key: OlawskyAIPS", - "tex.crossref: aips92" + "Citation Key: OlawskyAIPS" ], "itemID": 673, "itemType": "conferencePaper", @@ -16796,8 +16670,8 @@ "creators": [ { "creatorType": "author", - "firstName": "Jon a", - "lastName": "Pastor" + "firstName": "Jon", + "lastName": "a Pastor" }, { "creatorType": "author", @@ -16806,13 +16680,12 @@ } ], "extra": [ - "Citation Key: Pastor:PI", - "tex.crossref: PlanInit1" + "Citation Key: Pastor:PI" ], "itemID": 679, "itemType": "conferencePaper", "pages": "375\u2013384", - "title": "View-concepts: Persistent Storage for planning and scheduling" + "title": "View-concepts: Persistent storage for planning and scheduling" }, { "citationKey": "Patel:84", @@ -17069,7 +16942,7 @@ "lastName": "Pednault" } ], - "date": "December 1986", + "date": "1986-12", "extra": [ "Citation Key: Pednault:86" ], @@ -17111,8 +16984,7 @@ } ], "extra": [ - "Citation Key: Pednault:88a", - "tex.crossref: AAAI88" + "Citation Key: Pednault:88a" ], "itemID": 690, "itemType": "conferencePaper", @@ -17130,8 +17002,7 @@ ], "date": "1989", "extra": [ - "Citation Key: Pednault:89", - "tex.crossref: KR:89" + "Citation Key: Pednault:89" ], "itemID": 691, "itemType": "conferencePaper", @@ -17148,8 +17019,7 @@ ], "date": "1991", "extra": [ - "Citation Key: Pednault:91", - "tex.crossref: ijcai91" + "Citation Key: Pednault:91" ], "itemID": 692, "itemType": "conferencePaper", @@ -17209,13 +17079,12 @@ ], "date": "1992", "extra": [ - "Citation Key: Penberthy:92", - "tex.crossref: KR:92" + "Citation Key: Penberthy:92" ], "itemID": 694, "itemType": "conferencePaper", "pages": "103\u2013114", - "title": "UCPOP: A sound, complete, partial order planner for ADL" + "title": "UCPOP: a sound, complete, partial order planner for ADL" }, { "citationKey": "Peng:86", @@ -17232,13 +17101,12 @@ } ], "extra": [ - "Citation Key: Peng:86", - "tex.crossref: aaai86" + "Citation Key: Peng:86" ], "itemID": 695, "itemType": "conferencePaper", "pages": "140-145", - "title": "Plausibility of Diagnostic Hypotheses: the nature of simplicity" + "title": "Plausibility of diagnostic hypotheses: the nature of simplicity" }, { "citationKey": "Pentland:1983", @@ -17281,8 +17149,7 @@ ], "date": "1993", "extra": [ - "Citation Key: Pereira:93", - "tex.crossref: ACL-93" + "Citation Key: Pereira:93" ], "itemID": 697, "itemType": "conferencePaper", @@ -17393,8 +17260,7 @@ } ], "extra": [ - "Citation Key: Petrick-Bacchus-icaps:04", - "tex.crossref: ICAPS-04" + "Citation Key: Petrick-Bacchus-icaps:04" ], "itemID": 702, "itemType": "conferencePaper", @@ -17457,7 +17323,7 @@ ], "itemID": 705, "itemType": "bookSection", - "publicationTitle": "Proceedings of the 18th Conference of the Association for Computational Linguistics", + "publicationTitle": "Proceedings of the 18th conference of the association for computational linguistics", "publisher": "Association for Computational Linguistics", "title": "Flexible parsing" }, @@ -17532,8 +17398,7 @@ } ], "extra": [ - "Citation Key: PIEvaluation", - "tex.crossref: PlanInit1" + "Citation Key: PIEvaluation" ], "itemID": 708, "itemType": "conferencePaper", @@ -17673,7 +17538,7 @@ "itemType": "book", "place": "New York", "publisher": "Oxford University Press", - "title": "Computational intelligence: A logical approach" + "title": "Computational intelligence: a logical approach" }, { "citationKey": "Pople:75", @@ -18085,7 +17950,7 @@ "itemType": "journalArticle", "pages": "287\u2013339", "publicationTitle": "JAIR", - "title": "Planning for contingencies: A decision-based approach", + "title": "Planning for contingencies: a decision-based approach", "volume": "4" }, { @@ -18103,8 +17968,7 @@ } ], "extra": [ - "Citation Key: Pryor:CassandraIjcai", - "tex.crossref: ijcai95" + "Citation Key: Pryor:CassandraIjcai" ], "itemID": 728, "itemType": "conferencePaper", @@ -18128,7 +17992,7 @@ "lastName": "Collins" } ], - "date": "June 1993", + "date": "1993-06", "extra": [ "Citation Key: Pryor:CassandraORIG" ], @@ -18267,7 +18131,7 @@ "lastName": "Quine" } ], - "date": "October 1952", + "date": "1952-10", "extra": [ "Citation Key: Quine:52" ], @@ -18349,13 +18213,8 @@ }, { "creatorType": "editor", - "firstName": "Ryszard", - "lastName": "Michalski" - }, - { - "creatorType": "editor", - "firstName": "Jaime G.", - "lastName": "Carbonell" + "firstName": "Jaime G. Carbonell", + "lastName": "Ryszard Michalski" }, { "creatorType": "editor", @@ -18473,8 +18332,7 @@ ], "date": "2007", "extra": [ - "Citation Key: RaoETALDiversity:07", - "tex.crossref: IJCAI07" + "Citation Key: RaoETALDiversity:07" ], "itemID": 744, "itemType": "conferencePaper", @@ -18492,8 +18350,7 @@ ], "date": "1994", "extra": [ - "Citation Key: RaoKR-94", - "tex.crossref: KR:94" + "Citation Key: RaoKR-94" ], "itemID": 745, "itemType": "conferencePaper", @@ -18750,7 +18607,7 @@ "itemID": 756, "itemType": "thesis", "publisher": "Computer and Information Science, Penn University", - "title": "Selection and information: A class-based approach to lexical relationships", + "title": "Selection and information: a class-based approach to lexical relationships", "type": "phd" }, { @@ -19293,8 +19150,7 @@ ], "date": "1981", "extra": [ - "Citation Key: Rosenschein:PDLPlan", - "tex.crossref: ijcai81" + "Citation Key: Rosenschein:PDLPlan" ], "itemID": 779, "itemType": "conferencePaper", @@ -19384,7 +19240,7 @@ "lastName": "Hertzberg" } ], - "date": "March 1993", + "date": "1993-03", "extra": [ "Citation Key: Rutten:93" ], @@ -19445,8 +19301,7 @@ } ], "extra": [ - "Citation Key: Sadeh:PI", - "tex.crossref: PlanInit1" + "Citation Key: Sadeh:PI" ], "itemID": 786, "itemType": "conferencePaper", @@ -19463,8 +19318,7 @@ } ], "extra": [ - "Citation Key: Sadek:92", - "tex.crossref: KR:92" + "Citation Key: Sadek:92" ], "itemID": 787, "itemType": "conferencePaper", @@ -19592,7 +19446,7 @@ "lastName": "Sandewall" } ], - "date": "November 1992", + "date": "1992-11", "extra": [ "Citation Key: Sandewall:92" ], @@ -19623,7 +19477,7 @@ ], "publisher": "Link\u00f6ping University", "title": "Logic based modelling of goal-directed behavior", - "type": "Link\u00f6ping electronic articles in computer and information science" + "type": "Link\u00f6ping Electronic Articles in Computer and Information Science" }, { "citationKey": "Sathi:Manufacturing", @@ -19644,7 +19498,7 @@ "lastName": "Greenberg" } ], - "date": "September 1985", + "date": "1985-09", "extra": [ "Citation Key: Sathi:Manufacturing" ], @@ -19813,8 +19667,7 @@ } ], "extra": [ - "Citation Key: Scherl:93", - "tex.crossref: AAAI93" + "Citation Key: Scherl:93" ], "itemID": 801, "itemType": "conferencePaper", @@ -19846,7 +19699,7 @@ "itemID": 802, "itemType": "manuscript", "notes": [ - "Unpublished MSS. submitted to Artificial Intelligence/. Shorter version appeared in Proceedings of AAAI-93" + "Unpublished MSS. submitted to Artificial Intelligence. Shorter version appeared in Proceedings of AAAI-93" ], "title": "The frame problem and knowledge-producing actions" }, @@ -19935,8 +19788,7 @@ } ], "extra": [ - "Citation Key: Schubert:89", - "tex.crossref: KR:89" + "Citation Key: Schubert:89" ], "itemID": 806, "itemType": "conferencePaper", @@ -19966,7 +19818,7 @@ "pages": "23\u201367", "publicationTitle": "Knowledge representation and defeasible reasoning", "publisher": "Kluwer Academic Publishers", - "title": "Monotonic Solution of the Frame Problem in the situation calculus" + "title": "Monotonic solution of the frame problem in the situation calculus" }, { "citationKey": "Scripts", @@ -20183,7 +20035,7 @@ ], "itemID": 815, "itemType": "conferencePaper", - "publicationTitle": "Proceedings of the first international conference on knowledge capture (K-cap'01)", + "publicationTitle": "Proceedings of the first international conference on knowledge capture (k-cap'01)", "title": "Knowledge entry as the graphical assembly of components" }, { @@ -20351,9 +20203,8 @@ ], "itemID": 823, "itemType": "journalArticle", - "journalAbbreviation": "Science", "pages": "701-703", - "publicationTitle": "Science (New York, N.Y.)", + "publicationTitle": "Science", "title": "Mental rotation of three-dimensional objects", "volume": "171" }, @@ -20679,8 +20530,7 @@ } ], "extra": [ - "Citation Key: Sidner:83", - "tex.crossref: BradyandBerwick" + "Citation Key: Sidner:83" ], "itemID": 837, "itemType": "bookSection", @@ -20742,8 +20592,7 @@ } ], "extra": [ - "Citation Key: Siskind:93", - "tex.crossref: AAAI93" + "Citation Key: Siskind:93" ], "itemID": 840, "itemType": "conferencePaper", @@ -20772,7 +20621,7 @@ "number": "IRCS\u201393\u201303", "place": "Philadelphia, PA", "publisher": "University of Pennsylvania Institute for Research in Cognitive Science", - "title": "Screamer: A portable efficient implementation of nondeterministic common lisp" + "title": "Screamer: a portable efficient implementation of nondeterministic common lisp" }, { "citationKey": "Slate:77", @@ -20861,8 +20710,7 @@ } ], "extra": [ - "Citation Key: Smith:PI", - "tex.crossref: PlanInit1" + "Citation Key: Smith:PI" ], "itemID": 845, "itemType": "conferencePaper", @@ -20961,7 +20809,7 @@ "place": "Carlton, AUSTRALIA", "publisher": "AAII", "title": "Planned team activity", - "type": "Technical note" + "type": "Technical Note" }, { "citationKey": "Soutter:96", @@ -21148,8 +20996,7 @@ } ], "extra": [ - "Citation Key: StephanBiundo:93", - "tex.crossref: ijcai93" + "Citation Key: StephanBiundo:93" ], "itemID": 856, "itemType": "conferencePaper", @@ -21171,8 +21018,7 @@ } ], "extra": [ - "Citation Key: StephanBiundo:96", - "tex.crossref: AIPS96" + "Citation Key: StephanBiundo:96" ], "itemID": 857, "itemType": "conferencePaper", @@ -21304,7 +21150,7 @@ "lastName": "Stolcke" } ], - "date": "November 1993", + "date": "1993-11", "extra": [ "Citation Key: Stolcke:93" ], @@ -21486,13 +21332,8 @@ }, { "creatorType": "editor", - "firstName": "W.", - "lastName": "Kintsch" - }, - { - "creatorType": "editor", - "firstName": "R.J.", - "lastName": "Miller" + "firstName": "R.J. Miller", + "lastName": "W. Kintsch" }, { "creatorType": "editor", @@ -21526,8 +21367,7 @@ } ], "extra": [ - "Citation Key: Sycara:PI", - "tex.crossref: PlanInit1" + "Citation Key: Sycara:PI" ], "itemID": 872, "itemType": "conferencePaper", @@ -21643,8 +21483,7 @@ } ], "extra": [ - "Citation Key: Tate:OPlanConstraints", - "tex.crossref: PlanInit1" + "Citation Key: Tate:OPlanConstraints" ], "itemID": 877, "itemType": "conferencePaper", @@ -21661,8 +21500,7 @@ } ], "extra": [ - "Citation Key: Tate:PIPosition", - "tex.crossref: PlanInit1" + "Citation Key: Tate:PIPosition" ], "itemID": 878, "itemType": "conferencePaper", @@ -21857,13 +21695,12 @@ ], "date": "1991", "extra": [ - "Citation Key: Trost:91", - "tex.crossref: ijcai91" + "Citation Key: Trost:91" ], "itemID": 886, "itemType": "conferencePaper", "pages": "1024\u20131030", - "title": "X2MORF: A morphological component based on augmented two-level morphology" + "title": "X2MORF: a morphological component based on augmented two-level morphology" }, { "citationKey": "trueg04:_apply_autom_plann_system_airpor", @@ -21892,7 +21729,7 @@ "itemType": "report", "number": "199", "publisher": "Insitut f\u00fcr Informatik, Universit\u00e4t Freiburg", - "title": "Applying automatic planning systems to airport ground-traffic control \u2014 A feasibility study" + "title": "Applying automatic planning systems to airport ground-traffic control \u2014 a feasibility study" }, { "citationKey": "Turing:53", @@ -22020,8 +21857,7 @@ ], "date": "1987", "extra": [ - "Citation Key: UPlan", - "tex.crossref: ijcai87" + "Citation Key: UPlan" ], "itemID": 893, "itemType": "conferencePaper", @@ -22133,8 +21969,7 @@ } ], "extra": [ - "Citation Key: VelosoPollackCox:98", - "tex.crossref: AIPS98" + "Citation Key: VelosoPollackCox:98" ], "itemID": 898, "itemType": "conferencePaper", @@ -22206,13 +22041,12 @@ } ], "extra": [ - "Citation Key: Vilain:90", - "tex.crossref: AAAI90" + "Citation Key: Vilain:90" ], "itemID": 901, "itemType": "conferencePaper", "pages": "190\u2013197", - "title": "Getting serious about parsing plans: A grammatical analysis of plan recognition" + "title": "Getting serious about parsing plans: a grammatical analysis of plan recognition" }, { "citationKey": "Vilain:91", @@ -22225,8 +22059,7 @@ ], "date": "1991", "extra": [ - "Citation Key: Vilain:91", - "tex.crossref: AAAI91" + "Citation Key: Vilain:91" ], "itemID": 902, "itemType": "conferencePaper", @@ -22329,7 +22162,7 @@ "lastName": "Stornetta" } ], - "date": "February 1992", + "date": "1992-02", "extra": [ "Citation Key: Waldspurger:Spawn" ], @@ -22338,7 +22171,7 @@ "itemType": "journalArticle", "pages": "103\u2013117", "publicationTitle": "TSWE", - "title": "Spawn: A distributed computational economy", + "title": "Spawn: a distributed computational economy", "volume": "18" }, { @@ -22560,8 +22393,7 @@ } ], "extra": [ - "Citation Key: Webber:83", - "tex.crossref: BradyandBerwick" + "Citation Key: Webber:83" ], "itemID": 915, "itemType": "bookSection", @@ -22920,13 +22752,12 @@ } ], "extra": [ - "Citation Key: WilkinsMyers:98", - "tex.crossref: AIPS98" + "Citation Key: WilkinsMyers:98" ], "itemID": 932, "itemType": "conferencePaper", "pages": "154\u2013162", - "title": "A multiagent planning architecture" + "title": "A Multiagent planning architecture" }, { "citationKey": "WilkinsMyers:ACT", @@ -23056,7 +22887,7 @@ "itemType": "report", "number": "MCCS-90-194", "publisher": "Computing Research Laboratory, New Mexico State University", - "title": "Preference semantics: a family history" + "title": "Preference Semantics: a family history" }, { "citationKey": "WilliamsNayak:96", @@ -23073,8 +22904,7 @@ } ], "extra": [ - "Citation Key: WilliamsNayak:96", - "tex.crossref: AAAI96" + "Citation Key: WilliamsNayak:96" ], "itemID": 938, "itemType": "conferencePaper", @@ -23822,7 +23652,7 @@ { "itemID": 972, "itemType": "note", - "note": "Import errors found:
    • Unresolved @string reference "AAAI-91"
    • Unresolved @string reference "IJCAI-75"
    • Unresolved @string reference "IJCAI-73"
    • Unresolved @string reference "ERLBAUM-ADDRESS"
    • Unresolved @string reference "ERLBAUM"
    • Unresolved @string reference "AIJ"
    • Unresolved @string reference "IJCAI-77"
    • Unresolved @string reference "ACL-87"
    • Unresolved @string reference "LEA"
    • Unresolved @string reference "CI"
    • Unresolved @string reference "IJCAI-81"
    • Unresolved @string reference "September"
    • Unresolved @string reference "CL"
    • Unresolved @string reference "COGSCI"
    • Unresolved @string reference "AIM"
    • Unresolved @string reference "CSLI"
    • Unresolved @string reference "AAAI-82"
    • Unresolved @string reference "March"
    • Unresolved @string reference "MITAI"
    • Unresolved @string reference "AAAI-88"
    • Unresolved @string reference "January"
    • Unresolved @string reference "AAAI-83"
    • Unresolved @string reference "IJCAI-83"
    • Unresolved @string reference "FTCW"
    • Unresolved @string reference "AAAI-80"
    • Unresolved @string reference "MCDERMOTT"
    • Unresolved @string reference "IJIS"
    • Unresolved @string reference "ML"
    • Unresolved @string reference "JAIR"
    • Unresolved @string reference "REITER"
    • Unresolved @string reference "AW-ADDRESS"
    • Unresolved @string reference "KAUFMANN"
    • Unresolved @string reference "WILKINS"
    • Unresolved @string reference "AAAI-87"
    • Unresolved @string reference "ACL-86"
    • Unresolved @string reference "AAAI-86"
    • Unresolved @string reference "ACL-85"
    • Unresolved @string reference "IJCAI-87"
    • Unresolved @string reference "ACL-88"
    • Unresolved @string reference "SRI-ADDRESS"
    • Unresolved @string reference "December"
    • Unresolved @string reference "CSLI-ADDRESS"
    • Unresolved @string reference "October"
    • Unresolved @string reference "AAAI-90"
    • Unresolved @string reference "MITP"
    • Unresolved @string reference "MITP-ADDRESS"
    • Unresolved @string reference "MIT-ADDRESS"
    • Unresolved @string reference "BSTJ"
    • Unresolved @string reference "November"
    • Unresolved @string reference "KAUFMANN-ADDRESS"
    • Unresolved @string reference "AAAI-PRESS"
    • Unresolved @string reference "IJCAI-89"
    • Unresolved @string reference "IJCAI-85"
    • Unresolved @string reference "SMC"
    • Unresolved @string reference "GINSBERG"
    • Unresolved @string reference "EXPERT"
    • Unresolved @string reference "UDUB"
    • Unresolved @string reference "NEW-AAAI-PUB"
    • Unresolved @string reference "TCOMPUTERS"
    • Unresolved @string reference "CIJ"
    • Unresolved @string reference "PAMI"
    • Unresolved @string reference "ICSI"
    • Unresolved @string reference "ELSEVIER"
    • Unresolved @string reference "TSWE"
    • Unresolved @string reference "SRI"
    • Unresolved @string reference "INGRAND"
    • Unresolved @string reference "KSL"
    • Unresolved @string reference "STANFORD-ADDRESS"
    • Unresolved @string reference "CMUSCS"
    • Unresolved @string reference "CMU-ADDRESS"
    • Unresolved @string reference "AAAI"
    • Unresolved @string reference "AAAI-PRESS-ADDRESS"
    • Unresolved @string reference "JLC"
    • Unresolved @string reference "IJCAI-97"
    • Unresolved @string reference "DKE"
    • Unresolved @string reference "AAII"
    • Unresolved @string reference "ar"
    • Unresolved @string reference "MPOLLACK"
    • Unresolved @string reference "SPRINGER"
    • Unresolved @string reference "ETAI"
    • Unresolved @string reference "amai"
    • Unresolved @string reference "LNCS"
    • Unresolved @string reference "FREED"
    • Unresolved @string reference "ICAPS"
    • Unresolved @string reference "ILP-05"
    • Unresolved @string reference "ICML-97"
    • Unresolved @string reference "ICML-06"
    • Unresolved @string reference "IJCAI"
    • Unresolved @string reference "AAAI-99"
    • Unresolved @string reference "PICAPS"
    ", + "note": "Import errors found:
    • Unresolved @string reference "AAAI-91"
    • Unresolved @string reference "IJCAI-75"
    • Unresolved @string reference "IJCAI-73"
    • Unresolved @string reference "ERLBAUM-ADDRESS"
    • Unresolved @string reference "ERLBAUM"
    • Unresolved @string reference "AIJ"
    • Unresolved @string reference "IJCAI-77"
    • Unresolved @string reference "ACL-87"
    • Unresolved @string reference "LEA"
    • Unresolved @string reference "CI"
    • Unresolved @string reference "IJCAI-81"
    • Unresolved @string reference "CL"
    • Unresolved @string reference "COGSCI"
    • Unresolved @string reference "AIM"
    • Unresolved @string reference "CSLI"
    • Unresolved @string reference "AAAI-82"
    • Unresolved @string reference "MITAI"
    • Unresolved @string reference "AAAI-88"
    • Unresolved @string reference "AAAI-83"
    • Unresolved @string reference "IJCAI-83"
    • Unresolved @string reference "FTCW"
    • Unresolved @string reference "AAAI-80"
    • Unresolved @string reference "MCDERMOTT"
    • Unresolved @string reference "IJIS"
    • Unresolved @string reference "ML"
    • Unresolved @string reference "JAIR"
    • Unresolved @string reference "REITER"
    • Unresolved @string reference "AW-ADDRESS"
    • Unresolved @string reference "KAUFMANN"
    • Unresolved @string reference "WILKINS"
    • Unresolved @string reference "AAAI-87"
    • Unresolved @string reference "ACL-86"
    • Unresolved @string reference "AAAI-86"
    • Unresolved @string reference "ACL-85"
    • Unresolved @string reference "IJCAI-87"
    • Unresolved @string reference "ACL-88"
    • Unresolved @string reference "SRI-ADDRESS"
    • Unresolved @string reference "CSLI-ADDRESS"
    • Unresolved @string reference "AAAI-90"
    • Unresolved @string reference "MITP"
    • Unresolved @string reference "MITP-ADDRESS"
    • Unresolved @string reference "MIT-ADDRESS"
    • Unresolved @string reference "BSTJ"
    • Unresolved @string reference "KAUFMANN-ADDRESS"
    • Unresolved @string reference "AAAI-PRESS"
    • Unresolved @string reference "IJCAI-89"
    • Unresolved @string reference "IJCAI-85"
    • Unresolved @string reference "SMC"
    • Unresolved @string reference "GINSBERG"
    • Unresolved @string reference "EXPERT"
    • Unresolved @string reference "UDUB"
    • Unresolved @string reference "NEW-AAAI-PUB"
    • Unresolved @string reference "TCOMPUTERS"
    • Unresolved @string reference "CIJ"
    • Unresolved @string reference "PAMI"
    • Unresolved @string reference "ICSI"
    • Unresolved @string reference "ELSEVIER"
    • Unresolved @string reference "TSWE"
    • Unresolved @string reference "SRI"
    • Unresolved @string reference "INGRAND"
    • Unresolved @string reference "KSL"
    • Unresolved @string reference "STANFORD-ADDRESS"
    • Unresolved @string reference "CMUSCS"
    • Unresolved @string reference "CMU-ADDRESS"
    • Unresolved @string reference "AAAI"
    • Unresolved @string reference "AAAI-PRESS-ADDRESS"
    • Unresolved @string reference "JLC"
    • Unresolved @string reference "IJCAI-97"
    • Unresolved @string reference "DKE"
    • Unresolved @string reference "AAII"
    • Unresolved @string reference "ar"
    • Unresolved @string reference "MPOLLACK"
    • Unresolved @string reference "SPRINGER"
    • Unresolved @string reference "ETAI"
    • Unresolved @string reference "amai"
    • Unresolved @string reference "LNCS"
    • Unresolved @string reference "FREED"
    • Unresolved @string reference "ICAPS"
    • Unresolved @string reference "ILP-05"
    • Unresolved @string reference "ICML-97"
    • Unresolved @string reference "ICML-06"
    • Unresolved @string reference "jair"
    • Unresolved @string reference "IJCAI"
    • Unresolved @string reference "AAAI-99"
    • Unresolved @string reference "PICAPS"
    • Unresolved @string reference "ijcai"
    • @miller85: unexpected 4-part name "Miller, D., Firby, J.", dropping "J."
      Miller, D., Firby, J.
    ", "tags": [ { "tag": "#Better BibTeX import error", @@ -24402,7 +24232,7 @@ "pages": "364\u2013372", "publicationTitle": "ICAPS", "publisher": "AAAI Press", - "title": "Simulated penetration testing: From \"Dijkstra\" to \"Turing Test++\"", + "title": "Simulated penetration testing: From \"dijkstra\" to \"turing test++\"", "url": "http://www.aaai.org/Library/ICAPS/icaps15contents.php" }, { @@ -24452,7 +24282,7 @@ "publicationTitle": "Logics in artificial intelligence", "publisher": "Springer Berlin Heidelberg", "series": "Lecture notes in computer science", - "title": "Z-log: Applying system-Z", + "title": "Z-log: Applying system-z", "url": "http://dx.doi.org/10.1007/3-540-45757-7_52", "volume": "2424" }, diff --git a/test/fixtures/import/web_page and other mendeley idiocy.json b/test/fixtures/import/web_page and other mendeley idiocy.json index 8bd1841ea3..723431fe9c 100644 --- a/test/fixtures/import/web_page and other mendeley idiocy.json +++ b/test/fixtures/import/web_page and other mendeley idiocy.json @@ -691,7 +691,7 @@ "itemID": 4, "itemType": "book", "notes": [ - "Includes bibliographical references and index.; ID: 01UAALMA51544019760003843" + "Includes bibliographical references and index.; ID: 01UA_ALMA51544019760003843" ], "publisher": "Jackson, Mississippi : University Press of Mississippi", "title": "Little red readings historical materialist perspectives on children\u2019s literature" @@ -715,7 +715,7 @@ "itemID": 5, "itemType": "journalArticle", "notes": [ - "ID: TN\u209aroquest1621367911" + "ID: TN_proquest1621367911" ], "pages": "B14", "publicationTitle": "New York Times (1923-Current file)", @@ -775,7 +775,7 @@ "itemID": 7, "itemType": "book", "notes": [ - "Description based upon print version of record.; Description based on print version record.; ID: 01UAALMA51543392390003843" + "Description based upon print version of record.; Description based on print version record.; ID: 01UA_ALMA51543392390003843" ], "publisher": "New York : Fordham University Press", "title": "How to be an intellectual: Essays on criticism, culture, and the university" @@ -803,7 +803,7 @@ ], "itemID": 8, "itemType": "webpage", - "title": "\"Pitt Pioneers: or, How Our Faculty Helped Establish Children\u2019s Literature and Childhood Studies in the Academy\" (2014)", + "title": "\"Pitt pioneers: or, how our faculty helped establish children\u2019s literature and childhood studies in the academy\" (2014)", "url": "https://www.academia.edu/9397598/_Pitt_Pioneers_or_How_Our_Faculty_Helped_Establish_Children_s_Literature_and_Childhood_Studies_in_the_Academy_2014_" }, { @@ -824,7 +824,7 @@ "itemID": 9, "itemType": "book", "notes": [ - "Includes bibliographical references (p. 149-162) and index; ID: 01UAALMA21393431080003843" + "Includes bibliographical references (p. 149-162) and index; ID: 01UA_ALMA21393431080003843" ], "publisher": "Columbia : University of Missouri Press", "title": "Faint praise : the plight of book reviewing in America" @@ -846,7 +846,7 @@ "itemID": 10, "itemType": "book", "notes": [ - "Includes bibliographical references (pages 203-213) and index.; ID: 01UAALMA71628903890003843" + "Includes bibliographical references (pages 203-213) and index.; ID: 01UA_ALMA71628903890003843" ], "publisher": "Jefferson, North Carolina : McFarland & Company, Inc., Publishers", "title": "Which side are you on? : seven social responsibility debates in American librarianship, 1990-2015" @@ -965,7 +965,7 @@ "itemID": 13, "itemType": "book", "notes": [ - "Includes bibliographical references and index.; ID: 01UAALMA51539696940003843" + "Includes bibliographical references and index.; ID: 01UA_ALMA51539696940003843" ], "publisher": "San Francisco : Jossey-Bass", "title": "Twitter for good: Change the world one tweet at a time" @@ -1039,7 +1039,7 @@ "itemID": 15, "itemType": "book", "notes": [ - "Includes bibliographical references (pages 165]-189) and index; ID: 01UAALMA21422213960003843" + "Includes bibliographical references (pages 165]-189) and index; ID: 01UA_ALMA21422213960003843" ], "publisher": "New York : Peter Lang", "title": "Reading the world, the globe, and the cosmos : approaches to teaching literature for the Twenty-First century" @@ -1062,7 +1062,7 @@ "itemID": 16, "itemType": "book", "notes": [ - "Includes bibliographical references and index; ID: 01UAALMA21459275130003843" + "Includes bibliographical references and index; ID: 01UA_ALMA21459275130003843" ], "publisher": "Cambridge, Mass. : Harvard University Press", "title": "Our aesthetic categories : zany, cute, interesting" @@ -1147,7 +1147,7 @@ "itemID": 19, "itemType": "journalArticle", "publicationTitle": "Booktoss", - "title": "2020 \u2013 the \u201cHold my beer\u201d decade", + "title": "2020 \u2013 the \u201chold my beer\u201d decade", "url": "https://booktoss.blog/2020/05/09/2020-the-hold-my-beer-decade/" }, { @@ -1168,7 +1168,7 @@ "itemID": 20, "itemType": "book", "notes": [ - "ID: TN\u209aq\u2091bookcentralEBC5640118" + "ID: TN_pq_ebook_centralEBC5640118" ], "title": "Marxist literary criticism today" }, @@ -1211,7 +1211,7 @@ "itemID": 22, "itemType": "book", "notes": [ - "Includes bibliographical references (pages 181-212) and index; ID: 01UAALMA21452464220003843" + "Includes bibliographical references (pages 181-212) and index; ID: 01UA_ALMA21452464220003843" ], "publisher": "New York : Collins", "title": "From cover to cover : evaluating and reviewing children's books" @@ -1356,7 +1356,7 @@ "tag": "SOCIAL SCIENCE" } ], - "title": "Spoiler alert: A critical guide" + "title": "Spoiler alert: a critical guide" }, { "abstractNote": "Allusions are often translated literally while their connotative and pragmatic meaning is largely ignored. This frequently leads to culture bumps, in other words, to puzzling or impenetrable wordings. Culture Bumps discusses this problem and how to deal with a culture-specific, source-text allusion in such a way that readers of the target text can understand the function and meaning of the allusive passage. The main focus is on translators and readers as active participants in the communicative process, and the book contains interviews with professional translators as well as empirical data on the responses of real readers. Examples provide teachers who want to take up the problem in translation classes with materials from contemporary English texts, both fiction and non-fiction, as well as a flowchart of translation strategies. The conclusion recommends that translators should take the needs of readers into account when choosing translation strategies for allusions, and that university-level language teaching and translator training should pay more attention to the biculturalisation of students", @@ -1430,7 +1430,7 @@ "itemID": 29, "itemType": "journalArticle", "notes": [ - "ID: TN\u2091rudit1046984ar" + "ID: TN_erudit1046984ar" ], "publicationTitle": "M\u00e9moires du livre", "title": "Writing about writers", @@ -1491,7 +1491,7 @@ "itemID": 31, "itemType": "book", "notes": [ - "Includes bibliographical references and index.; ID: 01UAALMA71628989420003843" + "Includes bibliographical references and index.; ID: 01UA_ALMA71628989420003843" ], "publisher": "Jackson : University Press of Mississippi", "title": "Growing up Asian American in young adult fiction" @@ -1514,7 +1514,7 @@ "itemID": 32, "itemType": "book", "notes": [ - "ID: TN\u209aq\u2091bookcentralEBC3239850" + "ID: TN_pq_ebook_centralEBC3239850" ], "publisher": "New York: Fordham University Press", "title": "Realizing capital: Financial and psychic economies in victorian form", @@ -1543,7 +1543,7 @@ "itemID": 33, "itemType": "journalArticle", "notes": [ - "ID: TN\u209aroquest305040598" + "ID: TN_proquest305040598" ], "title": "Librarian-book reviewers and librarianship" }, @@ -1565,7 +1565,7 @@ "itemID": 34, "itemType": "book", "notes": [ - "Includes bibliographical references (pages 278-316) and index.; ID: 01UAALMA21630648630003843" + "Includes bibliographical references (pages 278-316) and index.; ID: 01UA_ALMA21630648630003843" ], "publisher": "New York Riverhead Books", "title": "Because internet : understanding the new rules of language" @@ -1627,13 +1627,13 @@ "lastName": "Steward" } ], - "date": "1994-4", + "date": "1994-04", "extra": [ "Citation Key: Steward1994" ], "itemID": 37, "itemType": "journalArticle", - "title": "The multiculturally responsive vs. the multiculturally reactive: A study of perceptions of white counselor trainees.", + "title": "The multiculturally responsive vs. the multiculturally reactive: a study of perceptions of white counselor trainees.", "url": "https://eric.ed.gov/?q=Multicultural+Literature+and+the+Politics+of+Reaction&ft=on&id=ED376381" }, { @@ -1713,7 +1713,7 @@ ], "itemID": 41, "itemType": "report", - "title": "BooKExpo america and bookcon to feature star-studded lineup of World?s best-selling Children?s and young adult authors - BookExpo 2020", + "title": "BooKExpo america and bookcon to feature star-studded lineup of world?s best-selling children?s and young adult authors - BookExpo 2020", "url": "https://www.bookexpoamerica.com/Media/Press-Releases/BooKExpo-America-And-Bookcon-To-Feature-Star-Studded-Lineup-Of-Worlds-Best-Selling-Childrens-And-Young-Adult-Authors/" }, { @@ -1775,7 +1775,7 @@ "itemID": 44, "itemType": "book", "notes": [ - "Includes bibliographical references and indexes.; ID: 01UAALMA51545015840003843" + "Includes bibliographical references and indexes.; ID: 01UA_ALMA51545015840003843" ], "publisher": "Amsterdam; Philadelphia : John Benjamins Pub. Co", "title": "Cohesive profiling meaning and interaction in personal weblogs" @@ -1856,7 +1856,7 @@ "itemID": 47, "itemType": "journalArticle", "publicationTitle": "Understanding and Dismantling Privilege", - "title": "Critical content analysis: A flexible method for thinking with theory", + "title": "Critical content analysis: a flexible method for thinking with theory", "url": "https://www.wpcjournal.com/article/view/18826", "volume": "8" }, @@ -1875,7 +1875,7 @@ "lastName": "Benfer" } ], - "date": "2014-9", + "date": "2014-09", "extra": [ "Citation Key: Gangi2014" ], @@ -1903,7 +1903,7 @@ "itemID": 49, "itemType": "book", "notes": [ - "ID: TN\u2092xford\u209bcholarshiposo/9780198702504.003.0007" + "ID: TN_oxford_scholarshiposo/9780198702504.003.0007" ], "publisher": "Oxford University Press", "title": "Playing nice, being mean, and the space in between: Book critics and the difficulties of writing bad reviews" @@ -1996,7 +1996,7 @@ "itemID": 52, "itemType": "journalArticle", "notes": [ - "ID: TNucl10074348" + "ID: TN_ucl10074348" ], "publicationTitle": "Participations", "title": "Is \"Everyone welcome\"?: Intersectionality, inclusion, and the extension of cultural hierarchies on Emma Watson's Feminist book club, \"Our shared shelf\"" @@ -2086,7 +2086,7 @@ "tag": "Spectatorship" } ], - "title": "\u2018What were We\u2014Idiots?\u2019: Re-evaluating female spectatorship and the new horror heroine with catherine hardwicke\u2019s twilight" + "title": "\u2018What were we\u2014idiots?\u2019: Re-evaluating female spectatorship and the new horror heroine with catherine hardwicke\u2019s twilight" }, { "abstractNote": "First published in 2004. Routledge is an imprint of Taylor & Francis, an informa company. George Yancy holds the McCracken Fellowship in Africaana Studies at New York University. He has edited three previous books, including African-American Philosophers: 17 Conversations (Routledge, 1998), Cornel West: A Critical Reader (2001), and The Philosophical i: Personal Reflections on Life in Philosophy (2002). \"Not only are these essays provocative, but they are illuminating and useful both to scholars and to neophytes. The anthology as a whole deserves an unqualified recommendation for all interested in this matter.\" -L. Sebastian Purcell, Boston College", @@ -2288,7 +2288,7 @@ "itemID": 57, "itemType": "book", "notes": [ - "ID: TN\u209aq\u2091bookcentralEBC5548389" + "ID: TN_pq_ebook_centralEBC5548389" ], "publisher": "Seattle: University of Washington Press", "title": "Racial ecologies" @@ -2354,7 +2354,7 @@ "itemID": 60, "itemType": "book", "notes": [ - "Includes bibliographical references (p. 189-225) and index.; ID: 01UAALMA51544855280003843" + "Includes bibliographical references (p. 189-225) and index.; ID: 01UA_ALMA51544855280003843" ], "publisher": "New Brunswick, N.J. : Rutgers University Press", "title": "Raising your kids right children's literature and american political conservatism" @@ -2407,7 +2407,7 @@ "itemID": 62, "itemType": "journalArticle", "publicationTitle": "Participations", - "title": "Reading harry potter: A personal and collective experience", + "title": "Reading Harry Potter: A personal and collective experience", "volume": "5" }, { @@ -2714,7 +2714,7 @@ "itemID": 69, "itemType": "book", "notes": [ - "Includes bibliographical references and index; ID: 01UAALMA21443524890003843" + "Includes bibliographical references and index; ID: 01UA_ALMA21443524890003843" ], "publisher": "Durham; London : Duke University Press", "title": "What is a world? : on postcolonial literature as world literature" @@ -2796,7 +2796,7 @@ "itemID": 72, "itemType": "book", "notes": [ - "Description based upon print version of record.; ID: 01UAALMA51660911640003843" + "Description based upon print version of record.; ID: 01UA_ALMA51660911640003843" ], "publisher": "Hoboken : Taylor and Francis", "title": "The children's book business: Lessons from the long eighteenth century" @@ -2984,7 +2984,7 @@ "itemID": 75, "itemType": "book", "notes": [ - "Includes bibliographical references and index.; ID: 01UAALMA51531436740003843" + "Includes bibliographical references and index.; ID: 01UA_ALMA51531436740003843" ], "publisher": "New Haven : Yale University Press", "title": "Materialism" @@ -3047,7 +3047,7 @@ "itemID": 77, "itemType": "book", "notes": [ - "Includes bibliographic references and index.; ID: 01UAALMA51544147360003843" + "Includes bibliographic references and index.; ID: 01UA_ALMA51544147360003843" ], "publisher": "Amsterdam : Rodopi", "title": "Authority matters : Rethinking the theory and practice of authorship" @@ -3069,7 +3069,7 @@ "itemID": 78, "itemType": "journalArticle", "publicationTitle": "The New York Review of Books", - "title": "The problem with \u2018Problematic\u2019", + "title": "The problem with \u2018problematic\u2019", "url": "https://www.nybooks.com/daily/2017/11/01/the-problem-with-problematic/" }, { @@ -3099,7 +3099,7 @@ "itemID": 79, "itemType": "book", "notes": [ - "Includes bibliographical references.; ID: 01UAALMA51544570200003843" + "Includes bibliographical references.; ID: 01UA_ALMA51544570200003843" ], "publisher": "Philadelphia : Temple University Press", "title": "Crossroads, directions and a new critical race theory" @@ -3187,7 +3187,7 @@ "itemID": 82, "itemType": "thesis", "notes": [ - "ID: TNcdi\u209aroquestjournals\u2081767220832" + "ID: TN_cdi_proquest_journals_1767220832" ], "publisher": "ProQuest Dissertations Publishing", "title": "Literacy and social justice: Understanding student perceptions and conceptions about literature" @@ -3217,7 +3217,7 @@ "itemID": 83, "itemType": "thesis", "notes": [ - "Source type: Dissertations &amp; Theses; Object type: Dissertation; Object type: Thesis; Copyright: Database copyright ProQuest LLC; ProQuest does not claim copyright in the individual underlying works.; DOCID: 4326335711; DocISBN: 978-0-438-02282-9; PCID: 112175342; PMID: 66569; DissertationNum: 10857168; PublisherXID: 10857168" + "Source type: Dissertations & Theses; Object type: Dissertation; Object type: Thesis; Copyright: Database copyright ProQuest LLC; ProQuest does not claim copyright in the individual underlying works.; DOCID: 4326335711; DocISBN: 978-0-438-02282-9; PCID: 112175342; PMID: 66569; DissertationNum: 10857168; PublisherXID: 10857168" ], "publisher": "University of Cincinnati", "title": "Whose books get published?: Individual agency and the business of children's publishing", @@ -3246,7 +3246,7 @@ "itemID": 84, "itemType": "journalArticle", "notes": [ - "ID: TN\u209aroquest304544124" + "ID: TN_proquest304544124" ], "title": "\"For all our children's fate\": Children's literature and contemporary culture" }, @@ -3269,7 +3269,7 @@ "itemID": 85, "itemType": "journalArticle", "notes": [ - "ID: TN\u209aroquest199358950" + "ID: TN_proquest199358950" ], "pages": "315-318", "publicationTitle": "The Horn Book Magazine", @@ -3293,7 +3293,7 @@ "itemID": 86, "itemType": "book", "notes": [ - "ID: TNjstorbooksj.ctt1pwt9w5" + "ID: TN_jstor_booksj.ctt1pwt9w5" ], "publisher": "New York: NYU Press", "title": "Algorithms of oppression - how search engines reinforce racism" @@ -3474,7 +3474,7 @@ "itemID": 90, "itemType": "book", "notes": [ - "Includes bibliographical references and index.; ID: 01UAALMA51544082500003843" + "Includes bibliographical references and index.; ID: 01UA_ALMA51544082500003843" ], "publisher": "Minneapolis, Minnesota : University of Minnesota Press", "title": "Red skin, white masks rejecting the colonial politics of recognition" @@ -3551,7 +3551,7 @@ "itemID": 92, "itemType": "journalArticle", "notes": [ - "ID: TNgale\u2097itrc20258576" + "ID: TN_gale_litrc20258576" ], "pages": "34", "publicationTitle": "The Horn Book Magazine", @@ -3777,7 +3777,7 @@ "tag": "Writing" } ], - "title": "The trouble with reader-response theory when reading multicultural literature: A critique of dana fox's and kathy's short's stories matter", + "title": "The trouble with reader-response theory when reading multicultural literature: a critique of dana fox's and kathy's short's stories matter", "url": "http://ezproxy.library.arizona.edu/login?url=https://www.proquest.com/scholarly-journals/trouble-with-reader-response-theory-when-reading/docview/1881110575/se-2?accountid=8360 https://arizona-primo.hosted.exlibrisgroup.com/openurl/01UA/01UA?&aufirst=Jacquelyn&aulast=Chappel&atitle=The+Trouble+with+Reader-response+Theory+when+Reading+Multicultural+Literature%3A+A+Critique+of+Dana+Fox%27s+and+Kathy%27s+Short%27s+Stories+Matter&title=The+Trouble+with+Reader-response+Theory+when+Reading+Multicultural+Literature%3A+A+Critique+of+Dana+Fox%27s+and+Kathy%27s+Short%27s+Stories+Matter&volume=31&date=2017&spage=81&issn=", "volume": "31" }, @@ -3847,7 +3847,7 @@ "itemID": 98, "itemType": "book", "notes": [ - "Includes bibliographical references and index.; ID: 01UAALMA51687551240003843" + "Includes bibliographical references and index.; ID: 01UA_ALMA51687551240003843" ], "publisher": "Nova Science Publishers, Inc", "title": "Activism, campaigning and political discourse on Twitter" @@ -4137,7 +4137,7 @@ "itemID": 106, "itemType": "journalArticle", "notes": [ - "ID: TN\u2091rudit1043124ar" + "ID: TN_erudit1043124ar" ], "publicationTitle": "M\u00e9moires du livre", "title": "Reviewers as readers with power", @@ -4377,7 +4377,7 @@ "itemID": 114, "itemType": "book", "notes": [ - "Description based upon print version of record.; Description based on online resource; title from PDF title page (ebrary, viewed September 17, 2014).; ID: 01UAALMA51544193970003843" + "Description based upon print version of record.; Description based on online resource; title from PDF title page (ebrary, viewed September 17, 2014).; ID: 01UA_ALMA51544193970003843" ], "publisher": "Newcastle upon Tyne, England : Cambridge Scholars Publishing", "title": "The review as art and communication" @@ -4407,7 +4407,7 @@ "itemID": 115, "itemType": "book", "notes": [ - "ID: TN\u2091lsevier\u209bdoi\u20810\u2081016B978\u2080\u20808\u208097086\u2088\u20810424\u2086" + "ID: TN_elsevier_sdoi_10_1016_B978_0_08_097086_8_10424_6" ], "publisher": "Elsevier Ltd", "title": "Cultural mediators and gatekeepers" @@ -4507,11 +4507,11 @@ "itemID": 117, "itemType": "journalArticle", "notes": [ - "ID: TNgale\u2092fa560927070" + "ID: TN_gale_ofa560927070" ], "pages": "893-908", "publicationTitle": "International journal of communication", - "title": "Distributed creativity on the internet: A theoretical foundation for online creative participation", + "title": "Distributed creativity on the internet: a theoretical foundation for online creative participation", "volume": "12" }, { @@ -4532,7 +4532,7 @@ "itemID": 118, "itemType": "journalArticle", "publicationTitle": "Understanding and Dismantling Privilege", - "title": "\"But I Just Don't See It!\": Making white superiority visible", + "title": "\"But I just don't see it!\": Making white superiority visible", "url": "https://www.wpcjournal.com/article/view/10829", "volume": "3" }, @@ -4554,7 +4554,7 @@ "itemID": 119, "itemType": "book", "notes": [ - "ID: TN\u209aq\u2091bookcentralEBC4001362" + "ID: TN_pq_ebook_centralEBC4001362" ], "publisher": "London: Palgrave Macmillan Limited", "title": "Media, margins and civic agency" @@ -4609,7 +4609,7 @@ "itemID": 121, "itemType": "journalArticle", "publicationTitle": "Understanding and Dismantling Privilege", - "title": "Considerations for using critical race theory and critical content analysis: A research note", + "title": "Considerations for using critical race theory and critical content analysis: a research note", "url": "https://www.wpcjournal.com/article/view/18198", "volume": "8" }, @@ -4646,7 +4646,7 @@ "tag": "Latinx critical race theory" } ], - "title": "Beyond mirrors and windows: A critical content analysis of latinx children's books" + "title": "Beyond mirrors and windows: a critical content analysis of latinx children's books" }, { "abstractNote": "This essay describes a fan-based pedagogy and the learning outcomes it produced among college students. We focus on a fandom assignment given in an \u2018Introduction to American Popular Culture\u2019 course in an American Studies department at a large state university. The assignment required students to conduct a study of a fan community of their choice. Students developed and administered questionnaires, conducted interviews, and wrote essays describing and interpreting their findings. They were required to include a reflective paragraph discussing what they learned about fandom as a result of their research. Using content analysis, we coded 135 essays from four sections of the class to identify how students spoke about what they learned. Students reported acquiring a deeper understanding of the role of fandom in constructing identity and community. In addition, many questioned and changed their preconceptions about fans and fan behavior. A number also noted that they acquired an appreciation for the theories and methods of academic fan studies. A majority of students indicated that studying fandom resulted in greater self- awareness and awareness of others. We make the case that learning and applying the methods of fan studies prepares students to engage the world outside the classroom with a more critical and reflective lens.", @@ -4718,7 +4718,7 @@ "itemID": 125, "itemType": "thesis", "notes": [ - "ID: TN\u209aroquest61563298" + "ID: TN_proquest61563298" ], "publisher": "State University of New York at Binghamton", "title": "Bookmarking racism: Challenging white privilege through children's literature and participatory action research in a suburban school" @@ -4745,7 +4745,7 @@ "itemID": 126, "itemType": "thesis", "notes": [ - "ID: TN\u209aroquest305112645" + "ID: TN_proquest305112645" ], "publisher": "ProQuest Dissertations Publishing", "title": "\u201cGentle doses of racism\u201d: Whiteness and children's literature" @@ -4775,7 +4775,7 @@ "itemID": 127, "itemType": "thesis", "notes": [ - "Source type: Dissertations &amp; Theses; Object type: Dissertation; Object type: Thesis; Copyright: Database copyright ProQuest LLC; ProQuest does not claim copyright in the individual underlying works.; DOCID: 4327328151; DocISBN: 978-0-438-88867-8; PCID: 112458482; PMID: 66569; DissertationNum: 10976903; PublisherXID: 10976903" + "Source type: Dissertations & Theses; Object type: Dissertation; Object type: Thesis; Copyright: Database copyright ProQuest LLC; ProQuest does not claim copyright in the individual underlying works.; DOCID: 4327328151; DocISBN: 978-0-438-88867-8; PCID: 112458482; PMID: 66569; DissertationNum: 10976903; PublisherXID: 10976903" ], "publisher": "The University of Alabama", "title": "Determining how preservice teachers select multicultural children's literature", @@ -4827,7 +4827,7 @@ "itemID": 129, "itemType": "journalArticle", "notes": [ - "ID: TN\u209aroquest1399381926" + "ID: TN_proquest1399381926" ], "title": "Work in progress : children's literature and childist criticism : towards an institutional re-consideration" }, @@ -5029,7 +5029,7 @@ "itemID": 134, "itemType": "book", "notes": [ - "Includes bibliographical references and index.; ID: 01UAALMA51626148750003843" + "Includes bibliographical references and index.; ID: 01UA_ALMA51626148750003843" ], "publisher": "Fordham University Press", "title": "Under representation : the racial regime of aesthetics" @@ -5051,7 +5051,7 @@ "itemID": 135, "itemType": "conferencePaper", "series": "ALISE 2019", - "title": "We need them but what are they?: A conceptual analysis of diverse books" + "title": "We need them but what are they?: a conceptual analysis of diverse books" }, { "abstractNote": "Using unobtrusive observations in comics stores and comics conventions as well as in-depth interviews with comics aficionados and store owners from five different countries this work examines the interpersonal communication patterns of comics aficionados, focusing on situations in which they meet and discuss their mutual interest. A repeating sequence of events had been identified and was subsequently dubbed as a \u2018recommendation ceremony\u2019. The analysis suggests that the \u2018recommendations ceremony\u2019 helps the people to fulfill their material and psychological needs as well as social functions that are crucial to the creation of the comics readers\u2019 sense of community.", @@ -5389,7 +5389,7 @@ ], "itemID": 146, "itemType": "webpage", - "title": "How barnes & noble\u2019s \u2018Diverse editions\u2019 of classic novels widely miss the mark", + "title": "How barnes & noble\u2019s \u2018diverse editions\u2019 of classic novels widely miss the mark", "url": "https://medium.com/@RodFaulkner/how-barnes-nobles-diverse-editions-of-classic-novels-widely-miss-the-mark-3f3d1bf8cbb3" }, { @@ -5583,7 +5583,7 @@ "lastName": "Amsden" } ], - "date": "2015-2", + "date": "2015-02", "extra": [ "Citation Key: Amsden2015" ], @@ -5654,7 +5654,7 @@ "itemID": 155, "itemType": "book", "notes": [ - "Includes bibliography and index.; ID: 01UAALMA21468543070003843" + "Includes bibliography and index.; ID: 01UA_ALMA21468543070003843" ], "publisher": "Basingstoke : Macmillan", "title": "Structuralism and the logic of dissent : Barthes, derrida, foucault, lacan" @@ -5677,7 +5677,7 @@ "itemID": 156, "itemType": "book", "notes": [ - "Translation of Le plaisir du texte.; ID: 01UAALMA21399200520003843" + "Translation of Le plaisir du texte.; ID: 01UA_ALMA21399200520003843" ], "publisher": "New York : Hill and Wang", "title": "The pleasure of the text" @@ -5729,7 +5729,7 @@ "lastName": "Bertin" } ], - "date": "2016-2", + "date": "2016-02", "extra": [ "Citation Key: Bertin2016" ], @@ -5836,7 +5836,7 @@ "itemID": 162, "itemType": "book", "notes": [ - "&quot;Bibliography of ethical criticism&quot;: p. 505-534.; Includes bibliographies and indexes.; ID: 01UAALMA21405686220003843" + ""Bibliography of ethical criticism": p. 505-534.; Includes bibliographies and indexes.; ID: 01UA_ALMA21405686220003843" ], "publisher": "Berkeley : University of California Press", "title": "The company we keep : an ethics of fiction" @@ -5949,7 +5949,7 @@ "itemID": 165, "itemType": "webpage", "publicationTitle": "The Open Book Blog", - "title": "How labeling books as \u201cDiverse\u201d reinforces white supremacy", + "title": "How labeling books as \u201cdiverse\u201d reinforces white supremacy", "url": "https://blog.leeandlow.com/2020/08/26/how-labeling-books-as-diverse-reinforces-white-supremacy/" }, { @@ -6121,7 +6121,7 @@ "itemID": 171, "itemType": "book", "notes": [ - "Includes bibliographical references and index.; ID: 01UAALMA51599529990003843" + "Includes bibliographical references and index.; ID: 01UA_ALMA51599529990003843" ], "publisher": "Princeton University Press", "title": "Under the cover : the creation, production, and reception of a novel" @@ -6142,7 +6142,7 @@ "itemID": 172, "itemType": "book", "notes": [ - "Includes bibliographical references (pages 253-260) and index.; ID: 01UAALMA51613900150003843" + "Includes bibliographical references (pages 253-260) and index.; ID: 01UA_ALMA51613900150003843" ], "publisher": "Routledge", "title": "Entranced by story : brain, tale and teller, from infancy to old age" @@ -6204,7 +6204,7 @@ "itemID": 174, "itemType": "book", "notes": [ - "Includes bibliographical references and index.; ID: 01UAALMA51612588030003843" + "Includes bibliographical references and index.; ID: 01UA_ALMA51612588030003843" ], "publisher": "Oakland, California : University of California Press", "title": "Seeing race again : countering colorblindness across the disciplines" @@ -6255,7 +6255,7 @@ "itemID": 176, "itemType": "book", "notes": [ - "Includes bibliographical references and index.; ID: 01UAALMA51534026010003843" + "Includes bibliographical references and index.; ID: 01UA_ALMA51534026010003843" ], "publisher": "New York : New York University Press", "title": "Critical race theory : an introduction" @@ -6277,7 +6277,7 @@ "itemID": 177, "itemType": "book", "notes": [ - "ID: TN\u209aroquest839302410" + "ID: TN_proquest839302410" ], "title": "Cultural boundaries and structural change - the extension of the high culture model to theater, opera, and the dance, 1900-1940" }, @@ -6300,7 +6300,7 @@ "itemType": "journalArticle", "pages": "219", "publicationTitle": "Childhood Education", - "title": "Evaluating children's books portraying native american and asian cultures", + "title": "Evaluating children's books portraying Native American and Asian cultures", "volume": "68" }, { @@ -6357,7 +6357,7 @@ "itemID": 181, "itemType": "webpage", "publicationTitle": "Global Comment", - "title": "We still need a female hero: Revisiting \"In Praise of Joanne Rowling's Hermione Granger series\"", + "title": "We still need a female hero: Revisiting \"in praise of joanne rowling's hermione granger series\"", "url": "https://globalcomment.com/we-still-need-a-female-hero-revisiting-in-praise-of-joanne-rowlings-hermione-granger-series/" }, { @@ -6401,7 +6401,7 @@ "itemID": 183, "itemType": "journalArticle", "publicationTitle": "Research on Diversity in Youth Literature", - "title": "Unsettling representations of identities: A critical review of diverse youth literature", + "title": "Unsettling representations of identities: a critical review of diverse youth literature", "url": "https://sophia.stkate.edu/rdyl/vol1/iss1/7", "volume": "1" }, @@ -6529,7 +6529,7 @@ "itemID": 187, "itemType": "book", "notes": [ - "Includes bibliographical references and index.; ID: 01UAALMA21418982950003843" + "Includes bibliographical references and index.; ID: 01UA_ALMA21418982950003843" ], "publisher": "Cambridge, Mass. : Harvard University Press", "title": "Is there a text in this class? : The authority of interpretive communities" @@ -6551,7 +6551,7 @@ "itemID": 188, "itemType": "book", "notes": [ - "Includes index.; ID: 01UAALMA21487439460003843" + "Includes index.; ID: 01UA_ALMA21487439460003843" ], "publisher": "Oxford : Clarendon Press; Oxford; New York : Oxford University Press", "title": "Professional correctness : literary studies and political change" @@ -6572,7 +6572,7 @@ ], "itemID": 189, "itemType": "webpage", - "title": "Survey of public participation in the arts 1982-2012 combined file [United states]" + "title": "Survey of public participation in the arts 1982-2012 combined file [united states]" }, { "citationKey": "Fox2003a", @@ -6611,7 +6611,7 @@ "itemID": 191, "itemType": "book", "notes": [ - "ID: 01UAALMA21443739850003843" + "ID: 01UA_ALMA21443739850003843" ], "publisher": "Bloomington, Indiana University Press", "title": "The educated imagination" @@ -6632,7 +6632,7 @@ "itemID": 192, "itemType": "thesis", "notes": [ - "Thesis\u2013Teachers College, Columbia University.; Bibliography: leaves 124-127.; ID: 01UAALMA21464657350003843" + "Thesis\u2013Teachers College, Columbia University.; Bibliography: leaves 124-127.; ID: 01UA_ALMA21464657350003843" ], "publisher": "Thesis\u2013Teachers College, Columbia University", "title": "An analytical study of the extent and nature of the reviewing of juvenile books in eight journals and newspapers : with special regard to their usefulness as selection aids for school libraries" @@ -6654,7 +6654,7 @@ "itemID": 193, "itemType": "book", "notes": [ - "Includes index.; Description based on online resource; title from PDF title page (ebrary, viewed June 30, 2014).; ID: 01UAALMA51689438440003843" + "Includes index.; Description based on online resource; title from PDF title page (ebrary, viewed June 30, 2014).; ID: 01UA_ALMA51689438440003843" ], "publisher": "New York, New York : Oxford University Press", "title": "The signifying monkey : a theory of African-American literary criticism" @@ -6687,7 +6687,7 @@ "itemID": 194, "itemType": "book", "notes": [ - "ID: TN\u209bpringer\u209b978-1-137-52346-4\u208378673" + "ID: TN_springer_s978-1-137-52346-4_378673" ], "publisher": "London: Palgrave Macmillan UK", "title": "New directions in popular fiction: Genre, distribution, reproduction" @@ -6709,7 +6709,7 @@ "itemID": 195, "itemType": "book", "notes": [ - "Includes bibliographical references and index.; ID: 01UAALMA51527060200003843" + "Includes bibliographical references and index.; ID: 01UA_ALMA51527060200003843" ], "publisher": "Palgrave Macmillan", "title": "Popular media cultures : fans, audiences and paratexts" @@ -6754,7 +6754,7 @@ "itemID": 197, "itemType": "book", "notes": [ - "Bibliography: p. 221-236.; ID: 01UAALMA21473665260003843" + "Bibliography: p. 221-236.; ID: 01UA_ALMA21473665260003843" ], "publisher": "Tallahassee : Florida State University Press", "title": "The politics of literary theory : an introduction to Marxist criticism" @@ -6768,7 +6768,7 @@ "lastName": "G\u00f3mez" } ], - "date": "2016-2", + "date": "2016-02", "itemID": 198, "itemType": "webpage", "publicationTitle": "School Library Journal", @@ -6832,7 +6832,7 @@ "itemID": 200, "itemType": "webpage", "publicationTitle": "Slate Magazine", - "title": "Kosoko jackson\u2019s a place for wolves book scandal suggests YA twitter is getting uglier.", + "title": "Kosoko Jackson\u2019s A Place for Wolves book scandal suggests YA Twitter is getting uglier.", "url": "https://slate.com/culture/2019/03/ya-book-scandal-kosoko-jackson-a-place-for-wolves-explained.html" }, { @@ -6862,7 +6862,7 @@ "itemID": 201, "itemType": "book", "notes": [ - "Includes bibliographical references (p. 223]-256) and index; ID: 01UAALMA21436653860003843" + "Includes bibliographical references (p. 223]-256) and index; ID: 01UA_ALMA21436653860003843" ], "publisher": "Stanford, Calif. : Stanford Business Books", "title": "The culture and commerce of publishing in the 21st century" @@ -6914,7 +6914,7 @@ "itemID": 203, "itemType": "book", "notes": [ - "ID: TN\u209bpringer\u209b978-1-137-53924-3\u208376154" + "ID: TN_springer_s978-1-137-53924-3_376154" ], "publisher": "London: Palgrave Macmillan UK", "title": "Constructing the adolescent reader in contemporary young adult fiction" @@ -6934,8 +6934,8 @@ }, { "creatorType": "author", - "firstName": "Mass. ). Center for the Study of Children's Literature Simmons College", - "lastName": "(Boston" + "firstName": "Mass. ). Center", + "lastName": "for the Study of Children's Literature Simmons College (Boston" } ], "date": "1987", @@ -6969,7 +6969,7 @@ "itemID": 205, "itemType": "book", "notes": [ - "Includes bibliographical references (p. ) and index; ID: 01UAALMA21446774300003843" + "Includes bibliographical references (p. ) and index; ID: 01UA_ALMA21446774300003843" ], "publisher": "Columbia : University of South Carolina Press", "title": "Vernacular voices : the rhetoric of publics and public spheres" @@ -7066,7 +7066,7 @@ "itemID": 208, "itemType": "book", "notes": [ - "Includes bibliographical references (p. 203]-223) and index.; ID: 01UAALMA21414708010003843" + "Includes bibliographical references (p. 203]-223) and index.; ID: 01UA_ALMA21414708010003843" ], "publisher": "London; New York : Routledge", "title": "Raymond Williams : literature, Marxism and cultural materialism" @@ -7087,7 +7087,7 @@ "itemID": 209, "itemType": "book", "notes": [ - "Includes bibliographical references (pages 166-198) and index.; ID: 01UAALMA71628890610003843" + "Includes bibliographical references (pages 166-198) and index.; ID: 01UA_ALMA71628890610003843" ], "publisher": "Cambridge; Malden, MA : Polity Press", "title": "Social media and everyday politics" @@ -7131,7 +7131,7 @@ "itemID": 211, "itemType": "book", "notes": [ - "Includes bibliographical references (p. 205-237) and index.; ID: 01UAALMA21397847860003843" + "Includes bibliographical references (p. 205-237) and index.; ID: 01UA_ALMA21397847860003843" ], "publisher": "Madison, Wis. : University of Wisconsin Press", "title": "Crossing borders : reception theory, poststructuralism, deconstruction" @@ -7171,7 +7171,7 @@ "itemID": 213, "itemType": "book", "notes": [ - "Bibliographic Level Mode of Issuance: Monograph; ID: 01UAALMA51562243040003843" + "Bibliographic Level Mode of Issuance: Monograph; ID: 01UA_ALMA51562243040003843" ], "publisher": "Place of publication not identified Routledge", "title": "Literature for children : contemporary criticism" @@ -7211,7 +7211,7 @@ "itemID": 215, "itemType": "book", "publisher": "Wilfrid Laurier University Press", - "title": "Why indigenous literatures matter", + "title": "Why Indigenous literatures matter", "url": "https://www.worldcat.org/title/why-indigenous-literatures-matter/oclc/1030372038&referer=brief_results" }, { @@ -7235,7 +7235,7 @@ "itemID": 216, "itemType": "book", "notes": [ - "Includes bibliographical references and index.; ID: 01UAALMA51531160860003843" + "Includes bibliographical references and index.; ID: 01UA_ALMA51531160860003843" ], "publisher": "Routledge", "title": "Prizing children's literature : the cultural politics of children's book awards" @@ -7257,7 +7257,7 @@ "itemID": 217, "itemType": "book", "notes": [ - "Includes bibliographical references (p. 201-207) and index; ID: 01UAALMA21432556890003843" + "Includes bibliographical references (p. 201-207) and index; ID: 01UA_ALMA21432556890003843" ], "publisher": "Athens, Ga; London : University of Georgia Press", "title": "What is a book?" @@ -7278,10 +7278,10 @@ "itemID": 218, "itemType": "book", "notes": [ - "Includes bibliographical references (pages 161-165) and index.; ID: 01UAALMA51531597190003843" + "Includes bibliographical references (pages 161-165) and index.; ID: 01UA_ALMA51531597190003843" ], "publisher": "Rowman & Littlefield Publishers", - "title": "Book banning in 21st-century America" + "title": "Book banning in 21st-century america" }, { "citationKey": "Krippendorff2013", @@ -7328,7 +7328,7 @@ "itemID": 220, "itemType": "book", "notes": [ - "ID: 01UAALMA21657422020003843" + "ID: 01UA_ALMA21657422020003843" ], "publisher": "Tucson, Arizona : University of Arizona Press", "title": "How Indians think: colonial indigenous intellectuals and the question of critical race... theory" @@ -7342,7 +7342,7 @@ "lastName": "Larrick" } ], - "date": "1965-9", + "date": "1965-09", "extra": [ "Citation Key: Larrick1965" ], @@ -7379,7 +7379,7 @@ "itemID": 222, "itemType": "book", "notes": [ - "Includes bibliographical references and index.; ID: 01UAALMA51535167080003843" + "Includes bibliographical references and index.; ID: 01UA_ALMA51535167080003843" ], "publisher": "Routledge", "title": "Teaching children's literature: it's critical!" @@ -7432,7 +7432,7 @@ "itemID": 224, "itemType": "book", "notes": [ - "Includes bibliographical references and indexes; ID: 01UAALMA21448218810003843" + "Includes bibliographical references and indexes; ID: 01UA_ALMA21448218810003843" ], "publisher": "Mahwah, N.J. : Lawrence Erlbaum Associates", "title": "Reframing sociocultural research on literacy : identity, agency, and power" @@ -7500,7 +7500,7 @@ "itemID": 227, "itemType": "book", "notes": [ - "Includes bibliographical references and indexes.; Includes bibliographical references and indexes.; ID: 01UAALMA21425312300003843" + "Includes bibliographical references and indexes.; Includes bibliographical references and indexes.; ID: 01UA_ALMA21425312300003843" ], "publisher": "Norwood, N.J. : Ablex Pub. Corp", "title": "Reader stance and literary understanding : exploring the theories, research, and practice" @@ -7533,7 +7533,7 @@ "itemID": 228, "itemType": "book", "notes": [ - "ID: TN\u209bpringer\u209b978-1-137-51446-2\u208375745" + "ID: TN_springer_s978-1-137-51446-2_375745" ], "publisher": "London: Palgrave Macmillan UK", "title": "Publishers, readers, and digital engagement" @@ -7641,7 +7641,7 @@ "itemType": "journalArticle", "pages": "201-212", "publicationTitle": "Children's Literature in Education", - "title": "\u201cI may be crackin\u2019, but um fackin\u2019\u201d: Racial humor in the watsons go to Birmingham\u20141963", + "title": "\u201cI may be crackin\u2019, but um fackin\u2019\u201d: Racial humor in the watsons go to birmingham\u20141963", "volume": "39" }, { @@ -7737,7 +7737,7 @@ "itemID": 236, "itemType": "book", "notes": [ - "Unlimited simultaneous users.; Description based on online resource; title from digital title page (viewed on September 14, 2015).; ID: 01UAALMA51528892310003843" + "Unlimited simultaneous users.; Description based on online resource; title from digital title page (viewed on September 14, 2015).; ID: 01UA_ALMA51528892310003843" ], "publisher": "Routledge", "title": "Freaks, geeks, and cool kids : teenagers in an era of consumerism, standardized tests, and social media" @@ -7774,8 +7774,8 @@ }, { "creatorType": "editor", - "firstName": "American Council of Learned", - "lastName": "Societies" + "firstName": "American Council", + "lastName": "of Learned Societies" } ], "date": "2005", @@ -7808,7 +7808,7 @@ "itemID": 239, "itemType": "book", "notes": [ - "Includes bibliographical references.; ID: 01UAALMA21473519800003843" + "Includes bibliographical references.; ID: 01UA_ALMA21473519800003843" ], "publisher": "Cambridge, Mass. : Harvard University Press", "title": "Playing in the dark : whiteness and the literary imagination" @@ -7916,7 +7916,7 @@ "lastName": "Myers" } ], - "date": "2014-3", + "date": "2014-03", "extra": [ "Citation Key: Myers2014" ], @@ -7936,7 +7936,7 @@ "lastName": "Myers" } ], - "date": "2014-3", + "date": "2014-03", "extra": [ "Citation Key: Myers2014" ], @@ -7964,7 +7964,7 @@ "itemID": 245, "itemType": "book", "notes": [ - "Includes bibliographical references (p. 153-159).; ID: 01UAALMA21435708190003843" + "Includes bibliographical references (p. 153-159).; ID: 01UA_ALMA21435708190003843" ], "publisher": "Stoke on Trent, Staffordshire, England : Trentham Books", "title": "Through whose eyes? : exploring racism : reader, text and context" @@ -8054,7 +8054,7 @@ "itemID": 248, "itemType": "book", "notes": [ - "ID: TN\u209bpringer\u209beries978-3-319-42893-2" + "ID: TN_springer_series978-3-319-42893-2" ], "publisher": "Springer International Publishing, Cham", "title": "Racism in contemporary african american children\u2019s and young adult literature" @@ -8083,7 +8083,7 @@ "itemID": 249, "itemType": "journalArticle", "notes": [ - "ID: TNcdijstor\u209arimary\u20841962273" + "ID: TN_cdi_jstor_primary_41962273" ], "pages": "242-245", "title": "Professional book reviews: Challenges and solutions: Children's literature in today's K\u201312 classrooms", @@ -8100,7 +8100,7 @@ "itemID": 250, "itemType": "webpage", "publicationTitle": "Goodreads", - "title": "Petra-X (somewhere in the caribbean, the united kingdom)\u2019s review of the secret life of groceries: The dark miracle of the american supermarket | goodreads", + "title": "Petra-x (somewhere in the caribbean, the united kingdom)\u2019s review of the secret life of groceries: The dark miracle of the american supermarket | goodreads", "url": "https://www.goodreads.com/review/show/3562346570?book_show_action=true&from_review_page=1" }, { @@ -8124,7 +8124,7 @@ "itemID": 251, "itemType": "book", "notes": [ - "Includes bibliographical references and index.; ID: 01UAALMA71628896100003843" + "Includes bibliographical references and index.; ID: 01UA_ALMA71628896100003843" ], "publisher": "London; New York : Routledge, Taylor & Francis Group", "title": "Media activism in the digital age" @@ -8146,7 +8146,7 @@ "itemID": 252, "itemType": "book", "notes": [ - "Includes bibliographical references (p. 180-182) and indexes.; ID: 01UAALMA21481249440003843" + "Includes bibliographical references (p. 180-182) and indexes.; ID: 01UA_ALMA21481249440003843" ], "publisher": "New York; London : Teachers College Press", "title": "Children's literature and the politics of equality" @@ -8231,7 +8231,7 @@ "itemID": 255, "itemType": "book", "notes": [ - "Includes bibliographical references and index.; ID: 01UAALMA51535611040003843" + "Includes bibliographical references and index.; ID: 01UA_ALMA51535611040003843" ], "publisher": "Bristol University Press", "title": "New media and public activism : neoliberalism, the state and radical protest in the public sphere" @@ -8284,7 +8284,7 @@ "itemID": 257, "itemType": "book", "notes": [ - "Includes bibliographical references and index.; ID: 01UAALMA21480090040003843" + "Includes bibliographical references and index.; ID: 01UA_ALMA21480090040003843" ], "publisher": "Bingley, UK : Emerald Publishing", "title": "Social movements and media" @@ -8306,7 +8306,7 @@ "itemID": 258, "itemType": "book", "notes": [ - "Bibliography: p. 155-171.; ID: 01UAALMA21414384950003843" + "Bibliography: p. 155-171.; ID: 01UA_ALMA21414384950003843" ], "publisher": "London : Macmillan", "title": "The case of Peter Pan, or, The impossibility of children's fiction" @@ -8362,7 +8362,7 @@ "itemID": 260, "itemType": "book", "notes": [ - "Includes bibliographical references and index.; ID: 01UAALMA51527034730003843" + "Includes bibliographical references and index.; ID: 01UA_ALMA51527034730003843" ], "publisher": "Lanham : Rowman and Littlefield", "title": "Scales on censorship : real life lessons from School Library Journal" @@ -8383,7 +8383,7 @@ "itemID": 261, "itemType": "book", "notes": [ - "Includes bibliographical references and index.; ID: 01UAALMA21424224870003843" + "Includes bibliographical references and index.; ID: 01UA_ALMA21424224870003843" ], "publisher": "Chicago : ALA Editions, an imprint of the American Library Association", "title": "Books under fire : a hit list of banned and challenged children's books" @@ -8422,7 +8422,7 @@ "itemID": 263, "itemType": "magazineArticle", "publicationTitle": "Indiewire", - "title": "Catherine hardwicke wanted \u2018Twilight\u2019 to have diverse cast | IndieWire", + "title": "Catherine hardwicke wanted \u2018twilight\u2019 to have diverse cast | IndieWire", "url": "https://www.indiewire.com/2018/10/catherine-hardwicke-twilight-diverse-cast-stephenie-meyer-refused-1202009330/" }, { @@ -8443,7 +8443,7 @@ "itemID": 264, "itemType": "book", "notes": [ - "Includes bibliographical references and index.; ID: 01UAALMA51545103730003843" + "Includes bibliographical references and index.; ID: 01UA_ALMA51545103730003843" ], "publisher": "New York : Columbia University Press", "title": "The late age of print: everyday book culture from consumerism to control" @@ -8476,7 +8476,7 @@ "itemID": 265, "itemType": "book", "notes": [ - "Includes bibliographical references.; ID: 01UAALMA51694714500003843" + "Includes bibliographical references.; ID: 01UA_ALMA51694714500003843" ], "publisher": "New York : Lothrop, Lee & Shepard Books", "title": "Celebrating children's books : essays on children's literature in honor of Zena Sutherland" @@ -8524,7 +8524,7 @@ "itemID": 267, "itemType": "journalArticle", "notes": [ - "ID: TNcdijstor\u209arimary\u20841962274" + "ID: TN_cdi_jstor_primary_41962274" ], "pages": "246-254", "title": "Children's literature reviews: Challenges to children's literature: Deskilling, censoring, and obsolescence", @@ -8552,7 +8552,7 @@ "itemID": 268, "itemType": "book", "notes": [ - "Includes bibliographical references and index.; ID: 01UAALMA21421025800003843" + "Includes bibliographical references and index.; ID: 01UA_ALMA21421025800003843" ], "publisher": "Oxford : Clarendon Press; Oxford; New York : Oxford University Press", "title": "Grub Street and the ivory tower : literary journalism and literary scholarship from Fielding to the Internet" @@ -8566,7 +8566,7 @@ "lastName": "Turner-Neal" } ], - "date": "2015-8", + "date": "2015-08", "itemID": 269, "itemType": "magazineArticle", "publicationTitle": "Country Roads Magazine", @@ -8701,7 +8701,7 @@ "itemID": 273, "itemType": "book", "notes": [ - "&quot;First published 1939.&quot;; ID: dedupmrg294186296" + ""First published 1939."; ID: dedupmrg294186296" ], "publisher": "London, The Hogarth Press", "title": "Reviewing" @@ -8723,7 +8723,7 @@ "itemID": 274, "itemType": "book", "notes": [ - "&quot;First published 1939.&quot;; ID: dedupmrg294186296" + ""First published 1939."; ID: dedupmrg294186296" ], "publisher": "London, The Hogarth Press", "title": "Reviewing" @@ -8745,27 +8745,27 @@ "itemID": 275, "itemType": "book", "notes": [ - "Includes bibliographical references (p. 191-203) and index; ID: 01UAALMA21444778790003843" + "Includes bibliographical references (p. 191-203) and index; ID: 01UA_ALMA21444778790003843" ], "publisher": "Routledge", "title": "Sticks and stones : the troublesome success of children's literature from Slovenly Peter to Harry Potter" }, { - "citationKey": "zotero-715", + "citationKey": "zotero-2097", "itemID": 276, "itemType": "film", "title": "Canceling | ContraPoints - YouTube", "url": "https://www.youtube.com/watch?v=OjMPJVmXxV8" }, { - "citationKey": "zotero-888", + "citationKey": "zotero-2270", "itemID": 277, "itemType": "webpage", "title": "Where is the diversity in publishing? The 2019 diversity baseline survey results | lee & low blog", "url": "https://blog.leeandlow.com/2020/01/28/2019diversitybaselinesurvey/" }, { - "citationKey": "zotero-917", + "citationKey": "zotero-2299", "itemID": 278, "itemType": "webpage", "title": "Dr. Jennifer on Twitter: \"6 months after leaving the TT job hunt, I still find myself thinking about the research studies/articles I wrote that never got in a journal. Can you still publish as a non-academic? Is anyone out there an \"independent scholar?\"\" / Twitter", @@ -8792,7 +8792,7 @@ "itemID": 279, "itemType": "journalArticle", "notes": [ - "ID: TNwj10.1002/asi.20399" + "ID: TN_wj10.1002/asi.20399" ], "pages": "1194-1207", "publicationTitle": "Journal of the American Society for Information Science and Technology", @@ -8833,7 +8833,7 @@ { "DOI": "10.1002/asi.23805", "ISSN": "2330-1635", - "abstractNote": "Although peer-review and citation counts are commonly used to help assess the scholarly impact of published research, informal reader feedback might also be exploited to help assess the wider impacts of books, such as their educational or cultural value. The social website Goodreads seems to be a reasonable source for this purpose because it includes a large number of book reviews and ratings by many users inside and outside of academia. To check this, Goodreads book metrics were compared with different book-based impact indicators for 15,928 academic books across broad fields. Goodreads engagements were numerous enough in the arts (85% of books had at least one), humanities (80%), and social sciences (67%) for use as a source of impact evidence. Low and moderate correlations between Goodreads book metrics and scholarly or non-scholarly indicators suggest that reader feedback in Goodreads reflects the many purposes of books rather than a single type of impact. Although Goodreads book metrics...", + "abstractNote": "Although peer-review and citation counts are commonly used to help assess the scholarly impact of published research, informal reader feedback might also be exploited to help assess the wider impacts of books, such as their educational or cultural value. The social website Goodreads seems to be a reasonable source for this purpose because it includes a large number of book reviews and ratings by many users inside and outside of academia. To check this, Goodreads book metrics were compared with different book-based impact indicators for 15,928 academic books across broad fields. Goodreads engagements were numerous enough in the arts (85", "citationKey": "Kousha2017", "creators": [ { @@ -8861,7 +8861,7 @@ "itemID": 281, "itemType": "journalArticle", "notes": [ - "ID: TN\u209aroquest1919396787" + "ID: TN_proquest1919396787" ], "pages": "2004-2016", "publicationTitle": "Journal of the Association for Information Science and Technology", @@ -8880,7 +8880,7 @@ "lastName": "Mora" } ], - "date": "2014-9", + "date": "2014-09", "extra": [ "Citation Key: Mora2014" ], @@ -8914,11 +8914,11 @@ "itemID": 283, "itemType": "journalArticle", "notes": [ - "ID: TN\u209aroquest1933246555" + "ID: TN_proquest1933246555" ], "pages": "221-224", "publicationTitle": "Journal of Adolescent & Adult Literacy", - "title": "Worlds of inclusion: Challenging reading, writing, and publishing science fiction\u2013 and Fantasy\u2010Based young adult literature", + "title": "Worlds of inclusion: Challenging reading, writing, and publishing science fiction\u2013 and fantasy\u2010based young adult literature", "volume": "61" }, { @@ -8941,7 +8941,7 @@ "itemID": 284, "itemType": "journalArticle", "notes": [ - "ID: TNwj10.1002/jaal.755" + "ID: TN_wj10.1002/jaal.755" ], "pages": "7-12", "publicationTitle": "Journal of Adolescent & Adult Literacy", @@ -9104,7 +9104,7 @@ "itemType": "journalArticle", "pages": "197-216", "publicationTitle": "Children's Literature in Education: An International Quarterly", - "title": "'not censorship but selection': Censorship and/as prizing", + "title": "'Not censorship but selection': Censorship and/as prizing", "url": "http://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&xri:pqil:res_ver=0.2&res_id=xri:ilcs-us&rft_id=xri:ilcs:rec:abell:R04216711", "volume": "40" }, @@ -9125,7 +9125,7 @@ "lastName": "Browne" } ], - "date": "2012-3", + "date": "2012-03", "extra": [ "Citation Key: Brooks2012", "Publisher: Springer Netherlands", @@ -9255,11 +9255,11 @@ "itemID": 289, "itemType": "journalArticle", "notes": [ - "ID: TNgale\u2092fa276354552" + "ID: TN_gale_ofa276354552" ], "pages": "365", "publicationTitle": "Early Childhood Education Journal", - "title": "\"I Don't See Color\": Challenging assumptions about discussing race with young children", + "title": "\"I don't see color\": Challenging assumptions about discussing race with young children", "volume": "39" }, { @@ -9284,7 +9284,7 @@ "itemID": 290, "itemType": "journalArticle", "notes": [ - "10.1017/s0140525x06289118\u00a1br/\u00bf\u00a1br/\u00bf10.1080/13613320308200\u00a1br/\u00bf\u00a1br/\u00bf10.1080/08878739909555215\u00a1br/\u00bf\u00a1br/\u00bf10.2307/1289308\u00a1br/\u00bf\u00a1br/\u00bf10.1177/0042085900345003\u00a1br/\u00bf\u00a1br/\u00bf10.1023/a:1022813119743\u00a1br/\u00bf\u00a1br/\u00bf1573-1960\u00a1br/\u00bf\u00a1br/\u00bf10.1080/00405849209543550\u00a1br/\u00bf\u00a1br/\u00bf10.1080/00405849609543706\u00a1br/\u00bf\u00a1br/\u00bf10.17763/haer.59.3.058342114k266250\u00a1br/\u00bf\u00a1br/\u00bf10.17763/haer.72.1.c11617526l7k46v6\u00a1br/\u00bf\u00a1br/\u00bf10.1177/0013124507301577\u00a1br/\u00bf\u00a1br/\u00bf10.1177/002205748516700204\u00a1br/\u00bf\u00a1br/\u00bf10.17763/haer.63.3.h423221226v18648\u00a1br/\u00bf\u00a1br/\u00bf10.1207/s15327930pje7201\u2084\u00a1br/\u00bf\u00a1br/\u00bf10.3102/0013189x032003016\u00a1br/\u00bf\u00a1br/\u00bf10.1111/j.1469-5812.2006.00175.x\u00a1br/\u00bf\u00a1br/\u00bf10.1177/0022487100051003007\u00a1br/\u00bf\u00a1br/\u00bf10.1080/0022027041000229396\u00a1br/\u00bf\u00a1br/\u00bf10.4324/9780203420270\u00a1br/\u00bf\u00a1br/\u00bf10.2307/2295605" + "10.1017/s0140525x06289118\u00a1br/\u00bf\u00a1br/\u00bf10.1080/13613320308200\u00a1br/\u00bf\u00a1br/\u00bf10.1080/08878739909555215\u00a1br/\u00bf\u00a1br/\u00bf10.2307/1289308\u00a1br/\u00bf\u00a1br/\u00bf10.1177/0042085900345003\u00a1br/\u00bf\u00a1br/\u00bf10.1023/a:1022813119743\u00a1br/\u00bf\u00a1br/\u00bf1573-1960\u00a1br/\u00bf\u00a1br/\u00bf10.1080/00405849209543550\u00a1br/\u00bf\u00a1br/\u00bf10.1080/00405849609543706\u00a1br/\u00bf\u00a1br/\u00bf10.17763/haer.59.3.058342114k266250\u00a1br/\u00bf\u00a1br/\u00bf10.17763/haer.72.1.c11617526l7k46v6\u00a1br/\u00bf\u00a1br/\u00bf10.1177/0013124507301577\u00a1br/\u00bf\u00a1br/\u00bf10.1177/002205748516700204\u00a1br/\u00bf\u00a1br/\u00bf10.17763/haer.63.3.h423221226v18648\u00a1br/\u00bf\u00a1br/\u00bf10.1207/s15327930pje7201_4\u00a1br/\u00bf\u00a1br/\u00bf10.3102/0013189x032003016\u00a1br/\u00bf\u00a1br/\u00bf10.1111/j.1469-5812.2006.00175.x\u00a1br/\u00bf\u00a1br/\u00bf10.1177/0022487100051003007\u00a1br/\u00bf\u00a1br/\u00bf10.1080/0022027041000229396\u00a1br/\u00bf\u00a1br/\u00bf10.4324/9780203420270\u00a1br/\u00bf\u00a1br/\u00bf10.2307/2295605" ], "pages": "371-385", "publicationTitle": "The Urban review", @@ -9353,7 +9353,7 @@ "tag": "Teachers" } ], - "title": "The oppressor within: A counterstory of race, repression, and teacher reflection", + "title": "The oppressor within: a counterstory of race, repression, and teacher reflection", "volume": "40" }, { @@ -9376,7 +9376,7 @@ "itemID": 291, "itemType": "journalArticle", "notes": [ - "ID: TN\u209bpringerjour10.1007/s12109-006-0012-6" + "ID: TN_springer_jour10.1007/s12109-006-0012-6" ], "pages": "3-26", "publicationTitle": "Publishing Research Quarterly", @@ -9395,7 +9395,7 @@ "lastName": "Johnson" } ], - "date": "2017-6", + "date": "2017-06", "extra": [ "Citation Key: Johnson2017", "Publisher: Springer Nature B.V", @@ -9422,7 +9422,7 @@ "lastName": "Laing" } ], - "date": "2017-9", + "date": "2017-09", "extra": [ "Citation Key: Laing2017", "Publisher: Springer US", @@ -9473,7 +9473,7 @@ "itemID": 294, "itemType": "journalArticle", "notes": [ - "ID: TN\u209bpringerjour10.1007/s12109-018-9573-4" + "ID: TN_springer_jour10.1007/s12109-018-9573-4" ], "pages": "207-217", "publicationTitle": "Publishing Research Quarterly", @@ -9501,7 +9501,7 @@ "itemID": 295, "itemType": "journalArticle", "notes": [ - "ID: TN\u209aroquest2280931610" + "ID: TN_proquest2280931610" ], "pages": "704-709", "publicationTitle": "Publishing Research Quarterly", @@ -9640,7 +9640,7 @@ "itemID": 297, "itemType": "journalArticle", "notes": [ - "ID: TN\u2091lsevier\u209bdoi\u20810\u2081016jchb\u2082007\u20808\u208004" + "ID: TN_elsevier_sdoi_10_1016_j_chb_2007_08_004" ], "pages": "1977-1992", "publicationTitle": "Computers in Human Behavior", @@ -9677,7 +9677,7 @@ "itemID": 298, "itemType": "journalArticle", "notes": [ - "ID: TNgale\u2092fa484925407" + "ID: TN_gale_ofa484925407" ], "pages": "82", "publicationTitle": "International Journal of Child-Computer Interaction", @@ -9719,7 +9719,7 @@ "itemID": 299, "itemType": "journalArticle", "notes": [ - "ID: TN\u2091lsevier\u209bdoi\u20810\u2081016jjbusres\u2082013\u20803\u208033" + "ID: TN_elsevier_sdoi_10_1016_j_jbusres_2013_03_033" ], "pages": "464-470", "publicationTitle": "Journal of Business Research", @@ -9729,7 +9729,7 @@ { "DOI": "10.1016/j.jesp.2019.04.008", "ISSN": "0022-1031", - "abstractNote": "In this research we examine how normative expressions of prejudice shape university communities. Across four studies, we examine the prevalence of a former university mascot depicting harmful stereotypes about Native Americans and how exposure to that mascot influences people's attitudes and behaviors. In Study 1, images of the mascot persist on \u00bf10% of university apparel worn by students, in 50% of campus spaces, and in 5% of images searched online. Surveying students on this campus, we find that students with lower (higher) reported explicit prejudice also tended to have lower (higher) belonging at the university (Study 2). In two final experimental studies (N\u202f=\u202f683), when compared to stereotype free university advertisements exposure to the stereotypic mascot reduced donations to the university by 5.5%, and in particular, among people low versus high in explicit prejudice (Studies 3 and 4). Overall, these findings suggest that institutional norms play an important role in expressions of prejudice and experiences of belonging. \u2022A mascot depicting Native American stereotypes is prevalent at one university campus.\u2022Exposure to the stereotypic mascot reduced university donations by 5.5%.\u2022People low in explicit prejudice report lower belonging when exposed to the mascot.", + "abstractNote": "In this research we examine how normative expressions of prejudice shape university communities. Across four studies, we examine the prevalence of a former university mascot depicting harmful stereotypes about Native Americans and how exposure to that mascot influences people's attitudes and behaviors. In Study 1, images of the mascot persist on \u00bf10\u2022A mascot depicting Native American stereotypes is prevalent at one university campus.\u2022Exposure to the stereotypic mascot reduced university donations by 5.5", "citationKey": "Kraus2019", "creators": [ { @@ -9825,7 +9825,7 @@ "itemID": 301, "itemType": "journalArticle", "notes": [ - "ID: TN\u2091lsevier\u209bdoi\u20810\u2081016j\u209aoetic\u2082008\u20802\u208004" + "ID: TN_elsevier_sdoi_10_1016_j_poetic_2008_02_004" ], "pages": "148-165", "publicationTitle": "Poetics", @@ -9852,7 +9852,7 @@ "itemID": 302, "itemType": "journalArticle", "notes": [ - "ID: TN\u2091lsevier\u209bdoi\u20810\u2081016j\u209aoetic\u2082010\u20811\u208003" + "ID: TN_elsevier_sdoi_10_1016_j_poetic_2010_11_003" ], "pages": "64-84", "publicationTitle": "Poetics", @@ -9888,7 +9888,7 @@ "itemID": 303, "itemType": "journalArticle", "notes": [ - "ID: TN\u2091lsevier\u209bdoi\u20810\u2081016j\u209aoetic\u2082015\u20809\u208001" + "ID: TN_elsevier_sdoi_10_1016_j_poetic_2015_09_001" ], "pages": "25-37", "publicationTitle": "Poetics", @@ -9957,7 +9957,7 @@ "lastName": "Fox" } ], - "date": "2003-2", + "date": "2003-02", "extra": [ "Citation Key: Fox2003", "Publisher: Elsevier Ltd" @@ -9990,7 +9990,7 @@ "itemID": 306, "itemType": "journalArticle", "notes": [ - "ID: TN\u2091lsevier\u209bdoi\u20810\u2081016S0304\u208422X\u20803\u20800037\u2088" + "ID: TN_elsevier_sdoi_10_1016_S0304_422X_03_00037_8" ], "pages": "259-281", "publicationTitle": "Poetics", @@ -10042,7 +10042,7 @@ "itemID": 308, "itemType": "journalArticle", "notes": [ - "ID: TN\u2091lsevier\u209bdoi\u20810\u2081016S0304\u208422X\u20897\u20800018\u2081" + "ID: TN_elsevier_sdoi_10_1016_S0304_422X_97_00018_1" ], "pages": "265-280", "publicationTitle": "Poetics", @@ -10149,7 +10149,7 @@ "itemID": 310, "itemType": "journalArticle", "notes": [ - "ID: TN\u209bpringerjour1010081830778" + "ID: TN_springer_jour1010081830778" ], "pages": "387-409", "publicationTitle": "Continental Philosophy Review", @@ -10217,7 +10217,7 @@ "itemID": 312, "itemType": "journalArticle", "notes": [ - "10.1207/s15430421tip4203\u2085\u00a1br/\u00bf\u00a1br/\u00bf10.1111/j.1469-5812.2004.00058.x\u00a1br/\u00bf\u00a1br/\u00bf10.1007/s11256-005-0009-z\u00a1br/\u00bf\u00a1br/\u00bf10.1177/107780040200800106\u00a1br/\u00bf\u00a1br/\u00bf10.1086/443894\u00a1br/\u00bf\u00a1br/\u00bf10.1111/j.1741-5446.2001.00467.x\u00a1br/\u00bf\u00a1br/\u00bf10.4324/9780203880371\u00a1br/\u00bf\u00a1br/\u00bf10.1177/0022487101052002002\u00a1br/\u00bf\u00a1br/\u00bf10.2307/797566\u00a1br/\u00bf\u00a1br/\u00bf10.1177/002248718904000202\u00a1br/\u00bf\u00a1br/\u00bf10.1080/713845282\u00a1br/\u00bf\u00a1br/\u00bf1532-6993\u00a1br/\u00bf\u00a1br/\u00bf10.1080/1361332052000340971\u00a1br/\u00bf\u00a1br/\u00bf10.1080/01596300701801278\u00a1br/\u00bf\u00a1br/\u00bf10.17763/haer.79.2.nu3436017730384w\u00a1br/\u00bf\u00a1br/\u00bf10.1080/13613324.2012.674027\u00a1br/\u00bf\u00a1br/\u00bf10.1080/10665684.2011.539472\u00a1br/\u00bf\u00a1br/\u00bf10.1002/j.1556-6678.2008.tb00517.x\u00a1br/\u00bf\u00a1br/\u00bf10.1080/095183998236863\u00a1br/\u00bf\u00a1br/\u00bf10.2307/1228886\u00a1br/\u00bf\u00a1br/\u00bf10.1177/0042085999335004\u00a1br/\u00bf\u00a1br/\u00bf10.1177/1532708608321504\u00a1br/\u00bf\u00a1br/\u00bf10.1080/13613320902995491\u00a1br/\u00bf\u00a1br/\u00bf10.2307/800672\u00a1br/\u00bf\u00a1br/\u00bf10.1080/10665680490422089\u00a1br/\u00bf\u00a1br/\u00bf10.1207/s15327892mcp0504\u2082\u00a1br/\u00bf\u00a1br/\u00bf10.1080/0951839032000033509\u00a1br/\u00bf\u00a1br/\u00bf10.1080/00131857.2014.989952\u00a1br/\u00bf\u00a1br/\u00bf10.1177/1468796806068323\u00a1br/\u00bf\u00a1br/\u00bf10.3102/0013189x021002020\u00a1br/\u00bf\u00a1br/\u00bf10.3102/00028312043004701\u00a1br/\u00bf\u00a1br/\u00bf10.1080/13613320600807550\u00a1br/\u00bf\u00a1br/\u00bf10.1177/0022487195046004005" + "10.1207/s15430421tip4203_5\u00a1br/\u00bf\u00a1br/\u00bf10.1111/j.1469-5812.2004.00058.x\u00a1br/\u00bf\u00a1br/\u00bf10.1007/s11256-005-0009-z\u00a1br/\u00bf\u00a1br/\u00bf10.1177/107780040200800106\u00a1br/\u00bf\u00a1br/\u00bf10.1086/443894\u00a1br/\u00bf\u00a1br/\u00bf10.1111/j.1741-5446.2001.00467.x\u00a1br/\u00bf\u00a1br/\u00bf10.4324/9780203880371\u00a1br/\u00bf\u00a1br/\u00bf10.1177/0022487101052002002\u00a1br/\u00bf\u00a1br/\u00bf10.2307/797566\u00a1br/\u00bf\u00a1br/\u00bf10.1177/002248718904000202\u00a1br/\u00bf\u00a1br/\u00bf10.1080/713845282\u00a1br/\u00bf\u00a1br/\u00bf1532-6993\u00a1br/\u00bf\u00a1br/\u00bf10.1080/1361332052000340971\u00a1br/\u00bf\u00a1br/\u00bf10.1080/01596300701801278\u00a1br/\u00bf\u00a1br/\u00bf10.17763/haer.79.2.nu3436017730384w\u00a1br/\u00bf\u00a1br/\u00bf10.1080/13613324.2012.674027\u00a1br/\u00bf\u00a1br/\u00bf10.1080/10665684.2011.539472\u00a1br/\u00bf\u00a1br/\u00bf10.1002/j.1556-6678.2008.tb00517.x\u00a1br/\u00bf\u00a1br/\u00bf10.1080/095183998236863\u00a1br/\u00bf\u00a1br/\u00bf10.2307/1228886\u00a1br/\u00bf\u00a1br/\u00bf10.1177/0042085999335004\u00a1br/\u00bf\u00a1br/\u00bf10.1177/1532708608321504\u00a1br/\u00bf\u00a1br/\u00bf10.1080/13613320902995491\u00a1br/\u00bf\u00a1br/\u00bf10.2307/800672\u00a1br/\u00bf\u00a1br/\u00bf10.1080/10665680490422089\u00a1br/\u00bf\u00a1br/\u00bf10.1207/s15327892mcp0504_2\u00a1br/\u00bf\u00a1br/\u00bf10.1080/0951839032000033509\u00a1br/\u00bf\u00a1br/\u00bf10.1080/00131857.2014.989952\u00a1br/\u00bf\u00a1br/\u00bf10.1177/1468796806068323\u00a1br/\u00bf\u00a1br/\u00bf10.3102/0013189x021002020\u00a1br/\u00bf\u00a1br/\u00bf10.3102/00028312043004701\u00a1br/\u00bf\u00a1br/\u00bf10.1080/13613320600807550\u00a1br/\u00bf\u00a1br/\u00bf10.1177/0022487195046004005" ], "pages": "1-19", "publicationTitle": "Educational studies (Ames)", @@ -10652,7 +10652,7 @@ "lastName": "Wharton" } ], - "date": "2018-9", + "date": "2018-09", "extra": [ "Citation Key: Phruksachart2018", "Edition: Rev. ed", @@ -10663,7 +10663,7 @@ "itemID": 316, "itemType": "journalArticle", "notes": [ - "\u00a1b\u00bfFrom Duplicate 1 (\u00a1i\u00bfFrom cover to cover : evaluating and reviewing children's books\u00a1/i\u00bf - Horning, Kathleen T)\u00a1br/\u00bf\u00a1/b\u00bf\u00a1br/\u00bfIncludes bibliographical references (pages 181-212) and index; ID: 01UAALMA21452464220003843\u00a1br/\u00bf\u00a1br/\u00bf\u00a1b\u00bfFrom Duplicate 2 (\u00a1i\u00bfThe review as art and communication\u00a1/i\u00bf - Skidmore, Joey)\u00a1br/\u00bf\u00a1/b\u00bf\u00a1br/\u00bfDescription based upon print version of record.; Description based on online resource; title from PDF title page (ebrary, viewed September 17, 2014).; ID: 01UAALMA51544193970003843\u00a1br/\u00bf\u00a1br/\u00bf\u00a1b\u00bfFrom Duplicate 5 (\u00a1i\u00bfEditorial: Critical literacy revisited: Writing as critique\u00a1/i\u00bf - Janks, Hilary; Vasquez, Vivian)\u00a1br/\u00bf\u00a1/b\u00bf\u00a1br/\u00bfSource type: Scholarly Journals; Object type: Editorial; Object type: Commentary; Copyright: Copyright University of Waikato, Department of English May 2011; DOCID: 2602001211; PCID: 67792272; PMID: 155333; ProvJournalCode: NGTC; PublisherXID: ICANGTCNGTCv10n1\u20820110501541\u00a1br/\u00bf\u00a1br/\u00bf\u00a1b\u00bfFrom Duplicate 8 (\u00a1i\u00bfThe culture and commerce of publishing in the 21st century\u00a1/i\u00bf - Greco, Albert N)\u00a1br/\u00bf\u00a1/b\u00bf\u00a1br/\u00bfIncludes bibliographical references (p. 223]-256) and index; ID: 01UAALMA21436653860003843\u00a1br/\u00bf\u00a1br/\u00bf\u00a1b\u00bfFrom Duplicate 9 (\u00a1i\u00bfQuality and influence in literary work: evaluating the \u2018educated imagination\u2019\u00a1/i\u00bf - Zuccala, Alesia)\u00a1br/\u00bf\u00a1/b\u00bf\u00a1br/\u00bfID: TN\u2092xford10.1093/reseval/rvs017\u00a1br/\u00bf\u00a1br/\u00bf\u00a1b\u00bfFrom Duplicate 10 (\u00a1i\u00bfProfiling review writers in the library periodical literature\u00a1/i\u00bf - Buttlar, Lois J)\u00a1br/\u00bf\u00a1/b\u00bf\u00a1br/\u00bfID: TNgale\u2092fa9375756\u00a1br/\u00bf\u00a1br/\u00bf\u00a1b\u00bfFrom Duplicate 11 (\u00a1i\u00bfHerd behavior in purchasing books online\u00a1/i\u00bf - Chen, Yi-Fen)\u00a1br/\u00bf\u00a1/b\u00bf\u00a1br/\u00bfID: TN\u2091lsevier\u209bdoi\u20810\u2081016jchb\u2082007\u20808\u208004\u00a1br/\u00bf\u00a1br/\u00bf\u00a1b\u00bfFrom Duplicate 12 (\u00a1i\u00bfReading and writing book reviews across the disciplines\u00a1/i\u00bf - Hartley, James)\u00a1br/\u00bf\u00a1/b\u00bf\u00a1br/\u00bfID: TNwj10.1002/asi.20399\u00a1br/\u00bf\u00a1br/\u00bf\u00a1b\u00bfFrom Duplicate 13 (\u00a1i\u00bfMotives for and consequences of reading internet book reviews\u00a1/i\u00bf - Kuei Huang, Yun; Yang, Wen I)\u00a1br/\u00bf\u00a1/b\u00bf\u00a1br/\u00bfID: TN\u2091merald\u209b10.1108/02640470810851770\u00a1br/\u00bf\u00a1br/\u00bf\u00a1b\u00bfFrom Duplicate 14 (\u00a1i\u00bfNegro Character As Seen by White Authors\u00a1/i\u00bf - Brown, Sterling A)\u00a1br/\u00bf\u00a1/b\u00bf\u00a1br/\u00bf25\u00a1br/\u00bf\u00a1br/\u00bf\u00a1b\u00bfFrom Duplicate 15 (\u00a1i\u00bfBlurred Of Mouth\u00a1/i\u00bf - Chia, Jessica)\u00a1br/\u00bf\u00a1/b\u00bf\u00a1br/\u00bfID: TN\u209aroquest2280498596\u00a1br/\u00bf\u00a1br/\u00bf\u00a1b\u00bfFrom Duplicate 17 (\u00a1i\u00bfGoodreads reviews to assess the wider impacts of books\u00a1/i\u00bf - Kousha, Kayvan; Thelwall, Mike; Abdoli, Mahshid)\u00a1br/\u00bf\u00a1/b\u00bf\u00a1br/\u00bfID: TN\u209aroquest1919396787\u00a1br/\u00bf\u00a1br/\u00bf\u00a1b\u00bfFrom Duplicate 18 (\u00a1i\u00bfFinding Good Reads on Goodreads: Readers Take RA into Their Own Hands\u00a1/i\u00bf - Naik, Yesha)\u00a1br/\u00bf\u00a1/b\u00bf\u00a1br/\u00bfID: TN\u209aroquest1021835587\u00a1br/\u00bf\u00a1br/\u00bf\u00a1b\u00bfFrom Duplicate 19 (\u00a1i\u00bfReading Online: Updating the State of the Discipline\u00a1/i\u00bf - Murray, Simone)\u00a1br/\u00bf\u00a1/b\u00bf\u00a1br/\u00bfID: TN\u209aroquest2159297257\u00a1br/\u00bf\u00a1br/\u00bf\u00a1b\u00bfFrom Duplicate 20 (\u00a1i\u00bfThe company we keep : an ethics of fiction\u00a1/i\u00bf - Booth, Wayne C)\u00a1br/\u00bf\u00a1/b\u00bf\u00a1br/\u00bf&quot;Bibliography of ethical criticism&quot;: p. 505-534.; Includes bibliographies and indexes.; ID: 01UAALMA21405686220003843\u00a1br/\u00bf\u00a1br/\u00bf\u00a1b\u00bfFrom Duplicate 23 (\u00a1i\u00bfPublishers, Readers, and Digital Engagement\u00a1/i\u00bf - Martens, Marianne)\u00a1br/\u00bf\u00a1/b\u00bf\u00a1br/\u00bfID: TN\u209bpringer\u209b978-1-137-51446-2\u208375745\u00a1br/\u00bf\u00a1br/\u00bf\u00a1b\u00bfFrom Duplicate 24 (\u00a1i\u00bfSocial responsibility in librarianship : essays on equality\u00a1/i\u00bf - MacCann, Donnarae)\u00a1br/\u00bf\u00a1/b\u00bf\u00a1br/\u00bfIncludes bibliographical references.; ID: dedupmrg80437634\u00a1br/\u00bf\u00a1br/\u00bf\u00a1b\u00bfFrom Duplicate 26 (\u00a1i\u00bfEssaying the Review\u00a1/i\u00bf - Paul, Lissa)\u00a1br/\u00bf\u00a1/b\u00bf\u00a1br/\u00bfID: TN\u209aroquest1312023762\u00a1br/\u00bf\u00a1br/\u00bf\u00a1b\u00bfFrom Duplicate 27 (\u00a1i\u00bfGrowing Number of Bloggers See Their Work as Journalism\u00a1/i\u00bf - Ji, Hong; Sheehy, Michael)\u00a1br/\u00bf\u00a1/b\u00bf\u00a1br/\u00bfID: TN\u209aroquest820481867\u00a1br/\u00bf\u00a1br/\u00bf\u00a1b\u00bfFrom Duplicate 28 (\u00a1i\u00bfThe pleasure of the text\u00a1/i\u00bf - Barthes, Roland)\u00a1br/\u00bf\u00a1/b\u00bf\u00a1br/\u00bfTranslation of Le plaisir du texte.; ID: 01UAALMA21399200520003843\u00a1br/\u00bf\u00a1br/\u00bf\u00a1b\u00bfFrom Duplicate 29 (\u00a1i\u00bfA Reviewer's Story\u00a1/i\u00bf - Hearne, Betsy)\u00a1br/\u00bf\u00a1/b\u00bf\u00a1br/\u00bfID: TNucpj10.1086/601047\u00a1br/\u00bf\u00a1br/\u00bf\u00a1b\u00bfFrom Duplicate 30 (\u00a1i\u00bfUnderstanding Cultural Omnivorousness: Or, the Myth of the Cultural Omnivore\u00a1/i\u00bf - Warde, Alan; Wright, David; Gayo-Cal, Modesto)\u00a1br/\u00bf\u00a1/b\u00bf\u00a1br/\u00bfID: TN\u209bage\u209b10\u2081177\u2081749975507078185\u00a1br/\u00bf\u00a1br/\u00bf\u00a1b\u00bfFrom Duplicate 31 (\u00a1i\u00bfCultural capital and the literary field\u00a1/i\u00bf - Wright, David)\u00a1br/\u00bf\u00a1/b\u00bf\u00a1br/\u00bfID: TNinformaworld\u209b10\u2081080\u20809548960600712934" + "\u00a1b\u00bfFrom Duplicate 1 (\u00a1i\u00bfFrom cover to cover : evaluating and reviewing children's books\u00a1/i\u00bf - Horning, Kathleen T)\u00a1br/\u00bf\u00a1/b\u00bf\u00a1br/\u00bfIncludes bibliographical references (pages 181-212) and index; ID: 01UA_ALMA21452464220003843\u00a1br/\u00bf\u00a1br/\u00bf\u00a1b\u00bfFrom Duplicate 2 (\u00a1i\u00bfThe review as art and communication\u00a1/i\u00bf - Skidmore, Joey)\u00a1br/\u00bf\u00a1/b\u00bf\u00a1br/\u00bfDescription based upon print version of record.; Description based on online resource; title from PDF title page (ebrary, viewed September 17, 2014).; ID: 01UA_ALMA51544193970003843\u00a1br/\u00bf\u00a1br/\u00bf\u00a1b\u00bfFrom Duplicate 5 (\u00a1i\u00bfEditorial: Critical literacy revisited: Writing as critique\u00a1/i\u00bf - Janks, Hilary; Vasquez, Vivian)\u00a1br/\u00bf\u00a1/b\u00bf\u00a1br/\u00bfSource type: Scholarly Journals; Object type: Editorial; Object type: Commentary; Copyright: Copyright University of Waikato, Department of English May 2011; DOCID: 2602001211; PCID: 67792272; PMID: 155333; ProvJournalCode: NGTC; PublisherXID: ICANGTC_NGTC_v10n1_20110501541\u00a1br/\u00bf\u00a1br/\u00bf\u00a1b\u00bfFrom Duplicate 8 (\u00a1i\u00bfThe culture and commerce of publishing in the 21st century\u00a1/i\u00bf - Greco, Albert N)\u00a1br/\u00bf\u00a1/b\u00bf\u00a1br/\u00bfIncludes bibliographical references (p. 223]-256) and index; ID: 01UA_ALMA21436653860003843\u00a1br/\u00bf\u00a1br/\u00bf\u00a1b\u00bfFrom Duplicate 9 (\u00a1i\u00bfQuality and influence in literary work: evaluating the \u2018educated imagination\u2019\u00a1/i\u00bf - Zuccala, Alesia)\u00a1br/\u00bf\u00a1/b\u00bf\u00a1br/\u00bfID: TN_oxford10.1093/reseval/rvs017\u00a1br/\u00bf\u00a1br/\u00bf\u00a1b\u00bfFrom Duplicate 10 (\u00a1i\u00bfProfiling review writers in the library periodical literature\u00a1/i\u00bf - Buttlar, Lois J)\u00a1br/\u00bf\u00a1/b\u00bf\u00a1br/\u00bfID: TN_gale_ofa9375756\u00a1br/\u00bf\u00a1br/\u00bf\u00a1b\u00bfFrom Duplicate 11 (\u00a1i\u00bfHerd behavior in purchasing books online\u00a1/i\u00bf - Chen, Yi-Fen)\u00a1br/\u00bf\u00a1/b\u00bf\u00a1br/\u00bfID: TN_elsevier_sdoi_10_1016_j_chb_2007_08_004\u00a1br/\u00bf\u00a1br/\u00bf\u00a1b\u00bfFrom Duplicate 12 (\u00a1i\u00bfReading and writing book reviews across the disciplines\u00a1/i\u00bf - Hartley, James)\u00a1br/\u00bf\u00a1/b\u00bf\u00a1br/\u00bfID: TN_wj10.1002/asi.20399\u00a1br/\u00bf\u00a1br/\u00bf\u00a1b\u00bfFrom Duplicate 13 (\u00a1i\u00bfMotives for and consequences of reading internet book reviews\u00a1/i\u00bf - Kuei Huang, Yun; Yang, Wen I)\u00a1br/\u00bf\u00a1/b\u00bf\u00a1br/\u00bfID: TN_emerald_s10.1108/02640470810851770\u00a1br/\u00bf\u00a1br/\u00bf\u00a1b\u00bfFrom Duplicate 14 (\u00a1i\u00bfNegro Character As Seen by White Authors\u00a1/i\u00bf - Brown, Sterling A)\u00a1br/\u00bf\u00a1/b\u00bf\u00a1br/\u00bf25\u00a1br/\u00bf\u00a1br/\u00bf\u00a1b\u00bfFrom Duplicate 15 (\u00a1i\u00bfBlurred Of Mouth\u00a1/i\u00bf - Chia, Jessica)\u00a1br/\u00bf\u00a1/b\u00bf\u00a1br/\u00bfID: TN_proquest2280498596\u00a1br/\u00bf\u00a1br/\u00bf\u00a1b\u00bfFrom Duplicate 17 (\u00a1i\u00bfGoodreads reviews to assess the wider impacts of books\u00a1/i\u00bf - Kousha, Kayvan; Thelwall, Mike; Abdoli, Mahshid)\u00a1br/\u00bf\u00a1/b\u00bf\u00a1br/\u00bfID: TN_proquest1919396787\u00a1br/\u00bf\u00a1br/\u00bf\u00a1b\u00bfFrom Duplicate 18 (\u00a1i\u00bfFinding Good Reads on Goodreads: Readers Take RA into Their Own Hands\u00a1/i\u00bf - Naik, Yesha)\u00a1br/\u00bf\u00a1/b\u00bf\u00a1br/\u00bfID: TN_proquest1021835587\u00a1br/\u00bf\u00a1br/\u00bf\u00a1b\u00bfFrom Duplicate 19 (\u00a1i\u00bfReading Online: Updating the State of the Discipline\u00a1/i\u00bf - Murray, Simone)\u00a1br/\u00bf\u00a1/b\u00bf\u00a1br/\u00bfID: TN_proquest2159297257\u00a1br/\u00bf\u00a1br/\u00bf\u00a1b\u00bfFrom Duplicate 20 (\u00a1i\u00bfThe company we keep : an ethics of fiction\u00a1/i\u00bf - Booth, Wayne C)\u00a1br/\u00bf\u00a1/b\u00bf\u00a1br/\u00bf"Bibliography of ethical criticism": p. 505-534.; Includes bibliographies and indexes.; ID: 01UA_ALMA21405686220003843\u00a1br/\u00bf\u00a1br/\u00bf\u00a1b\u00bfFrom Duplicate 23 (\u00a1i\u00bfPublishers, Readers, and Digital Engagement\u00a1/i\u00bf - Martens, Marianne)\u00a1br/\u00bf\u00a1/b\u00bf\u00a1br/\u00bfID: TN_springer_s978-1-137-51446-2_375745\u00a1br/\u00bf\u00a1br/\u00bf\u00a1b\u00bfFrom Duplicate 24 (\u00a1i\u00bfSocial responsibility in librarianship : essays on equality\u00a1/i\u00bf - MacCann, Donnarae)\u00a1br/\u00bf\u00a1/b\u00bf\u00a1br/\u00bfIncludes bibliographical references.; ID: dedupmrg80437634\u00a1br/\u00bf\u00a1br/\u00bf\u00a1b\u00bfFrom Duplicate 26 (\u00a1i\u00bfEssaying the Review\u00a1/i\u00bf - Paul, Lissa)\u00a1br/\u00bf\u00a1/b\u00bf\u00a1br/\u00bfID: TN_proquest1312023762\u00a1br/\u00bf\u00a1br/\u00bf\u00a1b\u00bfFrom Duplicate 27 (\u00a1i\u00bfGrowing Number of Bloggers See Their Work as Journalism\u00a1/i\u00bf - Ji, Hong; Sheehy, Michael)\u00a1br/\u00bf\u00a1/b\u00bf\u00a1br/\u00bfID: TN_proquest820481867\u00a1br/\u00bf\u00a1br/\u00bf\u00a1b\u00bfFrom Duplicate 28 (\u00a1i\u00bfThe pleasure of the text\u00a1/i\u00bf - Barthes, Roland)\u00a1br/\u00bf\u00a1/b\u00bf\u00a1br/\u00bfTranslation of Le plaisir du texte.; ID: 01UA_ALMA21399200520003843\u00a1br/\u00bf\u00a1br/\u00bf\u00a1b\u00bfFrom Duplicate 29 (\u00a1i\u00bfA Reviewer's Story\u00a1/i\u00bf - Hearne, Betsy)\u00a1br/\u00bf\u00a1/b\u00bf\u00a1br/\u00bfID: TN_ucpj10.1086/601047\u00a1br/\u00bf\u00a1br/\u00bf\u00a1b\u00bfFrom Duplicate 30 (\u00a1i\u00bfUnderstanding Cultural Omnivorousness: Or, the Myth of the Cultural Omnivore\u00a1/i\u00bf - Warde, Alan; Wright, David; Gayo-Cal, Modesto)\u00a1br/\u00bf\u00a1/b\u00bf\u00a1br/\u00bfID: TN_sage_s10_1177_1749975507078185\u00a1br/\u00bf\u00a1br/\u00bf\u00a1b\u00bfFrom Duplicate 31 (\u00a1i\u00bfCultural capital and the literary field\u00a1/i\u00bf - Wright, David)\u00a1br/\u00bf\u00a1/b\u00bf\u00a1br/\u00bfID: TN_informaworld_s10_1080_09548960600712934" ], "pages": "221", "publicationTitle": "Callaloo", @@ -10778,7 +10778,7 @@ "itemID": 319, "itemType": "journalArticle", "notes": [ - "ID: TNinformaworld\u209b10\u2081080\u2080740770X\u2082019\u2081671106" + "ID: TN_informaworld_s10_1080_0740770X_2019_1671106" ], "pages": "276-295", "publicationTitle": "Women & Performance: a journal of feminist theory", @@ -10810,11 +10810,11 @@ "itemID": 320, "itemType": "journalArticle", "notes": [ - "ID: TNinformaworld\u209b10\u2081080\u20808900520701315269" + "ID: TN_informaworld_s10_1080_08900520701315269" ], "pages": "37-48", "publicationTitle": "Journal of Mass Media Ethics", - "title": "\"If I Break a Rule, What Do I Do, Fire Myself?\" ethics codes of independent blogs", + "title": "\"If I break a rule, what do I do, fire myself?\" ethics codes of independent blogs", "volume": "22" }, { @@ -10895,7 +10895,7 @@ "itemID": 322, "itemType": "journalArticle", "notes": [ - "ID: TNinformaworld\u209b10\u2081080\u20809502386\u2082017\u2081374423" + "ID: TN_informaworld_s10_1080_09502386_2017_1374423" ], "pages": "975-996", "publicationTitle": "Cultural Studies", @@ -10922,7 +10922,7 @@ "itemID": 323, "itemType": "journalArticle", "notes": [ - "ID: TNinformaworld\u209b10\u2081080\u20809502386\u2082018\u2081549265" + "ID: TN_informaworld_s10_1080_09502386_2018_1549265" ], "pages": "143-166", "publicationTitle": "Cultural Studies", @@ -10949,7 +10949,7 @@ "itemID": 324, "itemType": "journalArticle", "notes": [ - "ID: TNinformaworld\u209b10\u2081080\u20809548960600712934" + "ID: TN_informaworld_s10_1080_09548960600712934" ], "pages": "123-139", "publicationTitle": "Cultural Trends", @@ -11305,7 +11305,7 @@ "tag": "United States" } ], - "title": "Teaching intolerance: Anti-indian imagery, racial politics, and (Anti)Racist pedagogy", + "title": "Teaching intolerance: Anti-indian imagery, racial politics, and (anti)racist pedagogy", "volume": "30" }, { @@ -11469,7 +11469,7 @@ { "DOI": "10.1080/13614541.2015.1078618", "ISSN": "1361-4541", - "abstractNote": "Presents an investigation of contemporary American authors who write for youth. The methodology derives from Laurenson\u2019s study of the sociology of British authors. The study is based on the biographical and sociological data of the randomly selected 220 of 786 (27%) authors identified as first authors from American Library Association selected lists. Whites, women, and writers from the Northeast United States and West Coast dominate the field. Authors tend to be educated at high prestige colleges and universities and follow careers as writers, teachers, and fields in communications. Male and minority writers have increased in recent decades along with newer forms of artistic production.", + "abstractNote": "Presents an investigation of contemporary American authors who write for youth. The methodology derives from Laurenson\u2019s study of the sociology of British authors. The study is based on the biographical and sociological data of the randomly selected 220 of 786 (27", "citationKey": "Immroth2015", "creators": [ { @@ -11548,7 +11548,7 @@ "itemID": 334, "itemType": "journalArticle", "notes": [ - "ID: TNinformaworld\u209b10\u2081080\u2081369118X\u2082017\u2081366540" + "ID: TN_informaworld_s10_1080_1369118X_2017_1366540" ], "pages": "232-249", "publicationTitle": "Information, Communication & Society", @@ -11631,7 +11631,7 @@ "itemID": 336, "itemType": "journalArticle", "notes": [ - "ID: TNinformaworld\u209b10\u2081080\u20815358593\u2082016\u2081183871" + "ID: TN_informaworld_s10_1080_15358593_2016_1183871" ], "pages": "4-24", "publicationTitle": "Review of Communication", @@ -11873,7 +11873,7 @@ "itemID": 342, "itemType": "journalArticle", "notes": [ - "ID: TNucpj10.1086/601047" + "ID: TN_ucpj10.1086/601047" ], "pages": "80-87", "publicationTitle": "The Library Quarterly", @@ -11892,7 +11892,7 @@ "lastName": "Carbado" } ], - "date": "2013-6", + "date": "2013-06", "extra": [ "Citation Key: Carbado2013", "Publisher: University of Chicago Press" @@ -11987,7 +11987,7 @@ "itemID": 344, "itemType": "journalArticle", "notes": [ - "ID: TN\u2092xford10.1093/elt/cct025" + "ID: TN_oxford10.1093/elt/cct025" ], "pages": "374-377", "publicationTitle": "Elt Journal", @@ -12014,7 +12014,7 @@ "itemID": 345, "itemType": "journalArticle", "notes": [ - "ID: TN\u2092xford10.1093/esr/jcp039" + "ID: TN_oxford10.1093/esr/jcp039" ], "pages": "623-637", "publicationTitle": "European Sociological Review", @@ -12101,7 +12101,7 @@ "itemID": 347, "itemType": "journalArticle", "notes": [ - "ID: TN\u2092xford10.1093/reseval/rvs017" + "ID: TN_oxford10.1093/reseval/rvs017" ], "pages": "229-241", "publicationTitle": "Research Evaluation", @@ -12130,7 +12130,7 @@ "itemID": 348, "itemType": "journalArticle", "notes": [ - "ID: TN\u2091merald\u209b10.1108/02640470810851770" + "ID: TN_emerald_s10.1108/02640470810851770" ], "pages": "97-110", "publicationTitle": "The Electronic Library", @@ -12157,7 +12157,7 @@ "itemID": 349, "itemType": "journalArticle", "notes": [ - "ID: TN\u2091merald\u209b10.1108/JD-07-2018-0104" + "ID: TN_emerald_s10.1108/JD-07-2018-0104" ], "pages": "612-626", "publicationTitle": "Journal of Documentation", @@ -12207,7 +12207,7 @@ "itemID": 351, "itemType": "journalArticle", "notes": [ - "ID: TNinformaworld\u209b10\u2081111curi\u20812037" + "ID: TN_informaworld_s10_1111_curi_12037" ], "pages": "68-89", "publicationTitle": "Curriculum Inquiry", @@ -12259,7 +12259,7 @@ "itemID": 353, "itemType": "journalArticle", "notes": [ - "10.2307/2167981\u00a1br/\u00bf\u00a1br/\u00bf10.1177/019685998601000201\u00a1br/\u00bf\u00a1br/\u00bf10.4324/9780203292990\u00a1br/\u00bf\u00a1br/\u00bf10.1017/cbo9780511812507\u00a1br/\u00bf\u00a1br/\u00bf10.1146/annurev.soc.28.110601.141107\u00a1br/\u00bf\u00a1br/\u00bf10.2307/3088900\u00a1br/\u00bf\u00a1br/\u00bf10.2307/2657316\u00a1br/\u00bf\u00a1br/\u00bf10.1086/230580\u00a1br/\u00bf\u00a1br/\u00bf10.1177/089124397011001004\u00a1br/\u00bf\u00a1br/\u00bf10.1023/a:1007068714468\u00a1br/\u00bf\u00a1br/\u00bf10.1016/s1537-4661(01)80009-x\u00a1br/\u00bf\u00a1br/\u00bf10.1525/sp.2002.49.4.521\u00a1br/\u00bf\u00a1br/\u00bf10.1215/9780822383659\u00a1br/\u00bf\u00a1br/\u00bf10.1177/026327696013002010\u00a1br/\u00bf\u00a1br/\u00bf1467-9558\u00a1br/\u00bf\u00a1br/\u00bf10.1177/0730888495022003002\u00a1br/\u00bf\u00a1br/\u00bf10.2307/1341787\u00a1br/\u00bf\u00a1br/\u00bf10.1093/sf/72.2.529\u00a1br/\u00bf\u00a1br/\u00bf10.1007/978-1-349-11902-8\u2082\u00a1br/\u00bf\u00a1br/\u00bf10.1086/229967\u00a1br/\u00bf\u00a1br/\u00bf10.1215/9780822381044\u00a1br/\u00bf\u00a1br/\u00bf10.1086/494918\u00a1br/\u00bf\u00a1br/\u00bf10.2307/1228940\u00a1br/\u00bf\u00a1br/\u00bf10.1007/978-1-4899-0818-6\u2085\u00a1br/\u00bf\u00a1br/\u00bf10.4324/9780203973431\u00a1br/\u00bf\u00a1br/\u00bf10.2307/2657409\u00a1br/\u00bf\u00a1br/\u00bf10.1215/9780822381044-006\u00a1br/\u00bf\u00a1br/\u00bf10.4324/9780203303979\u00a1br/\u00bf\u00a1br/\u00bf10.2747/0272-3638.14.2.194\u00a1br/\u00bf\u00a1br/\u00bf10.1017/cbo9780511625480\u00a1br/\u00bf\u00a1br/\u00bf10.1111/0735-2751.00074\u00a1br/\u00bf\u00a1br/\u00bf10.1177/0957926500011001003\u00a1br/\u00bf\u00a1br/\u00bf10.1177/089124101030001002\u00a1br/\u00bf\u00a1br/\u00bf10.1016/s0895-9935(03)12005-0\u00a1br/\u00bf\u00a1br/\u00bf10.1007/bf02193666\u00a1br/\u00bf\u00a1br/\u00bf10.1177/0891243287001002002\u00a1br/\u00bf\u00a1br/\u00bf10.2307/1388607\u00a1br/\u00bf\u00a1br/\u00bf10.1353/dem.2002.0037\u00a1br/\u00bf\u00a1br/\u00bf10.3102/00028312038004781" + "10.2307/2167981\u00a1br/\u00bf\u00a1br/\u00bf10.1177/019685998601000201\u00a1br/\u00bf\u00a1br/\u00bf10.4324/9780203292990\u00a1br/\u00bf\u00a1br/\u00bf10.1017/cbo9780511812507\u00a1br/\u00bf\u00a1br/\u00bf10.1146/annurev.soc.28.110601.141107\u00a1br/\u00bf\u00a1br/\u00bf10.2307/3088900\u00a1br/\u00bf\u00a1br/\u00bf10.2307/2657316\u00a1br/\u00bf\u00a1br/\u00bf10.1086/230580\u00a1br/\u00bf\u00a1br/\u00bf10.1177/089124397011001004\u00a1br/\u00bf\u00a1br/\u00bf10.1023/a:1007068714468\u00a1br/\u00bf\u00a1br/\u00bf10.1016/s1537-4661(01)80009-x\u00a1br/\u00bf\u00a1br/\u00bf10.1525/sp.2002.49.4.521\u00a1br/\u00bf\u00a1br/\u00bf10.1215/9780822383659\u00a1br/\u00bf\u00a1br/\u00bf10.1177/026327696013002010\u00a1br/\u00bf\u00a1br/\u00bf1467-9558\u00a1br/\u00bf\u00a1br/\u00bf10.1177/0730888495022003002\u00a1br/\u00bf\u00a1br/\u00bf10.2307/1341787\u00a1br/\u00bf\u00a1br/\u00bf10.1093/sf/72.2.529\u00a1br/\u00bf\u00a1br/\u00bf10.1007/978-1-349-11902-8_2\u00a1br/\u00bf\u00a1br/\u00bf10.1086/229967\u00a1br/\u00bf\u00a1br/\u00bf10.1215/9780822381044\u00a1br/\u00bf\u00a1br/\u00bf10.1086/494918\u00a1br/\u00bf\u00a1br/\u00bf10.2307/1228940\u00a1br/\u00bf\u00a1br/\u00bf10.1007/978-1-4899-0818-6_5\u00a1br/\u00bf\u00a1br/\u00bf10.4324/9780203973431\u00a1br/\u00bf\u00a1br/\u00bf10.2307/2657409\u00a1br/\u00bf\u00a1br/\u00bf10.1215/9780822381044-006\u00a1br/\u00bf\u00a1br/\u00bf10.4324/9780203303979\u00a1br/\u00bf\u00a1br/\u00bf10.2747/0272-3638.14.2.194\u00a1br/\u00bf\u00a1br/\u00bf10.1017/cbo9780511625480\u00a1br/\u00bf\u00a1br/\u00bf10.1111/0735-2751.00074\u00a1br/\u00bf\u00a1br/\u00bf10.1177/0957926500011001003\u00a1br/\u00bf\u00a1br/\u00bf10.1177/089124101030001002\u00a1br/\u00bf\u00a1br/\u00bf10.1016/s0895-9935(03)12005-0\u00a1br/\u00bf\u00a1br/\u00bf10.1007/bf02193666\u00a1br/\u00bf\u00a1br/\u00bf10.1177/0891243287001002002\u00a1br/\u00bf\u00a1br/\u00bf10.2307/1388607\u00a1br/\u00bf\u00a1br/\u00bf10.1353/dem.2002.0037\u00a1br/\u00bf\u00a1br/\u00bf10.3102/00028312038004781" ], "pages": "623-646", "publicationTitle": "Sociological theory", @@ -12295,7 +12295,7 @@ "tag": "Whiteness studies" } ], - "title": "\u201cWhat Group?\u201d Studying Whites and Whiteness in the Era of \u201cColor-Blindness\u201d", + "title": "\u201cWhat group?\u201d studying whites and whiteness in the era of \u201ccolor-blindness\u201d", "volume": "22" }, { @@ -12361,7 +12361,7 @@ "tag": "Whiteness studies" } ], - "title": "Critical whiteness theories and the evangelical \u201cRace problem\u201d: Extending emerson and smith's divided by faith", + "title": "Critical whiteness theories and the evangelical \u201crace problem\u201d: Extending emerson and smith's divided by faith", "volume": "47" }, { @@ -12480,7 +12480,7 @@ "itemID": 356, "itemType": "journalArticle", "notes": [ - "0264-3758; ID: TNcdigaleinfotracacademiconefileA499880004" + "0264-3758; ID: TN_cdi_gale_infotracacademiconefile_A499880004" ], "pages": "557-572", "publicationTitle": "Journal of applied philosophy", @@ -12509,7 +12509,7 @@ "itemID": 357, "itemType": "journalArticle", "notes": [ - "0264-3758; ID: TNcdigaleinfotracacademiconefileA499880004" + "0264-3758; ID: TN_cdi_gale_infotracacademiconefile_A499880004" ], "pages": "557-572", "publicationTitle": "Journal of applied philosophy", @@ -12538,7 +12538,7 @@ "itemID": 358, "itemType": "journalArticle", "notes": [ - "0264-3758; ID: TNcdigaleinfotracacademiconefileA499880004" + "0264-3758; ID: TN_cdi_gale_infotracacademiconefile_A499880004" ], "pages": "557-572", "publicationTitle": "Journal of applied philosophy", @@ -12567,11 +12567,11 @@ "itemID": 359, "itemType": "journalArticle", "notes": [ - "ID: TNcdigaleinfotracacademiconefileA585000083" + "ID: TN_cdi_gale_infotracacademiconefile_A585000083" ], "pages": "257-267", "publicationTitle": "Journal of applied philosophy", - "title": "Resolving the tensions between white people's active investment in racial inequality and white ignorance: A response to marzia milazzo", + "title": "Resolving the tensions between white people's active investment in racial inequality and white ignorance: a response to marzia milazzo", "volume": "36" }, { @@ -12612,7 +12612,7 @@ "itemID": 360, "itemType": "journalArticle", "notes": [ - "Related Persons: Forte, Andrea; Prilla, Michael; Vivacqua, Adriana; M\u00fcller, Claudia; Robert, Jr, Lionel; ID: TN\u2090cm3154512" + "Related Persons: Forte, Andrea; Prilla, Michael; Vivacqua, Adriana; M\u00fcller, Claudia; Robert, Jr, Lionel; ID: TN_acm3154512" ], "pages": "117-121", "title": "Understanding book popularity on goodreads" @@ -12643,7 +12643,7 @@ "itemID": 361, "itemType": "journalArticle", "notes": [ - "ID: TN\u209bage\u209b10\u2081177\u2080001699312456858" + "ID: TN_sage_s10_1177_0001699312456858" ], "pages": "351-365", "publicationTitle": "Acta Sociologica", @@ -12845,7 +12845,7 @@ "tag": "urban education" } ], - "title": "Reading, sharing, and experiencing Literary/Lived narratives about contemporary racism" + "title": "Reading, sharing, and experiencing literary/lived narratives about contemporary racism" }, { "DOI": "10.1177/0263276407075956", @@ -12868,7 +12868,7 @@ "itemID": 364, "itemType": "journalArticle", "notes": [ - "ID: TN\u209bage\u209b10\u2081177\u2080263276407075956" + "ID: TN_sage_s10_1177_0263276407075956" ], "pages": "55-78", "publicationTitle": "Theory, Culture & Society", @@ -12901,7 +12901,7 @@ "itemID": 365, "itemType": "journalArticle", "notes": [ - "ID: TN\u209aroquest820481867" + "ID: TN_proquest820481867" ], "pages": "38-47", "publicationTitle": "Newspaper Research Journal", @@ -12995,7 +12995,7 @@ { "DOI": "10.1177/1077800418801375", "ISSN": "1077-8004", - "abstractNote": "Book reviews written by readers and published on digital sites such as Goodreads are a new force in contemporary book culture. This article uses feminist standpoint theory to investigate the language used in Goodreads reviews to better understand how these reviewers articulate intimate reading experiences. A total of 692 reviews of seven bestselling fiction and nonfiction books are analyzed by two methods. The first, thematic content analysis, involves close reading of the reviews. The second, sentiment analysis, is an automated \u201cdistant reading\u201d process. These methods prompt us, as researchers, to reflect on the way they foster or inhibit a sense of proximity to readers, even as they reveal predominant features of Goodreads reviews. Together, the methods reveal that 86.1% of Goodreads reviews describe a reading experience, and 68% specifically mention an emotional reaction to the book, with the emotion most intense in reviews of fiction. Reviews also create social connections...", + "abstractNote": "Book reviews written by readers and published on digital sites such as Goodreads are a new force in contemporary book culture. This article uses feminist standpoint theory to investigate the language used in Goodreads reviews to better understand how these reviewers articulate intimate reading experiences. A total of 692 reviews of seven bestselling fiction and nonfiction books are analyzed by two methods. The first, thematic content analysis, involves close reading of the reviews. The second, sentiment analysis, is an automated \u201cdistant reading\u201d process. These methods prompt us, as researchers, to reflect on the way they foster or inhibit a sense of proximity to readers, even as they reveal predominant features of Goodreads reviews. Together, the methods reveal that 86.1", "citationKey": "Driscoll2019", "creators": [ { @@ -13028,7 +13028,7 @@ "itemID": 368, "itemType": "journalArticle", "notes": [ - "ID: TN\u209bage\u209b10\u2081177\u2081077800418801375" + "ID: TN_sage_s10_1177_1077800418801375" ], "pages": "248-259", "publicationTitle": "Qualitative Inquiry", @@ -13179,7 +13179,7 @@ "itemID": 370, "itemType": "journalArticle", "notes": [ - "ID: TN\u209bage\u209b10\u2081177\u2081354067X18796805" + "ID: TN_sage_s10_1177_1354067X18796805" ], "pages": "529-544", "publicationTitle": "Culture & Psychology", @@ -13207,7 +13207,7 @@ "itemID": 371, "itemType": "journalArticle", "notes": [ - "ID: TN\u209bage\u209b10\u2081177\u2081354856517721805" + "ID: TN_sage_s10_1177_1354856517721805" ], "pages": "1063-1076", "publicationTitle": "Convergence: The International Journal of Research into New Media Technologies", @@ -13235,7 +13235,7 @@ "itemID": 372, "itemType": "journalArticle", "notes": [ - "ID: TN\u209bage\u209b10\u2081177\u2081354856517751391" + "ID: TN_sage_s10_1177_1354856517751391" ], "pages": "1168-1184", "publicationTitle": "Convergence: The International Journal of Research into New Media Technologies", @@ -13263,7 +13263,7 @@ "itemID": 373, "itemType": "journalArticle", "notes": [ - "ID: TN\u209bage\u209b10\u2081177\u2081461444815582141" + "ID: TN_sage_s10_1177_1461444815582141" ], "pages": "2305-2322", "publicationTitle": "New Media & Society", @@ -13291,7 +13291,7 @@ "itemID": 374, "itemType": "journalArticle", "notes": [ - "ID: TN\u209bage\u209b10\u2081177\u2081464700107078139" + "ID: TN_sage_s10_1177_1464700107078139" ], "pages": "149-168", "publicationTitle": "Feminist Theory", @@ -13318,7 +13318,7 @@ "itemID": 375, "itemType": "journalArticle", "notes": [ - "ID: TN\u209bage\u209b10\u2081177\u2081464884909102582" + "ID: TN_sage_s10_1177_1464884909102582" ], "pages": "283-285", "publicationTitle": "Journalism", @@ -13370,7 +13370,7 @@ "itemID": 376, "itemType": "journalArticle", "notes": [ - "ID: TN\u209bage\u209b10\u2081177\u2081464884910388230" + "ID: TN_sage_s10_1177_1464884910388230" ], "pages": "586-606", "publicationTitle": "Journalism", @@ -13403,7 +13403,7 @@ "itemID": 377, "itemType": "journalArticle", "notes": [ - "ID: TN\u209bage\u209b10\u2081177\u2081464884911415973" + "ID: TN_sage_s10_1177_1464884911415973" ], "pages": "963-982", "publicationTitle": "Journalism", @@ -13436,7 +13436,7 @@ "itemID": 378, "itemType": "journalArticle", "notes": [ - "ID: TN\u209bage\u209b10\u2081177\u2081464884916663599" + "ID: TN_sage_s10_1177_1464884916663599" ], "pages": "375-391", "publicationTitle": "Journalism", @@ -13464,7 +13464,7 @@ "itemID": 379, "itemType": "journalArticle", "notes": [ - "ID: TN\u209bage\u209b10\u2081177\u2081464884917722453" + "ID: TN_sage_s10_1177_1464884917722453" ], "pages": "427-443", "publicationTitle": "Journalism", @@ -13502,7 +13502,7 @@ "itemID": 380, "itemType": "journalArticle", "notes": [ - "ID: TN\u209bage\u209b10\u2081177\u2081464884919845458" + "ID: TN_sage_s10_1177_1464884919845458" ], "pages": "1070-1086", "publicationTitle": "Journalism", @@ -13546,7 +13546,7 @@ "itemID": 381, "itemType": "journalArticle", "notes": [ - "10.1037/0003-066x.52.6.613\u00a1br/\u00bf\u00a1br/\u00bf10.1037/0022-3514.55.6.893\u00a1br/\u00bf\u00a1br/\u00bf10.1177/1745691611406922\u00a1br/\u00bf\u00a1br/\u00bf10.1037/a0031017\u00a1br/\u00bf\u00a1br/\u00bf10.1525/sp.2009.56.3.403\u00a1br/\u00bf\u00a1br/\u00bf10.1037/a0013595\u00a1br/\u00bf\u00a1br/\u00bf10.1177/0146167292183006\u00a1br/\u00bf\u00a1br/\u00bf10.1016/j.obhdp.2007.05.001\u00a1br/\u00bf\u00a1br/\u00bf10.1002/ejsp.348\u00a1br/\u00bf\u00a1br/\u00bf10.1037/0022-3514.78.4.635\u00a1br/\u00bf\u00a1br/\u00bf10.1037/0022-3514.90.6.961\u00a1br/\u00bf\u00a1br/\u00bf10.1037/0022-3514.77.4.669\u00a1br/\u00bf\u00a1br/\u00bf10.1177/0146167202239047\u00a1br/\u00bf\u00a1br/\u00bf10.1037/0033-2909.102.1.72\u00a1br/\u00bf\u00a1br/\u00bf10.1177/0146167299025004008\u00a1br/\u00bf\u00a1br/\u00bf10.1037/0022-3514.78.4.690\u00a1br/\u00bf\u00a1br/\u00bf10.1017/s0007123401000102\u00a1br/\u00bf\u00a1br/\u00bf10.1037/0022-3514.72.6.1364\u00a1br/\u00bf\u00a1br/\u00bf10.1006/jesp.1996.0018\u00a1br/\u00bf\u00a1br/\u00bf10.1037/0022-3514.74.2.378\u00a1br/\u00bf\u00a1br/\u00bf10.1177/0146167201275007\u00a1br/\u00bf\u00a1br/\u00bf10.1177/106939719502900302\u00a1br/\u00bf\u00a1br/\u00bf10.1037/1089-2680.3.1.23\u00a1br/\u00bf\u00a1br/\u00bf10.4324/9780203973431\u00a1br/\u00bf\u00a1br/\u00bf10.1037/h0076486\u00a1br/\u00bf\u00a1br/\u00bf10.1023/a:1022148418210\u00a1br/\u00bf\u00a1br/\u00bf10.1111/j.2044-8309.1986.tb00712.x\u00a1br/\u00bf\u00a1br/\u00bf10.1080/15298868.2010.542015\u00a1br/\u00bf\u00a1br/\u00bf10.1016/j.jesp.2003.09.002\u00a1br/\u00bf\u00a1br/\u00bf10.1111/j.1468-2508.2007.00562.x\u00a1br/\u00bf\u00a1br/\u00bf10.1215/9780822381044-003\u00a1br/\u00bf\u00a1br/\u00bf10.1002/ejsp.259\u00a1br/\u00bf\u00a1br/\u00bf10.1111/j.1467-6494.1994.tb00311.x\u00a1br/\u00bf\u00a1br/\u00bf10.1215/9780822381044-004\u00a1br/\u00bf\u00a1br/\u00bf10.1177/1745691610393980\u00a1br/\u00bf\u00a1br/\u00bf10.1111/j.2044-8309.1998.tb01163.x\u00a1br/\u00bf\u00a1br/\u00bf10.1037/a0024598\u00a1br/\u00bf\u00a1br/\u00bf10.1002/ejsp.175\u00a1br/\u00bf\u00a1br/\u00bf10.1177/0956797610392926\u00a1br/\u00bf\u00a1br/\u00bf10.1177/0956797610384741\u00a1br/\u00bf\u00a1br/\u00bf10.1080/15298868.2011.556804\u00a1br/\u00bf\u00a1br/\u00bf10.1037/0022-3514.89.2.223\u00a1br/\u00bf\u00a1br/\u00bf10.1037/0022-3514.94.1.91\u00a1br/\u00bf\u00a1br/\u00bf10.1037/a0032250\u00a1br/\u00bf\u00a1br/\u00bf10.1111/0004-5608.00182\u00a1br/\u00bf\u00a1br/\u00bf10.1037/a0011990\u00a1br/\u00bf\u00a1br/\u00bf10.1080/10463280601095240\u00a1br/\u00bf\u00a1br/\u00bf10.1016/j.jesp.2009.08.017\u00a1br/\u00bf\u00a1br/\u00bf10.1177/0146167296226008\u00a1br/\u00bf\u00a1br/\u00bf10.1037/0022-3514.36.5.511\u00a1br/\u00bf\u00a1br/\u00bf10.1006/jesp.2001.1512\u00a1br/\u00bf\u00a1br/\u00bf10.1037/0033-295x.102.2.331\u00a1br/\u00bf\u00a1br/\u00bf10.1016/j.jesp.2007.11.002\u00a1br/\u00bf\u00a1br/\u00bf10.1177/0146167207311200\u00a1br/\u00bf\u00a1br/\u00bf10.1111/j.1467-9221.2005.00440.x\u00a1br/\u00bf\u00a1br/\u00bf10.1037/0022-3514.95.1.144\u00a1br/\u00bf\u00a1br/\u00bf10.1215/9780822383659\u00a1br/\u00bf\u00a1br/\u00bf10.1016/s0065-2601(04)36001-6\u00a1br/\u00bf\u00a1br/\u00bf10.1037/0033-295x.94.3.319\u00a1br/\u00bf\u00a1br/\u00bf10.1037/0003-066x.51.9.918\u00a1br/\u00bf\u00a1br/\u00bf10.1037/h0034225\u00a1br/\u00bf\u00a1br/\u00bf10.2307/1341787\u00a1br/\u00bf\u00a1br/\u00bf10.1037/0022-3514.72.6.1268\u00a1br/\u00bf\u00a1br/\u00bf10.1177/1368430209344869\u00a1br/\u00bf\u00a1br/\u00bf10.1146/annurev.soc.31.041304.122322\u00a1br/\u00bf\u00a1br/\u00bf10.1002/ejsp.2420250102\u00a1br/\u00bf\u00a1br/\u00bf1745-6924\u00a1br/\u00bf\u00a1br/\u00bf10.1177/0146167204271713\u00a1br/\u00bf\u00a1br/\u00bf10.1007/978-1-4899-0818-6\u2084\u00a1br/\u00bf\u00a1br/\u00bf10.1177/0146167207303016\u00a1br/\u00bf\u00a1br/\u00bf10.1037/0022-3514.77.1.167\u00a1br/\u00bf\u00a1br/\u00bf10.1257/0002828042002561\u00a1br/\u00bf\u00a1br/\u00bf10.1080/10463280600574815\u00a1br/\u00bf\u00a1br/\u00bf10.1037//0022-3514.74.6.1464\u00a1br/\u00bf\u00a1br/\u00bf10.1037/0033-295x.98.2.224\u00a1br/\u00bf\u00a1br/\u00bf10.1016/j.jesp.2014.04.005\u00a1br/\u00bf\u00a1br/\u00bf10.1037/0022-3514.73.4.805\u00a1br/\u00bf\u00a1br/\u00bf10.1177/0146167206287182\u00a1br/\u00bf\u00a1br/\u00bf10.1177/0146167212475224\u00a1br/\u00bf\u00a1br/\u00bf10.1080/10478401003676501\u00a1br/\u00bf\u00a1br/\u00bf10.1177/002200278102500401\u00a1br/\u00bf\u00a1br/\u00bf10.1111/j.1467-9280.2006.01810.x" + "10.1037/0003-066x.52.6.613\u00a1br/\u00bf\u00a1br/\u00bf10.1037/0022-3514.55.6.893\u00a1br/\u00bf\u00a1br/\u00bf10.1177/1745691611406922\u00a1br/\u00bf\u00a1br/\u00bf10.1037/a0031017\u00a1br/\u00bf\u00a1br/\u00bf10.1525/sp.2009.56.3.403\u00a1br/\u00bf\u00a1br/\u00bf10.1037/a0013595\u00a1br/\u00bf\u00a1br/\u00bf10.1177/0146167292183006\u00a1br/\u00bf\u00a1br/\u00bf10.1016/j.obhdp.2007.05.001\u00a1br/\u00bf\u00a1br/\u00bf10.1002/ejsp.348\u00a1br/\u00bf\u00a1br/\u00bf10.1037/0022-3514.78.4.635\u00a1br/\u00bf\u00a1br/\u00bf10.1037/0022-3514.90.6.961\u00a1br/\u00bf\u00a1br/\u00bf10.1037/0022-3514.77.4.669\u00a1br/\u00bf\u00a1br/\u00bf10.1177/0146167202239047\u00a1br/\u00bf\u00a1br/\u00bf10.1037/0033-2909.102.1.72\u00a1br/\u00bf\u00a1br/\u00bf10.1177/0146167299025004008\u00a1br/\u00bf\u00a1br/\u00bf10.1037/0022-3514.78.4.690\u00a1br/\u00bf\u00a1br/\u00bf10.1017/s0007123401000102\u00a1br/\u00bf\u00a1br/\u00bf10.1037/0022-3514.72.6.1364\u00a1br/\u00bf\u00a1br/\u00bf10.1006/jesp.1996.0018\u00a1br/\u00bf\u00a1br/\u00bf10.1037/0022-3514.74.2.378\u00a1br/\u00bf\u00a1br/\u00bf10.1177/0146167201275007\u00a1br/\u00bf\u00a1br/\u00bf10.1177/106939719502900302\u00a1br/\u00bf\u00a1br/\u00bf10.1037/1089-2680.3.1.23\u00a1br/\u00bf\u00a1br/\u00bf10.4324/9780203973431\u00a1br/\u00bf\u00a1br/\u00bf10.1037/h0076486\u00a1br/\u00bf\u00a1br/\u00bf10.1023/a:1022148418210\u00a1br/\u00bf\u00a1br/\u00bf10.1111/j.2044-8309.1986.tb00712.x\u00a1br/\u00bf\u00a1br/\u00bf10.1080/15298868.2010.542015\u00a1br/\u00bf\u00a1br/\u00bf10.1016/j.jesp.2003.09.002\u00a1br/\u00bf\u00a1br/\u00bf10.1111/j.1468-2508.2007.00562.x\u00a1br/\u00bf\u00a1br/\u00bf10.1215/9780822381044-003\u00a1br/\u00bf\u00a1br/\u00bf10.1002/ejsp.259\u00a1br/\u00bf\u00a1br/\u00bf10.1111/j.1467-6494.1994.tb00311.x\u00a1br/\u00bf\u00a1br/\u00bf10.1215/9780822381044-004\u00a1br/\u00bf\u00a1br/\u00bf10.1177/1745691610393980\u00a1br/\u00bf\u00a1br/\u00bf10.1111/j.2044-8309.1998.tb01163.x\u00a1br/\u00bf\u00a1br/\u00bf10.1037/a0024598\u00a1br/\u00bf\u00a1br/\u00bf10.1002/ejsp.175\u00a1br/\u00bf\u00a1br/\u00bf10.1177/0956797610392926\u00a1br/\u00bf\u00a1br/\u00bf10.1177/0956797610384741\u00a1br/\u00bf\u00a1br/\u00bf10.1080/15298868.2011.556804\u00a1br/\u00bf\u00a1br/\u00bf10.1037/0022-3514.89.2.223\u00a1br/\u00bf\u00a1br/\u00bf10.1037/0022-3514.94.1.91\u00a1br/\u00bf\u00a1br/\u00bf10.1037/a0032250\u00a1br/\u00bf\u00a1br/\u00bf10.1111/0004-5608.00182\u00a1br/\u00bf\u00a1br/\u00bf10.1037/a0011990\u00a1br/\u00bf\u00a1br/\u00bf10.1080/10463280601095240\u00a1br/\u00bf\u00a1br/\u00bf10.1016/j.jesp.2009.08.017\u00a1br/\u00bf\u00a1br/\u00bf10.1177/0146167296226008\u00a1br/\u00bf\u00a1br/\u00bf10.1037/0022-3514.36.5.511\u00a1br/\u00bf\u00a1br/\u00bf10.1006/jesp.2001.1512\u00a1br/\u00bf\u00a1br/\u00bf10.1037/0033-295x.102.2.331\u00a1br/\u00bf\u00a1br/\u00bf10.1016/j.jesp.2007.11.002\u00a1br/\u00bf\u00a1br/\u00bf10.1177/0146167207311200\u00a1br/\u00bf\u00a1br/\u00bf10.1111/j.1467-9221.2005.00440.x\u00a1br/\u00bf\u00a1br/\u00bf10.1037/0022-3514.95.1.144\u00a1br/\u00bf\u00a1br/\u00bf10.1215/9780822383659\u00a1br/\u00bf\u00a1br/\u00bf10.1016/s0065-2601(04)36001-6\u00a1br/\u00bf\u00a1br/\u00bf10.1037/0033-295x.94.3.319\u00a1br/\u00bf\u00a1br/\u00bf10.1037/0003-066x.51.9.918\u00a1br/\u00bf\u00a1br/\u00bf10.1037/h0034225\u00a1br/\u00bf\u00a1br/\u00bf10.2307/1341787\u00a1br/\u00bf\u00a1br/\u00bf10.1037/0022-3514.72.6.1268\u00a1br/\u00bf\u00a1br/\u00bf10.1177/1368430209344869\u00a1br/\u00bf\u00a1br/\u00bf10.1146/annurev.soc.31.041304.122322\u00a1br/\u00bf\u00a1br/\u00bf10.1002/ejsp.2420250102\u00a1br/\u00bf\u00a1br/\u00bf1745-6924\u00a1br/\u00bf\u00a1br/\u00bf10.1177/0146167204271713\u00a1br/\u00bf\u00a1br/\u00bf10.1007/978-1-4899-0818-6_4\u00a1br/\u00bf\u00a1br/\u00bf10.1177/0146167207303016\u00a1br/\u00bf\u00a1br/\u00bf10.1037/0022-3514.77.1.167\u00a1br/\u00bf\u00a1br/\u00bf10.1257/0002828042002561\u00a1br/\u00bf\u00a1br/\u00bf10.1080/10463280600574815\u00a1br/\u00bf\u00a1br/\u00bf10.1037//0022-3514.74.6.1464\u00a1br/\u00bf\u00a1br/\u00bf10.1037/0033-295x.98.2.224\u00a1br/\u00bf\u00a1br/\u00bf10.1016/j.jesp.2014.04.005\u00a1br/\u00bf\u00a1br/\u00bf10.1037/0022-3514.73.4.805\u00a1br/\u00bf\u00a1br/\u00bf10.1177/0146167206287182\u00a1br/\u00bf\u00a1br/\u00bf10.1177/0146167212475224\u00a1br/\u00bf\u00a1br/\u00bf10.1080/10478401003676501\u00a1br/\u00bf\u00a1br/\u00bf10.1177/002200278102500401\u00a1br/\u00bf\u00a1br/\u00bf10.1111/j.1467-9280.2006.01810.x" ], "pages": "594-609", "publicationTitle": "Perspectives on Psychological Science", @@ -13646,7 +13646,7 @@ "itemID": 382, "itemType": "journalArticle", "notes": [ - "ID: TN\u209bage\u209b10\u2081177\u2081749975507078185" + "ID: TN_sage_s10_1177_1749975507078185" ], "pages": "143-164", "publicationTitle": "Cultural Sociology", @@ -13736,7 +13736,7 @@ "itemID": 384, "itemType": "journalArticle", "notes": [ - "ID: TN\u209aroquest1983660865" + "ID: TN_proquest1983660865" ], "pages": "397", "publicationTitle": "Novel", @@ -13762,7 +13762,7 @@ "itemID": 385, "itemType": "journalArticle", "notes": [ - "ID: TNduke10.1215/01636545-1992-54-21" + "ID: TN_duke10.1215/01636545-1992-54-21" ], "pages": "21", "publicationTitle": "Radical History Review", @@ -13799,7 +13799,7 @@ "itemID": 386, "itemType": "journalArticle", "notes": [ - "ID: TN\u2090ea10.1257/aer.104.8.2421" + "ID: TN_aea10.1257/aer.104.8.2421" ], "pages": "2421-2455", "publicationTitle": "American Economic Review", @@ -13836,7 +13836,7 @@ "itemID": 387, "itemType": "journalArticle", "notes": [ - "ID: TNinformsmksc.1090.0557" + "ID: TN_informsmksc.1090.0557" ], "pages": "815-827", "publicationTitle": "Marketing Science", @@ -13864,7 +13864,7 @@ "itemID": 388, "itemType": "journalArticle", "notes": [ - "ID: TN\u209aroquest2159297257" + "ID: TN_proquest2159297257" ], "pages": "370-396", "publicationTitle": "Book History", @@ -13890,7 +13890,7 @@ "itemID": 389, "itemType": "journalArticle", "notes": [ - "ID: TN\u209arojectmuse\u209b248391S1553120185300013" + "ID: TN_projectmuse_s248391_S1553120185300013" ], "pages": "100-104", "publicationTitle": "Children's Literature Association Quarterly", @@ -13916,7 +13916,7 @@ "itemID": 390, "itemType": "journalArticle", "notes": [ - "ID: TN\u209arojectmuse\u209b248341S1553120184400148" + "ID: TN_projectmuse_s248341_S1553120184400148" ], "pages": "184-186", "publicationTitle": "Children's Literature Association Quarterly", @@ -13967,7 +13967,7 @@ "itemID": 392, "itemType": "journalArticle", "notes": [ - "ID: TN\u209arojectmuse\u209b249312S1553120192300087" + "ID: TN_projectmuse_s249312_S1553120192300087" ], "pages": "37-39", "publicationTitle": "Children's Literature Association Quarterly", @@ -13993,7 +13993,7 @@ "itemID": 393, "itemType": "journalArticle", "notes": [ - "ID: TN\u209arojectmuse\u209b249281S1553120192100071" + "ID: TN_projectmuse_s249281_S1553120192100071" ], "pages": "29-35", "publicationTitle": "Children's Literature Association Quarterly", @@ -14029,11 +14029,11 @@ "itemID": 394, "itemType": "journalArticle", "notes": [ - "ID: TN\u209arojectmuse\u209b250011S1553120103300026" + "ID: TN_projectmuse_s250011_S1553120103300026" ], "pages": "137", "publicationTitle": "Children's Literature Association Quarterly", - "title": "Are children's book publishers changing the way children read?: A panel discussion", + "title": "Are children's book publishers changing the way children read?: a panel discussion", "volume": "28" }, { @@ -14080,11 +14080,11 @@ "itemID": 396, "itemType": "journalArticle", "notes": [ - "ID: TN\u209arojectmuse\u209b265018S1931023409400672" + "ID: TN_projectmuse_s265018_S1931023409400672" ], "pages": "10-19", "publicationTitle": "L'Esprit Cr\u00e9ateur", - "title": "Children's literature, issues of definition: The \"Why?\" and \"Why Not?\" of criticism", + "title": "Children's literature, issues of definition: The \"why?\" and \"why not?\" of criticism", "volume": "45" }, { @@ -14269,7 +14269,7 @@ "itemID": 400, "itemType": "journalArticle", "notes": [ - "ID: TNcrossref10.1386/btwo.1.1.7\u2081" + "ID: TN_crossref10.1386/btwo.1.1.7_1" ], "publicationTitle": "Book 2.0", "title": "history.child.book.shop.2.0", @@ -14287,8 +14287,8 @@ }, { "creatorType": "editor", - "firstName": "Department of", - "lastName": "Media" + "firstName": "Department", + "lastName": "of Media" }, { "creatorType": "editor", @@ -14303,7 +14303,7 @@ "itemID": 401, "itemType": "journalArticle", "notes": [ - "ID: TN\u2099arciseur:oai:repub.eur.nl:31592" + "ID: TN_narciseur:oai:repub.eur.nl:31592" ], "pages": "441-462", "publicationTitle": "Communications: the European journal of communication research", @@ -14329,7 +14329,7 @@ "itemID": 402, "itemType": "journalArticle", "notes": [ - "ID: TNcrossref10.15643/libartrus-2017.3.3" + "ID: TN_crossref10.15643/libartrus-2017.3.3" ], "pages": "230", "publicationTitle": "Rossiiskii Gumanitarnyi Zhurnal", @@ -14356,7 +14356,7 @@ "itemID": 403, "itemType": "journalArticle", "notes": [ - "ID: TNdash1/4795341" + "ID: TN_dash1/4795341" ], "publicationTitle": "PMLA.Publications of the Modern Language Association of America", "title": "Children\u2019s books, dolls, and the performance of race; or, the possibility of children\u2019s literature", @@ -14383,11 +14383,11 @@ "itemID": 404, "itemType": "journalArticle", "notes": [ - "ID: TN\u209aroquest1325180426" + "ID: TN_proquest1325180426" ], "pages": "238", "publicationTitle": "PMLA.Publications of the Modern Language Association of America", - "title": "\"Words with Friends\": Socially networked reading on goodreads", + "title": "\"Words with friends\": Socially networked reading on goodreads", "volume": "128" }, { @@ -14435,7 +14435,7 @@ "itemID": 406, "itemType": "journalArticle", "notes": [ - "ID: TN\u2091ric\u209bEJ1164894" + "ID: TN_eric_sEJ1164894" ], "pages": "335", "publicationTitle": "Harvard Educational Review", @@ -14462,9 +14462,9 @@ "itemID": 407, "itemType": "journalArticle", "notes": [ - "ID: TNdatacite10622566" + "ID: TN_datacite10622566" ], - "title": "A comparison of traditional book reviews and Amazon.com book reviews of fiction using a content analysis approach", + "title": "A comparison of traditional book reviews and amazon.com book reviews of fiction using a content analysis approach", "volume": "12" }, { @@ -14491,7 +14491,7 @@ "itemID": 408, "itemType": "journalArticle", "notes": [ - "ID: TNdoaj\u209boaidoaj\u2092rg\u2090rticlef38963c85c2340b2989dfce42a344694" + "ID: TN_doaj_soai_doaj_org_article_f38963c85c2340b2989dfce42a344694" ], "pages": "397-413", "publicationTitle": "RDBCI: Revista Digital de Biblioteconomia e Ci\u00eancia da Informa\u00e7\u00e3o", @@ -14551,10 +14551,10 @@ "itemID": 410, "itemType": "journalArticle", "notes": [ - "ID: TN\u209aroquest2124051924" + "ID: TN_proquest2124051924" ], "publicationTitle": "Scholarly and Research Communication", - "title": "Readers read, readers write: A methodology for the study of reading practices in media convergence", + "title": "Readers read, readers write: a methodology for the study of reading practices in media convergence", "volume": "5" }, { @@ -14606,7 +14606,7 @@ "itemType": "journalArticle", "pages": "339-363", "publicationTitle": "The Modern Language Review", - "title": "Foucault on the \"Question of the Author\": A critical exegesis", + "title": "Foucault on the \"question of the author\": a critical exegesis", "url": "http://www.jstor.org/stable/3738750", "volume": "99" }, @@ -14631,7 +14631,7 @@ "itemID": 413, "itemType": "journalArticle", "notes": [ - "0028-6087; ID: TNcdi\u209aroquestjournals\u2081297397992" + "0028-6087; ID: TN_cdi_proquest_journals_1297397992" ], "pages": "123-162", "publicationTitle": "New literary history", @@ -14660,7 +14660,7 @@ "itemID": 414, "itemType": "journalArticle", "notes": [ - "ID: TNcdi\u209aroquestjournals\u208237300263" + "ID: TN_cdi_proquest_journals_237300263" ], "pages": "20-23", "publicationTitle": "English journal", @@ -14697,11 +14697,11 @@ "itemID": 415, "itemType": "journalArticle", "notes": [ - "ID: TNgale\u2092fa591131999" + "ID: TN_gale_ofa591131999" ], "pages": "158", "publicationTitle": "Journal of Advertising Research", - "title": "Adolescent perceptions of black-oriented media: \"The Day Beyonce Turned Black\": Can black-oriented films and TV programs be marketed more Broadly?(Report)", + "title": "Adolescent perceptions of black-oriented media: \"The day beyonce turned black\": Can black-oriented films and TV programs be marketed more broadly?(report)", "volume": "59" }, { @@ -14901,7 +14901,7 @@ "tag": "Youth" } ], - "title": "Zoom: A review of the literature on marginalized adolescent readers, literacy theory, and policy implications", + "title": "Zoom: a review of the literature on marginalized adolescent readers, literacy theory, and policy implications", "volume": "76" }, { @@ -15063,7 +15063,7 @@ "tag": "Young adult literature" } ], - "title": "\"But This Story of Mine Is Not Unique\": A review of research on african american children's literature", + "title": "\"But this story of mine is not unique\": a review of research on african american children's literature", "volume": "79" }, { @@ -15085,7 +15085,7 @@ "itemID": 420, "itemType": "journalArticle", "notes": [ - "ID: TN\u209bcopus2-s2.0-85056714664" + "ID: TN_scopus2-s2.0-85056714664" ], "pages": "12-15", "publicationTitle": "Journal of Scholarly Publishing", @@ -15137,7 +15137,7 @@ "itemID": 422, "itemType": "journalArticle", "notes": [ - "ID: TN\u209aroquest1810344971" + "ID: TN_proquest1810344971" ], "pages": "R1-R7", "publicationTitle": "Film Criticism", @@ -15189,7 +15189,7 @@ "itemID": 424, "itemType": "journalArticle", "notes": [ - "ID: TN\u209aroquest2249642905" + "ID: TN_proquest2249642905" ], "pages": "3-8", "publicationTitle": "Children & Libraries", @@ -15217,7 +15217,7 @@ "itemID": 425, "itemType": "journalArticle", "notes": [ - "ID: TN\u209aroquest1021835587" + "ID: TN_proquest1021835587" ], "pages": "319-323", "publicationTitle": "Reference & User Services Quarterly", @@ -15263,7 +15263,7 @@ "itemID": 426, "itemType": "journalArticle", "notes": [ - "ID: TN\u2091rudit1009347ar" + "ID: TN_erudit1009347ar" ], "publicationTitle": "M\u00e9moires du livre", "title": "#1b1t: Investigating reading practices at the turn of the twenty-first century", @@ -15292,7 +15292,7 @@ "itemID": 427, "itemType": "journalArticle", "notes": [ - "ID: TNcrossref10.7202/1046988ar" + "ID: TN_crossref10.7202/1046988ar" ], "publicationTitle": "M\u00e9moires du livre", "title": "Serious fun: Gaming the book festival", @@ -15332,7 +15332,7 @@ "itemID": 428, "itemType": "journalArticle", "notes": [ - "ID: TN\u2091rudit1060971ar" + "ID: TN_erudit1060971ar" ], "publicationTitle": "M\u00e9moires du livre", "title": "The discourse and value of being an independent publisher", @@ -15651,7 +15651,7 @@ "itemID": 440, "itemType": "book", "publisher": "n+1 foundation", - "title": "Canon/Archive: studies in quantitative formalism from the Stanford Literary Lab" + "title": "Canon/archive: studies in quantitative formalism from the stanford literary lab" }, { "ISBN": "978-1-138-12008-2", @@ -15908,7 +15908,7 @@ "lastName": "Harris" } ], - "date": "1993-6", + "date": "1993-06", "extra": [ "Citation Key: Harris1993", "Publisher: Harvard Law Review Association" @@ -16097,8 +16097,8 @@ }, { "creatorType": "editor", - "firstName": "Department of", - "lastName": "Media" + "firstName": "Department", + "lastName": "of Media" }, { "creatorType": "editor", @@ -16113,7 +16113,7 @@ "itemID": 453, "itemType": "journalArticle", "notes": [ - "ID: TN\u2099arciseur:oai:repub.eur.nl:41392" + "ID: TN_narciseur:oai:repub.eur.nl:41392" ], "pages": "139-168", "publicationTitle": "K\u00f6lner Zeitschrift f\u00fcr Soziologie und Sozialpsychologie (print)", @@ -16138,11 +16138,11 @@ "itemID": 454, "itemType": "journalArticle", "notes": [ - "ID: TN\u209arojectmuse\u209b633173S2157418916000586" + "ID: TN_projectmuse_s633173_S2157418916000586" ], "pages": "57-75", "publicationTitle": "Minnesota Review", - "title": "What was \u201cClose reading\u201d?: A century of method in literary studies", + "title": "What was \u201cclose reading\u201d?: a century of method in literary studies", "volume": "87" }, { @@ -16164,7 +16164,7 @@ "itemID": 455, "itemType": "journalArticle", "notes": [ - "ID: TNgale\u2092fa20191277" + "ID: TN_gale_ofa20191277" ], "pages": "30", "publicationTitle": "National Review", @@ -16190,7 +16190,7 @@ "itemID": 456, "itemType": "journalArticle", "notes": [ - "ID: TNgale\u2092fg594089998" + "ID: TN_gale_ofg594089998" ], "pages": "40", "publicationTitle": "The New Republic", @@ -16216,7 +16216,7 @@ "itemID": 457, "itemType": "journalArticle", "notes": [ - "ID: TN\u209aroquest1297371156" + "ID: TN_proquest1297371156" ], "pages": "197", "publicationTitle": "a Forum on Fiction", @@ -16268,7 +16268,7 @@ "itemID": 459, "itemType": "journalArticle", "notes": [ - "ID: TN\u209aroquest2365267915" + "ID: TN_proquest2365267915" ], "pages": "36-38", "publicationTitle": "Psychology Today", @@ -16293,7 +16293,7 @@ "itemID": 460, "itemType": "journalArticle", "notes": [ - "ID: TNgale\u2092fa9375756" + "ID: TN_gale_ofa9375756" ], "pages": "221", "publicationTitle": "RQ", @@ -16346,7 +16346,7 @@ "itemType": "journalArticle", "pages": "145-197", "publicationTitle": "Research in the Teaching of English", - "title": "Children's literature at the turn of the century: \"Toward a Political Economy of the Publishing Industry\"", + "title": "Children's literature at the turn of the century: \"Toward a political economy of the publishing industry\"", "url": "https://www.jstor.org/stable/40171621", "volume": "37" }, @@ -16390,7 +16390,7 @@ "itemID": 464, "itemType": "journalArticle", "notes": [ - "ID: TN\u209aroquest1312023762" + "ID: TN_proquest1312023762" ], "pages": "93", "publicationTitle": "Signal", @@ -16417,7 +16417,7 @@ "itemID": 465, "itemType": "journalArticle", "notes": [ - "ID: TNcdichadwyckhealey\u2090bellR02199600" + "ID: TN_cdi_chadwyckhealey_abell_R02199600" ], "pages": "329-343", "publicationTitle": "Style (University Park, PA)", @@ -16442,7 +16442,7 @@ "itemID": 466, "itemType": "journalArticle", "notes": [ - "ID: TNwos000331415500010" + "ID: TN_wos000331415500010" ], "pages": "89-100", "publicationTitle": "Filozofia", @@ -16469,7 +16469,7 @@ "itemID": 467, "itemType": "journalArticle", "notes": [ - "ID: TN\u209aroquest2308830547" + "ID: TN_proquest2308830547" ], "pages": "52-57", "publicationTitle": "Reason", @@ -16496,7 +16496,7 @@ "itemID": 468, "itemType": "journalArticle", "notes": [ - "ID: TN\u209aroquest2213786436" + "ID: TN_proquest2213786436" ], "pages": "58-63", "publicationTitle": "Reason", @@ -16531,7 +16531,7 @@ "itemID": 469, "itemType": "journalArticle", "publicationTitle": "Research note", - "title": "All reviews are not created equal: The disaggregate impact of reviews and reviewers at Amazon.Com" + "title": "All reviews are not created equal: The disaggregate impact of reviews and reviewers at amazon.com" }, { "ISSN": "0094-5366", @@ -16556,7 +16556,7 @@ "itemID": 470, "itemType": "journalArticle", "notes": [ - "ID: TNgale\u2097itrc603632628" + "ID: TN_gale_litrc603632628" ], "pages": "1", "publicationTitle": "Bilingual Review", @@ -16581,7 +16581,7 @@ "itemID": 471, "itemType": "journalArticle", "notes": [ - "ID: TNgale\u2092fg455183834" + "ID: TN_gale_ofg455183834" ], "pages": "22", "publicationTitle": "Voice of Youth Advocates", @@ -16606,7 +16606,7 @@ "itemID": 472, "itemType": "journalArticle", "notes": [ - "ID: TNgale\u2092fg347403589" + "ID: TN_gale_ofg347403589" ], "pages": "51", "publicationTitle": "Voice of Youth Advocates", @@ -16631,7 +16631,7 @@ "itemID": 473, "itemType": "journalArticle", "notes": [ - "ID: TNgale\u2092fg409832259" + "ID: TN_gale_ofg409832259" ], "pages": "45", "publicationTitle": "Voice of Youth Advocates", @@ -16656,7 +16656,7 @@ "itemID": 474, "itemType": "journalArticle", "notes": [ - "ID: TNgale\u2092fg484156269" + "ID: TN_gale_ofg484156269" ], "pages": "43", "publicationTitle": "Voice of Youth Advocates", @@ -16681,7 +16681,7 @@ "itemID": 475, "itemType": "journalArticle", "notes": [ - "ID: TNgale\u2092fg529357095" + "ID: TN_gale_ofg529357095" ], "pages": "39", "publicationTitle": "Voice of Youth Advocates", @@ -16743,7 +16743,7 @@ "itemType": "journalArticle", "journalAbbreviation": "Esquire", "notes": [ - "ID: TNgale\u2092fa589559574" + "ID: TN_gale_ofa589559574" ], "pages": "22", "publicationTitle": "Esquire (New York, N.Y.)", @@ -16859,7 +16859,7 @@ "itemID": 480, "itemType": "journalArticle", "notes": [ - "ID: TN\u209aroquest1290173911" + "ID: TN_proquest1290173911" ], "pages": "587", "publicationTitle": "Language Arts", @@ -16908,7 +16908,7 @@ "itemID": 482, "itemType": "journalArticle", "notes": [ - "ID: TN\u209aroquest2339023315" + "ID: TN_proquest2339023315" ], "pages": "42-43", "publicationTitle": "Mother Jones", @@ -16934,7 +16934,7 @@ "itemID": 483, "itemType": "journalArticle", "notes": [ - "ID: TNgale\u2092fa358427046" + "ID: TN_gale_ofa358427046" ], "pages": "17", "publicationTitle": "School Library Journal", @@ -16959,7 +16959,7 @@ "itemID": 484, "itemType": "journalArticle", "notes": [ - "ID: TNgale\u2092fa399886794" + "ID: TN_gale_ofa399886794" ], "pages": "17", "title": "Value judgment: evaluating books, labels, and programs.(Scales on Censorship)(Column)", @@ -16973,11 +16973,11 @@ "itemID": 485, "itemType": "journalArticle", "notes": [ - "ID: TNgale\u2092fg621477024" + "ID: TN_gale_ofg621477024" ], "pages": "1", "publicationTitle": "New Criterion", - "title": "Cancel culture comstockery.(Notes & comments: April 2020)", + "title": "Cancel culture comstockery.(notes & comments: April 2020)", "volume": "38" }, { @@ -17059,11 +17059,11 @@ "itemID": 488, "itemType": "journalArticle", "notes": [ - "ID: TNwanfangjourhwyy-z201107119" + "ID: TN_wanfang_jourhwyy-z201107119" ], "pages": "224-225", "publicationTitle": "\u6d77\u5916\u82f1\u8bed(\u4e2d\u65ec\u520a)", - "title": "What the author really is roland barthes vs. Michel foucault" + "title": "What the author really is roland barthes vs. michel foucault" }, { "ISSN": "1054-7711", @@ -17084,7 +17084,7 @@ "itemID": 489, "itemType": "journalArticle", "notes": [ - "ID: TN\u209aroquest2280498596" + "ID: TN_proquest2280498596" ], "publicationTitle": "Allure", "title": "Blurred of mouth", @@ -17146,7 +17146,7 @@ ], "pages": "7-9", "publicationTitle": "Voices From the Middle", - "title": "Are you as \"Literate\" as your students?", + "title": "Are you as \"literate\" as your students?", "url": "http://ezproxy.library.arizona.edu/login?url=https://www-proquest-com.ezproxy4.library.arizona.edu/docview/1011487043?accountid=8360", "volume": "19" }, @@ -17210,7 +17210,7 @@ "itemID": 493, "itemType": "journalArticle", "notes": [ - "ID: TN\u2091ric\u209bEJ605246" + "ID: TN_eric_sEJ605246" ], "pages": "28", "publicationTitle": "Knowledge Quest", @@ -17314,7 +17314,7 @@ "itemType": "journalArticle", "journalAbbreviation": "New Statesman", "notes": [ - "ID: TN\u209aroquest2230263088" + "ID: TN_proquest2230263088" ], "pages": "48-50", "publicationTitle": "New statesman (London, England : 1957)", @@ -17436,7 +17436,7 @@ "itemType": "journalArticle", "pages": "6-17", "publicationTitle": "Journal of Children's Literature", - "title": "Much ado about a \"Fine Dessert\": The cultural politics of representing slavery in children's literature", + "title": "Much ado about a \"fine dessert\": The cultural politics of representing slavery in children's literature", "volume": "42" }, { @@ -17449,7 +17449,7 @@ "lastName": "Campbell" } ], - "date": "2018-6", + "date": "2018-06", "extra": [ "Citation Key: Campbell2018", "Publisher: American Library Association" @@ -17510,11 +17510,11 @@ "itemID": 502, "itemType": "journalArticle", "notes": [ - "ID: TNgale\u2092fa329269019" + "ID: TN_gale_ofa329269019" ], "pages": "201", "publicationTitle": "Communication, Culture and Critique", - "title": "Stuart hall's \"Deconstructing the Popular\": Reconsiderations 30 years later", + "title": "Stuart hall's \"deconstructing the popular\": Reconsiderations 30 years later", "volume": "6" }, { @@ -17667,7 +17667,7 @@ "itemID": 509, "itemType": "journalArticle", "notes": [ - "ID: TN\u209bcopus2-s2.0-85034449785" + "ID: TN_scopus2-s2.0-85034449785" ], "pages": "2071-2092", "publicationTitle": "International Journal of Communication", @@ -17692,7 +17692,7 @@ "itemID": 510, "itemType": "journalArticle", "notes": [ - "ID: TNdoaj\u209boaidoaj\u2092rg\u2090rticle\u2084340117d36424b928b6072d6d9c67608" + "ID: TN_doaj_soai_doaj_org_article_4340117d36424b928b6072d6d9c67608" ], "publicationTitle": "Transformative Works and Cultures", "title": "Narrative extraction, #BlackPantherSoLit, and signifyin': \"Black Panther\" fandom and transformative social practices", @@ -17724,7 +17724,7 @@ "itemID": 511, "itemType": "journalArticle", "notes": [ - "Source type: Scholarly Journals; Object type: Editorial; Object type: Commentary; Copyright: Copyright University of Waikato, Department of English May 2011; DOCID: 2602001211; PCID: 67792272; PMID: 155333; ProvJournalCode: NGTC; PublisherXID: ICANGTCNGTCv10n1\u20820110501541" + "Source type: Scholarly Journals; Object type: Editorial; Object type: Commentary; Copyright: Copyright University of Waikato, Department of English May 2011; DOCID: 2602001211; PCID: 67792272; PMID: 155333; ProvJournalCode: NGTC; PublisherXID: ICANGTC_NGTC_v10n1_20110501541" ], "pages": "1-n/a", "publicationTitle": "English Teaching", @@ -17758,7 +17758,7 @@ "itemID": 512, "itemType": "journalArticle", "notes": [ - "Source type: Scholarly Journals; Object type: Feature; Object type: Article; Copyright: Copyright University of Waikato, Department of English May 2011; DOCID: 2602001181; PCID: 67792272; PMID: 155333; ProvJournalCode: NGTC; PublisherXID: ICANGTCNGTCv10n1\u208201105016901" + "Source type: Scholarly Journals; Object type: Feature; Object type: Article; Copyright: Copyright University of Waikato, Department of English May 2011; DOCID: 2602001181; PCID: 67792272; PMID: 155333; ProvJournalCode: NGTC; PublisherXID: ICANGTC_NGTC_v10n1_201105016901" ], "pages": "41-57", "publicationTitle": "English Teaching", diff --git a/translators/Better BibTeX.ts b/translators/Better BibTeX.ts index 88dfac0191..73952bb749 100644 --- a/translators/Better BibTeX.ts +++ b/translators/Better BibTeX.ts @@ -93,6 +93,7 @@ export async function doImport(): Promise { let imported = 0 let id = 0 for (const bibtex of bib.entries) { + await Zotero.Promise.delay(100) if (bibtex.key && whitelist && !whitelist.includes(bibtex.key.toLowerCase())) continue id++ diff --git a/translators/bibtex/bibtex.ts b/translators/bibtex/bibtex.ts index e092ef176c..632e9d41e8 100644 --- a/translators/bibtex/bibtex.ts +++ b/translators/bibtex/bibtex.ts @@ -1314,6 +1314,7 @@ export class ZoteroItem { const urls: Set = new Set for (let [field, values] of Object.entries(this.bibtex.fields)) { + if (Array.isArray(values) && this.bibtex.mode[field] === 'literallist') values = values.join(' and ') if (typeof values === 'string') values = [ values ] for (const value of values) { From 71b1c94ee5698b495b722bc2511ab1ef7a0af883 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Mon, 15 Apr 2024 14:40:10 +0200 Subject: [PATCH 047/177] own delay --- submodules/zotero | 2 +- translators/Better BibTeX.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/submodules/zotero b/submodules/zotero index df014bfb0b..cdacc42fd2 160000 --- a/submodules/zotero +++ b/submodules/zotero @@ -1 +1 @@ -Subproject commit df014bfb0b73f0c4d33b8996cca0482b4ea5dbb5 +Subproject commit cdacc42fd2071967bc76e6781542d03a3659cf6a diff --git a/translators/Better BibTeX.ts b/translators/Better BibTeX.ts index 73952bb749..2176f826b3 100644 --- a/translators/Better BibTeX.ts +++ b/translators/Better BibTeX.ts @@ -93,7 +93,7 @@ export async function doImport(): Promise { let imported = 0 let id = 0 for (const bibtex of bib.entries) { - await Zotero.Promise.delay(100) + await new Promise(resolve => setTimeout(resolve, 100)) if (bibtex.key && whitelist && !whitelist.includes(bibtex.key.toLowerCase())) continue id++ From 719e28563f4f8de6378808b7aeb77dcbd970e298 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Mon, 15 Apr 2024 23:02:54 +0200 Subject: [PATCH 048/177] parser --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 681cb2b9fb..ad061fca62 100644 --- a/package-lock.json +++ b/package-lock.json @@ -60,7 +60,7 @@ "zotero-plugin": "2.0.14" }, "devDependencies": { - "@retorquere/bibtex-parser": "^9.0.3", + "@retorquere/bibtex-parser": "^9.0.6", "@retorquere/zotero-sync": "^1.0.27", "@types/bluebird": "^3.5.42", "@types/lokijs": "^1.5.14", @@ -2987,9 +2987,9 @@ } }, "node_modules/@retorquere/bibtex-parser": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/@retorquere/bibtex-parser/-/bibtex-parser-9.0.3.tgz", - "integrity": "sha512-v4ZcqCMZgm74WbCA+LnhSjkg+fKrWiMETMuA3+/AVsIonmla15zjzLqiq+SmT58/2vtU95yCZwV+0dmDYrTPfw==", + "version": "9.0.6", + "resolved": "https://registry.npmjs.org/@retorquere/bibtex-parser/-/bibtex-parser-9.0.6.tgz", + "integrity": "sha512-jnmZrFeMCY6mEY+emp2a46N5pLCfpvcigo/qfy5YrykebwsMqkh1n2D9GSsU+fXePVBB22qr1z8GWzcVeKE+sg==", "dev": true, "dependencies": { "@unified-latex/unified-latex-util-pegjs": "^1.7.1", diff --git a/package.json b/package.json index 256eba0dd1..c5e9d302c8 100644 --- a/package.json +++ b/package.json @@ -114,7 +114,7 @@ "zotero-plugin": "2.0.14" }, "devDependencies": { - "@retorquere/bibtex-parser": "^9.0.3", + "@retorquere/bibtex-parser": "^9.0.6", "@retorquere/zotero-sync": "^1.0.27", "@types/bluebird": "^3.5.42", "@types/lokijs": "^1.5.14", From 759095d616f42264f552ab390f511dedd09931bc Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Mon, 15 Apr 2024 23:13:56 +0200 Subject: [PATCH 049/177] parser --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index ad061fca62..7e38df7918 100644 --- a/package-lock.json +++ b/package-lock.json @@ -60,7 +60,7 @@ "zotero-plugin": "2.0.14" }, "devDependencies": { - "@retorquere/bibtex-parser": "^9.0.6", + "@retorquere/bibtex-parser": "^9.0.7", "@retorquere/zotero-sync": "^1.0.27", "@types/bluebird": "^3.5.42", "@types/lokijs": "^1.5.14", @@ -2987,9 +2987,9 @@ } }, "node_modules/@retorquere/bibtex-parser": { - "version": "9.0.6", - "resolved": "https://registry.npmjs.org/@retorquere/bibtex-parser/-/bibtex-parser-9.0.6.tgz", - "integrity": "sha512-jnmZrFeMCY6mEY+emp2a46N5pLCfpvcigo/qfy5YrykebwsMqkh1n2D9GSsU+fXePVBB22qr1z8GWzcVeKE+sg==", + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/@retorquere/bibtex-parser/-/bibtex-parser-9.0.7.tgz", + "integrity": "sha512-ToYMboB4xAwDQLJy1dq1jjZb8VHqjJfx1CWivHTA+M0WFRCx82qV86WS3Hbp/ueIZIpp/WsE97jzXFVCpetI7A==", "dev": true, "dependencies": { "@unified-latex/unified-latex-util-pegjs": "^1.7.1", diff --git a/package.json b/package.json index c5e9d302c8..e105d11a9e 100644 --- a/package.json +++ b/package.json @@ -114,7 +114,7 @@ "zotero-plugin": "2.0.14" }, "devDependencies": { - "@retorquere/bibtex-parser": "^9.0.6", + "@retorquere/bibtex-parser": "^9.0.7", "@retorquere/zotero-sync": "^1.0.27", "@types/bluebird": "^3.5.42", "@types/lokijs": "^1.5.14", From edac9207ada45aa1a94c13b6a341fa2a294d5896 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Tue, 16 Apr 2024 10:24:34 +0200 Subject: [PATCH 050/177] parser updates --- content/ErrorReport.ts | 46 +++++++++++++++++++ package-lock.json | 8 ++-- package.json | 2 +- ...iscarded on import from bib file #873.json | 2 +- .../Unabbreviate on import #1436-1.json | 19 ++++---- translators/Better BibTeX.ts | 4 +- 6 files changed, 63 insertions(+), 18 deletions(-) diff --git a/content/ErrorReport.ts b/content/ErrorReport.ts index 01b4418f25..712c583b7e 100644 --- a/content/ErrorReport.ts +++ b/content/ErrorReport.ts @@ -7,7 +7,10 @@ const $OS = is7 ? Shim : OS import { PromptService } from './prompt' import { Preference } from './prefs' + import { defaults } from '../gen/preferences/meta' +const supported: string[] = Object.keys(defaults).filter(name => !['client', 'testing', 'platform', 'newTranslatorsAskRestart'].includes(name)) + import { byId } from '../gen/translators' import { log } from './logger' import { AutoExport } from './auto-export' @@ -186,6 +189,31 @@ export class ErrorReport { return (Zotero.getErrors(true) as string[]).filter(line => !ignore.find(re => line.match(re))).join('\n') } + cleanItem(item: any): boolean { + delete item.libraryID + delete item.uri + delete item.relations + delete item.select + delete item.itemKey + delete item.contentType + delete item.filename + delete item.defaultPath + + delete item.multi + + if (att.path) att.path = att.path.replace(/.*\/zotero\/storage\/[^/]+/, 'ATTACHMENT_KEY') + + for (const creator of (item.creators || [])) { + delete creator.multi + } + + if (item.attachments) { + for (const att of item.attachments) { + this.cleanItem(att) + } + } + } + public async load(win: Window & { ErrorReport: ErrorReport, arguments: any[] }): Promise { this.document = win.document win.ErrorReport = this @@ -211,6 +239,24 @@ export class ErrorReport { items: win.arguments[0].wrappedJSObject.items, } + if (this.errorlog.items) { + log.debug('ITEMS::', this.errorlog.items) + const lib = JSON.parse(this.errorlog.items) + + for (const item of (lib.items || [])) { + this.cleanItem(item) + } + + if (lib.config.preferences) { + for (const [pref, value] of Object.entries(items.config.preferences)) { + if (!supported.includes(pref) || value === defaults[pref]) delete items.config.preferences[pref] + } + } + + this.errorlog.items = JSON.stringify(items, null, 2) + log.debug('SCRUBBED::', this.errorlog.items) + } + const acronyms = $OS.Path.join(Zotero.BetterBibTeX.dir, 'acronyms.csv') if (await $OS.File.exists(acronyms)) this.errorlog.acronyms = await $OS.File.read(acronyms, { encoding: 'utf-8' }) as unknown as string diff --git a/package-lock.json b/package-lock.json index 7e38df7918..9f0cbac953 100644 --- a/package-lock.json +++ b/package-lock.json @@ -60,7 +60,7 @@ "zotero-plugin": "2.0.14" }, "devDependencies": { - "@retorquere/bibtex-parser": "^9.0.7", + "@retorquere/bibtex-parser": "^9.0.10", "@retorquere/zotero-sync": "^1.0.27", "@types/bluebird": "^3.5.42", "@types/lokijs": "^1.5.14", @@ -2987,9 +2987,9 @@ } }, "node_modules/@retorquere/bibtex-parser": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/@retorquere/bibtex-parser/-/bibtex-parser-9.0.7.tgz", - "integrity": "sha512-ToYMboB4xAwDQLJy1dq1jjZb8VHqjJfx1CWivHTA+M0WFRCx82qV86WS3Hbp/ueIZIpp/WsE97jzXFVCpetI7A==", + "version": "9.0.10", + "resolved": "https://registry.npmjs.org/@retorquere/bibtex-parser/-/bibtex-parser-9.0.10.tgz", + "integrity": "sha512-LRvvIrovUApqq8yewEq0z+Cy6FyR1y6EuG/Tn9oaa3JEsCUbsF1eWiifV0AiHNKt90Vp6Zlat7AVndGThkMWDw==", "dev": true, "dependencies": { "@unified-latex/unified-latex-util-pegjs": "^1.7.1", diff --git a/package.json b/package.json index e105d11a9e..aeed34bea0 100644 --- a/package.json +++ b/package.json @@ -114,7 +114,7 @@ "zotero-plugin": "2.0.14" }, "devDependencies": { - "@retorquere/bibtex-parser": "^9.0.7", + "@retorquere/bibtex-parser": "^9.0.10", "@retorquere/zotero-sync": "^1.0.27", "@types/bluebird": "^3.5.42", "@types/lokijs": "^1.5.14", diff --git a/test/fixtures/import/Some bibtex entries quietly discarded on import from bib file #873.json b/test/fixtures/import/Some bibtex entries quietly discarded on import from bib file #873.json index ad38a1b364..d31ab8e080 100644 --- a/test/fixtures/import/Some bibtex entries quietly discarded on import from bib file #873.json +++ b/test/fixtures/import/Some bibtex entries quietly discarded on import from bib file #873.json @@ -13911,7 +13911,7 @@ "Contains a description of the typed, object-oriented, language for HTN planners. The work is interesting and offers checking to make sure that transitions are well-founded, in terms of the objects that make up the domain. Somewhat limited, however, in terms of the richness of the object hierarchy, and the sorts of things that an HTN method is allowed to do. There's a discussion of how OCL\u2095 could be used to formalize O-Plan operators." ], "publisher": "Department of Computer Science, The University of Huddersfield", - "title": "OCL\u2095: a sound and supportive planning domain modelling language" + "title": "OCL\u2095: a sound and supportive planning domain modelling language" }, { "citationKey": "McCorduck:79", diff --git a/test/fixtures/import/Unabbreviate on import #1436-1.json b/test/fixtures/import/Unabbreviate on import #1436-1.json index d2c2eb7c40..dd2bb4e5c6 100644 --- a/test/fixtures/import/Unabbreviate on import #1436-1.json +++ b/test/fixtures/import/Unabbreviate on import #1436-1.json @@ -555,7 +555,7 @@ "journalAbbreviation": "J. Surf. Investig. X-Ray Synchrotron Neutron Tech.", "pages": "12a", "publicationTitle": "Journal of Surface Investigation: X-ray, Synchrotron and Neutron Techniques", - "title": "Caract\u00e9risation des dispositifs Opto-\u00c9lectroniques par microscopy \u00e0 balayage", + "title": "Caract\u00e9risation des dispositifs opto-\u00e9lectroniques par microscopy \u00e0 balayage", "volume": "14" }, { @@ -4188,9 +4188,8 @@ "issue": "4", "itemID": 91, "itemType": "journalArticle", - "journalAbbreviation": "Small", "pages": "467\u2013470", - "publicationTitle": "Small (Weinheim an der Bergstrasse, Germany)", + "publicationTitle": "Small", "title": "Probing exciton diffusion in semiconductors using semiconductor-nanorod quantum structures", "volume": "4" }, @@ -4668,7 +4667,7 @@ "journalAbbreviation": "Adv. Mater.", "pages": "3755\u20133760", "publicationTitle": "Advanced Materials", - "title": "Monolithic III-V Nanowire Solar Cells on Graphene via Direct van der Waals Epitaxy", + "title": "Monolithic III-V Nanowire Solar Cells on Graphene via Direct van Der Waals Epitaxy", "volume": "26" }, { @@ -5465,9 +5464,8 @@ "issue": "7", "itemID": 115, "itemType": "journalArticle", - "journalAbbreviation": "Small", "pages": "899\u2013903", - "publicationTitle": "Small (Weinheim an der Bergstrasse, Germany)", + "publicationTitle": "Small", "title": "Prismatic Quantum Heterostructures Synthesized on Molecular-Beam Epitaxy GaAs Nanowires", "volume": "4" }, @@ -12309,7 +12307,7 @@ "journalAbbreviation": "Appl. Phys. Lett.", "pages": "043109", "publicationTitle": "Applied Physics Letters", - "title": "Large redshift in photoluminescence of P-doped InP nanowires induced by Fermi-Level pinning", + "title": "Large redshift in photoluminescence of p-doped InP nanowires induced by Fermi-Level pinning", "volume": "88" }, { @@ -14900,7 +14898,7 @@ "journalAbbreviation": "Appl. Phys. Lett.", "pages": "213113", "publicationTitle": "Applied Physics Letters", - "title": "Environmental sensitivity of N-i-n and undoped single GaN nanowire photodetectors", + "title": "Environmental sensitivity of n-i-n and undoped single GaN nanowire photodetectors", "volume": "102" }, { @@ -22927,9 +22925,8 @@ "issue": "5158", "itemID": 454, "itemType": "journalArticle", - "journalAbbreviation": "Science", "pages": "553\u2013556", - "publicationTitle": "Science (New York, N.Y.)", + "publicationTitle": "Science", "title": "Quantum Cascade Laser", "volume": "264" }, @@ -23632,7 +23629,7 @@ "journalAbbreviation": "J. Opt. Soc. Am.", "pages": "742\u2013744", "publicationTitle": "Journal of The Optical Society of America", - "title": "Optical constants from the far infrared to the X-ray region: Mg, Al, Cu, Ag, Au, Bi, C, and Al2O3", + "title": "Optical constants from the far infrared to the x-ray region: Mg, Al, Cu, Ag, Au, Bi, C, and Al2O3", "volume": "65" }, { diff --git a/translators/Better BibTeX.ts b/translators/Better BibTeX.ts index 2176f826b3..85a66f6f70 100644 --- a/translators/Better BibTeX.ts +++ b/translators/Better BibTeX.ts @@ -82,7 +82,9 @@ export async function doImport(): Promise { if (translation.preferences.strings && translation.preferences.importBibTeXStrings) input = `${translation.preferences.strings}\n${input}` + const start = Date.now() const bib = await Zotero.BetterBibTeX.parseBibTeX(input, translation) + Zotero.debug(`parsed ${bib.entries.length} items in ${Date.now() - start}msec`) const errors: ParseError[] = bib.errors const whitelist = bib.comments @@ -93,10 +95,10 @@ export async function doImport(): Promise { let imported = 0 let id = 0 for (const bibtex of bib.entries) { - await new Promise(resolve => setTimeout(resolve, 100)) if (bibtex.key && whitelist && !whitelist.includes(bibtex.key.toLowerCase())) continue id++ + if ((id % 1000) === 0) await new Promise(resolve => setTimeout(resolve, 0)) if (bibtex.key) itemIDS[bibtex.key] = id // Endnote has no citation keys From 6d7ff19447eb81004d31f18a5e2d42edf09a974d Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Tue, 16 Apr 2024 10:25:05 +0200 Subject: [PATCH 051/177] parser updates --- submodules/biblatex | 2 +- submodules/zotero | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/submodules/biblatex b/submodules/biblatex index 533b1ee6ab..b73fa2f17e 160000 --- a/submodules/biblatex +++ b/submodules/biblatex @@ -1 +1 @@ -Subproject commit 533b1ee6ab1d7b1b61d830125ebad6375204cf81 +Subproject commit b73fa2f17ee97b03a23a5a2c320f10d080856110 diff --git a/submodules/zotero b/submodules/zotero index cdacc42fd2..363f97325f 160000 --- a/submodules/zotero +++ b/submodules/zotero @@ -1 +1 @@ -Subproject commit cdacc42fd2071967bc76e6781542d03a3659cf6a +Subproject commit 363f97325feda4143144e3d6763e065c20131718 From b2bb28ddd2ff354b105ebaa9d42670d6b43a6970 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Tue, 16 Apr 2024 10:41:32 +0200 Subject: [PATCH 052/177] data min --- content/ErrorReport.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/content/ErrorReport.ts b/content/ErrorReport.ts index 712c583b7e..26b6e0633c 100644 --- a/content/ErrorReport.ts +++ b/content/ErrorReport.ts @@ -189,7 +189,7 @@ export class ErrorReport { return (Zotero.getErrors(true) as string[]).filter(line => !ignore.find(re => line.match(re))).join('\n') } - cleanItem(item: any): boolean { + private cleanItem(item: any) { delete item.libraryID delete item.uri delete item.relations @@ -201,7 +201,7 @@ export class ErrorReport { delete item.multi - if (att.path) att.path = att.path.replace(/.*\/zotero\/storage\/[^/]+/, 'ATTACHMENT_KEY') + if (item.path) item.path = item.path.replace(/.*\/zotero\/storage\/[^/]+/, 'ATTACHMENT_KEY') for (const creator of (item.creators || [])) { delete creator.multi @@ -242,18 +242,18 @@ export class ErrorReport { if (this.errorlog.items) { log.debug('ITEMS::', this.errorlog.items) const lib = JSON.parse(this.errorlog.items) - + for (const item of (lib.items || [])) { this.cleanItem(item) } if (lib.config.preferences) { - for (const [pref, value] of Object.entries(items.config.preferences)) { - if (!supported.includes(pref) || value === defaults[pref]) delete items.config.preferences[pref] + for (const [pref, value] of Object.entries(lib.config.preferences)) { + if (!supported.includes(pref) || value === defaults[pref]) delete lib.config.preferences[pref] } } - this.errorlog.items = JSON.stringify(items, null, 2) + this.errorlog.items = JSON.stringify(lib, null, 2) log.debug('SCRUBBED::', this.errorlog.items) } From f810b2861cd9d20445235d0f5f285af9d7427746 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Tue, 16 Apr 2024 15:09:39 +0200 Subject: [PATCH 053/177] data minimization --- content/ErrorReport.pug | 26 +++-- content/ErrorReport.ts | 188 +++++++++++++++++++++------------ locale/en-US/better-bibtex.ftl | 11 +- submodules/zotero | 2 +- 4 files changed, 145 insertions(+), 82 deletions(-) diff --git a/content/ErrorReport.pug b/content/ErrorReport.pug index 3f336f5d97..a19c1f4269 100644 --- a/content/ErrorReport.pug +++ b/content/ErrorReport.pug @@ -27,22 +27,28 @@ wizard#better-bibtex-error-report( textbox#better-bibtex-report-latest.plain.textbox-emph(flex='1' readonly='true') textbox#better-bibtex-report-oom.plain.textbox-emph(hidden='true' flex='1' multiline='true' readonly='true' value='&better-bibtex_error-report_better-bibtex_oom.value;') textbox#better-bibtex-report-cache.plain(flex='1' readonly='true') - checkbox#better-bibtex-error-report-include-db(label='&better-bibtex_error-report_include-cache.label;')/ - tabbox.debug-on(flex='1') + checkbox#better-bibtex-error-report-include-errors(label='&better-bibtex_error-report_include-errors.label;')/ + checkbox#better-bibtex-error-report-include-log(label='&better-bibtex_error-report_include-log.label;')/ + hbox + checkbox#better-bibtex-error-report-include-items(label='&better-bibtex_error-report_include-cache.label;')/ + checkbox#better-bibtex-error-report-include-notes(label='&better-bibtex_error-report_include-notes.label;')/ + checkbox#better-bibtex-error-report-include-attachments(label='&better-bibtex_error-report_include-attachments.label;')/ + hbox(flex='1') + tabbox.debug-on(flex='10') tabs - tab(label='&better-bibtex_error-report_context.label;')/ - tab(label='&better-bibtex_error-report_errors.label;')/ - tab(label='&better-bibtex_error-report_debug.label;')/ - tab#better-bibtex-error-tab-items(label='&better-bibtex_error-report_items.label;')/ + tab#better-bibtex-error-context-tab(label='&better-bibtex_error-report_context.label;')/ + tab#better-bibtex-error-errors-tab(label='&better-bibtex_error-report_errors.label;')/ + tab#better-bibtex-error-log-tab(label='&better-bibtex_error-report_debug.label;')/ + tab#better-bibtex-error-items-tab(label='&better-bibtex_error-report_items.label;')/ tabpanels tabpanel(orient='vertical') - textbox#better-bibtex-error-context.plain(readonly='true' multiline='true' flex='1' style='min-height: 8em;') + textbox#better-bibtex-error-context.plain(readonly='true' multiline='true' flex='10' style='min-height: 8em;') tabpanel(orient='vertical') - textbox#better-bibtex-error-errors.plain(readonly='true' multiline='true' flex='1' style='min-height: 8em;') + textbox#better-bibtex-error-errors.plain(readonly='true' multiline='true' flex='10' style='min-height: 8em;') tabpanel(orient='vertical') - textbox#better-bibtex-error-debug.plain(readonly='true' multiline='true' flex='1' style='min-height: 8em;') + textbox#better-bibtex-error-log.plain(readonly='true' multiline='true' flex='10' style='min-height: 8em;') tabpanel(orient='vertical') - textbox#better-bibtex-error-items.plain(readonly='true' multiline='true' flex='1' style='min-height: 8em;') + textbox#better-bibtex-error-items.plain(readonly='true' multiline='true' flex='10' style='min-height: 8em;') hbox button(label='&better-bibtex_error-report_save.label;' oncommand='window.ErrorReport.save()')/ hbox(flex='1')/ diff --git a/content/ErrorReport.ts b/content/ErrorReport.ts index 26b6e0633c..4b700d7a50 100644 --- a/content/ErrorReport.ts +++ b/content/ErrorReport.ts @@ -54,13 +54,27 @@ export class ErrorReport { private bucket: string private cacheState: string - private errorlog: { - info: string + private input: { + context: string errors: string - debug: string + log: string items?: string acronyms?: string } + private report: { + context: string + errors: string + log: string + items?: string + acronyms?: string + } + private config: { + errors: boolean + log: boolean + items: boolean + notes: boolean + attachments: boolean + } public async send(): Promise { const wizard: Wizard = this.document.getElementById('better-bibtex-error-report') as Wizard @@ -93,7 +107,7 @@ export class ErrorReport { } catch (err) { log.error('failed to submit', this.key, err) - alert({ text: `${err} (${this.key}, items: ${!!this.errorlog.items})`, title: Zotero.getString('general.error') }) + alert({ text: `${err} (${this.key}, items: ${!!this.report.items})`, title: Zotero.getString('general.error') }) if (wizard.rewind) wizard.rewind() } } @@ -141,20 +155,14 @@ export class ErrorReport { const tape = new Tar let out: Uint8Array - out = tape.append(`${this.key}/debug.txt`, [ - this.errorlog.info, - this.cacheState, - this.errorlog.errors, - this.errorlog.debug, - ].filter(chunk => chunk).join('\n\n')) - - if (this.errorlog.items) out = tape.append(`${this.key}/items.json`, this.errorlog.items) - if (this.errorlog.acronyms) out = tape.append(`${this.key}/acronyms.csv`, this.errorlog.acronyms) + out = tape.append(`${this.key}/debug.txt`, this.report.log) - if ((this.document.getElementById('better-bibtex-error-report-include-db')).checked) { + if (this.report.items) { + out = tape.append(`${this.key}/items.json`, this.report.items) out = tape.append(`${this.key}/database.json`, JSON.stringify(KeyManager.all())) out = tape.append(`${this.key}/cache.json`, Cache.serialize({ serializationMethod: 'pretty' })) } + if (this.report.acronyms) out = tape.append(`${this.key}/acronyms.csv`, this.report.acronyms) return gzip(out) } @@ -171,7 +179,12 @@ export class ErrorReport { } private setValue(id: string, value: string) { - (this.document.getElementById(id)).value = value + const text = this.document.getElementById(id) + text.value = value + text.hidden = !value + + const tab = this.document.getElementById(`${id}-tab`) + if (tab) tab.hidden = !value } private errors(): string { @@ -190,6 +203,9 @@ export class ErrorReport { } private cleanItem(item: any) { + if (!this.config.attachments && item.itemType === 'attachment') return false + if (!this.config.notes && item.itemType === 'note') return false + delete item.libraryID delete item.uri delete item.relations @@ -207,11 +223,67 @@ export class ErrorReport { delete creator.multi } - if (item.attachments) { - for (const att of item.attachments) { - this.cleanItem(att) + for (const details of ['attachments', 'notes']) { + if (item[details]) { + item[details] = item[details].filter(detail => this.cleanItem(detail)) } } + + return true + } + + private reload() { + const init = typeof this.config === 'undefined' + this.config = { + errors: false, + log: false, + items: false, + notes: false, + attachments: false, + } + for (const facet of ['errors', 'log', 'items', 'attachments', 'notes']) { // atts & notes after items + const cb = this.document.getElementById(`better-bibtex-error-report-include-${facet}`) + if (init) cb.checked = true + this.config[facet] = cb.checked + if (facet === 'notes' || facet === 'attachments') cb.disabled = !this.config.items + } + log.debug('error report reload:', { init }, this.config) + + this.report = {...this.input} + + if (!this.config.items) delete this.report.items + if (this.report.items) { + const lib = JSON.parse(this.report.items) + + if (lib.items) lib.items = lib.items.filter(item => this.cleanItem(item)) + + delete lib.config.options + + if (lib.config.preferences) { + for (const [pref, value] of Object.entries(lib.config.preferences)) { + if (!supported.includes(pref) || value === defaults[pref]) delete lib.config.preferences[pref] + } + } + + this.report.items = JSON.stringify(lib, null, 2) + } + + if (!this.config.errors) delete this.report.errors + if (!this.config.log) delete this.report.log + + this.setValue('better-bibtex-error-context', this.report.context) + this.setValue('better-bibtex-error-errors', this.report.errors || '') + this.setValue('better-bibtex-error-log', this.preview(this.report.log || '')) + this.setValue('better-bibtex-error-items', this.preview(this.report.items || '')) + + this.setValue('better-bibtex-report-cache', this.cacheState = l10n.localize('better-bibtex_error-report_better-bibtex_cache', Cache.state())) + + this.report.log = [ + this.report.context, + this.cacheState, + this.report.errors, + this.report.log, + ].filter(chunk => chunk).join('\n\n') } public async load(win: Window & { ErrorReport: ErrorReport, arguments: any[] }): Promise { @@ -225,46 +297,26 @@ export class ErrorReport { wizard.getPageById('page-review').addEventListener('pageshow', this.show.bind(this)) wizard.getPageById('page-send').addEventListener('pageshow', () => { this.send().catch(err => log.debug('could not send debug log:', err)) }) wizard.getPageById('page-done').addEventListener('pageshow', this.show.bind(this)) + for (const facet of ['errors', 'log', 'items', 'notes', 'attachments']) { + (this.document.getElementById(`better-bibtex-error-report-include-${facet}`)).addEventListener('command', this.reload.bind(this)) + } wizard.pageIndex = Zotero.Debug.storing ? 1 : 0 const continueButton = wizard.getButton('next') continueButton.disabled = true - this.errorlog = { - info: await this.info(), + this.input = { + context: await this.context(), errors: `${Zotero.BetterBibTeX.outOfMemory}\n${this.errors()}`.trim(), // # 1896 - debug: Zotero.Debug.getConsoleViewerOutput().slice(-500000).join('\n'), + log: Zotero.Debug.getConsoleViewerOutput().slice(-500000).join('\n'), items: win.arguments[0].wrappedJSObject.items, } - - if (this.errorlog.items) { - log.debug('ITEMS::', this.errorlog.items) - const lib = JSON.parse(this.errorlog.items) - - for (const item of (lib.items || [])) { - this.cleanItem(item) - } - - if (lib.config.preferences) { - for (const [pref, value] of Object.entries(lib.config.preferences)) { - if (!supported.includes(pref) || value === defaults[pref]) delete lib.config.preferences[pref] - } - } - - this.errorlog.items = JSON.stringify(lib, null, 2) - log.debug('SCRUBBED::', this.errorlog.items) - } - const acronyms = $OS.Path.join(Zotero.BetterBibTeX.dir, 'acronyms.csv') - if (await $OS.File.exists(acronyms)) this.errorlog.acronyms = await $OS.File.read(acronyms, { encoding: 'utf-8' }) as unknown as string + if (await $OS.File.exists(acronyms)) this.input.acronyms = await $OS.File.read(acronyms, { encoding: 'utf-8' }) as unknown as string - this.setValue('better-bibtex-error-context', this.errorlog.info) - this.setValue('better-bibtex-error-errors', this.errorlog.errors) - this.setValue('better-bibtex-error-debug', this.preview(this.errorlog.debug)) - this.setValue('better-bibtex-error-items', this.preview(this.errorlog.items)) - this.document.getElementById('better-bibtex-error-tab-items').hidden = !this.errorlog.items + this.reload() const current = require('../gen/version.js') this.setValue('better-bibtex-report-current', l10n.localize('better-bibtex_error-report_better-bibtex_current', { version: current })) @@ -283,11 +335,9 @@ export class ErrorReport { (this.document.getElementById('better-bibtex-report-oom')).hidden = !Zotero.BetterBibTeX.outOfMemory - this.setValue('better-bibtex-report-cache', this.cacheState = l10n.localize('better-bibtex_error-report_better-bibtex_cache', Cache.state())) - const region = await Zotero.Promise.any(Object.keys(s3.region).map(this.ping.bind(this))) this.bucket = `https://${s3.bucket}-${region.short}.s3-${region.region}.amazonaws.com${region.tld || ''}` - this.key = `${Zotero.Utilities.generateObjectKey()}${this.errorlog.items ? '-refs' : ''}-${region.short}` // eslint-disable-line no-magic-numbers + this.key = `${Zotero.Utilities.generateObjectKey()}${this.report.items ? '-refs' : ''}-${region.short}` // eslint-disable-line no-magic-numbers this.tarball = `${this.key}-${this.timestamp}.tgz` @@ -306,59 +356,59 @@ export class ErrorReport { } // general state of Zotero - private async info() { - let info = '' + private async context() { + let context = '' const appInfo = Components.classes['@mozilla.org/xre/app-info;1'].getService(Components.interfaces.nsIXULAppInfo) - info += `Application: ${appInfo.name} (${Zotero.clientName}) ${appInfo.version} ${Zotero.locale}\n` - info += `Platform: ${Zotero.platform} ${Zotero.oscpu}\n` + context += `Application: ${appInfo.name} (${Zotero.clientName}) ${appInfo.version} ${Zotero.locale}\n` + context += `Platform: ${Zotero.platform} ${Zotero.oscpu}\n` const addons = await Zotero.getInstalledExtensions() if (addons.length) { - info += 'Addons:\n' + context += 'Addons:\n' for (const addon of addons) { - info += ` ${addon}\n` + context += ` ${addon}\n` } } - info += 'Settings:\n' + context += 'Settings:\n' const settings = { default: '', set: '' } for (const [key, value] of Object.entries(Preference.all)) { settings[value === defaults[key] ? 'default' : 'set'] += ` ${key} = ${JSON.stringify(value)}\n` } if (settings.default) settings.default = `Settings at default:\n${settings.default}` - info += settings.set + settings.default + context += settings.set + settings.default for (const key of ['export.quickCopy.setting']) { - info += ` Zotero: ${key} = ${JSON.stringify(Zotero.Prefs.get(key))}\n` + context += ` Zotero: ${key} = ${JSON.stringify(Zotero.Prefs.get(key))}\n` } const autoExports = await AutoExport.all() if (autoExports.length) { - info += 'Auto-exports:\n' + context += 'Auto-exports:\n' for (const ae of autoExports) { - info += ` path: ...${JSON.stringify($OS.Path.split(ae.path).components.pop())}` + context += ` path: ...${JSON.stringify($OS.Path.split(ae.path).components.pop())}` switch (ae.type) { case 'collection': - info += ` (${Zotero.Collections.get(ae.id)?.name || ''})` + context += ` (${Zotero.Collections.get(ae.id)?.name || ''})` break case 'library': - info += ` (${Zotero.Libraries.get(ae.id)?.name || ''})` + context += ` (${Zotero.Libraries.get(ae.id)?.name || ''})` break } - info += '\n' + context += '\n' for (const [k, v] of Object.entries(ae)) { if (k === 'path') continue - info += ` ${k}: ${JSON.stringify(v)}` - if (k === 'translatorID' && byId[v as string]) info += ` (${byId[v as string].label})` - info += '\n' + context += ` ${k}: ${JSON.stringify(v)}` + if (k === 'translatorID' && byId[v as string]) context += ` (${byId[v as string].label})` + context += '\n' } } } - info += `Zotero.Debug.storing: ${Zotero.Debug.storing}\n` - info += `Zotero.Debug.storing at start: ${Zotero.BetterBibTeX.debugEnabledAtStart}\n` + context += `Zotero.Debug.storing: ${Zotero.Debug.storing}\n` + context += `Zotero.Debug.storing at start: ${Zotero.BetterBibTeX.debugEnabledAtStart}\n` - return info + return context } } diff --git a/locale/en-US/better-bibtex.ftl b/locale/en-US/better-bibtex.ftl index 5f7ed8a571..dde8e6cbb2 100644 --- a/locale/en-US/better-bibtex.ftl +++ b/locale/en-US/better-bibtex.ftl @@ -30,13 +30,20 @@ better-bibtex_error-report_enable-debug = Zotero debug logging is currently disa better-bibtex_error-report_errors = .label = Errors +better-bibtex_error-report_include-errors = + .label = Include error messages +better-bibtex_error-report_include-log = + .label = Include debug log better-bibtex_error-report_include-cache = - .label = Include cache + .label = Include items +better-bibtex_error-report_include-notes = + .label = notes +better-bibtex_error-report_include-attachments = + .label = attachment metadata better-bibtex_error-report_items = .label = Items - better-bibtex_error-report_not-reviewed = Debug logs cannot be reviewed unless referred to in the GitHub issue tracker by their ID. better-bibtex_error-report_post-to-git-hub = Please post a message to the issue tracker (https://github.com/retorquere/zotero-better-bibtex/issues) with this debug log ID, a description of the problem, and any steps necessary to reproduce it. diff --git a/submodules/zotero b/submodules/zotero index 363f97325f..4fe0ebc63b 160000 --- a/submodules/zotero +++ b/submodules/zotero @@ -1 +1 @@ -Subproject commit 363f97325feda4143144e3d6763e065c20131718 +Subproject commit 4fe0ebc63b1d510f24e91921ecbb3979c6d170fa From f7ac97b1edb88f27cb615be67dbe50456f4620d1 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Tue, 16 Apr 2024 20:58:14 +0200 Subject: [PATCH 054/177] New Crowdin updates (#2838) * New translations better-bibtex.ftl (French) * New translations better-bibtex.ftl (German) * New translations better-bibtex.ftl (Italian) * New translations better-bibtex.ftl (Chinese Simplified) * New translations better-bibtex.ftl (Portuguese, Brazilian) * New translations better-bibtex.ftl (French) --- locale/de-DE/better-bibtex.ftl | 10 +++++++++- locale/fr-FR/better-bibtex.ftl | 10 +++++++++- locale/it-IT/better-bibtex.ftl | 10 +++++++++- locale/pt-BR/better-bibtex.ftl | 10 +++++++++- locale/zh-CN/better-bibtex.ftl | 10 +++++++++- 5 files changed, 45 insertions(+), 5 deletions(-) diff --git a/locale/de-DE/better-bibtex.ftl b/locale/de-DE/better-bibtex.ftl index 89573b98b5..a11c98ad05 100644 --- a/locale/de-DE/better-bibtex.ftl +++ b/locale/de-DE/better-bibtex.ftl @@ -24,8 +24,16 @@ better-bibtex_error-report_debug = better-bibtex_error-report_enable-debug = Das Zotero Debug-Logging ist derzeit deaktiviert. Es ist einfacher, das Problem zu diagnostizieren, wenn Sie es aktivieren, bevor Sie ein Debug-Log senden. better-bibtex_error-report_errors = .label = Fehler +better-bibtex_error-report_include-errors = + .label = Include error messages +better-bibtex_error-report_include-log = + .label = Include debug log better-bibtex_error-report_include-cache = - .label = Cache einbeziehen + .label = Include items +better-bibtex_error-report_include-notes = + .label = notes +better-bibtex_error-report_include-attachments = + .label = attachment metadata better-bibtex_error-report_items = .label = Einträge better-bibtex_error-report_not-reviewed = Debug-Reports können nicht überprüft werden, bis sie im GitHub Issue-Tracker genannt werden. diff --git a/locale/fr-FR/better-bibtex.ftl b/locale/fr-FR/better-bibtex.ftl index 193953a063..083e4c9556 100644 --- a/locale/fr-FR/better-bibtex.ftl +++ b/locale/fr-FR/better-bibtex.ftl @@ -24,8 +24,16 @@ better-bibtex_error-report_debug = better-bibtex_error-report_enable-debug = Le journal de débogage de Zotero est actuellement désactivé. Il sera plus facile de diagnostiquer le problème si vous l'activez avant de soumettre un rapport d'erreur. better-bibtex_error-report_errors = .label = Erreurs +better-bibtex_error-report_include-errors = + .label = Inclure les messages d'erreur +better-bibtex_error-report_include-log = + .label = Inclure le journal de débogage better-bibtex_error-report_include-cache = - .label = Inclure le cache + .label = Inclure les items +better-bibtex_error-report_include-notes = + .label = notes +better-bibtex_error-report_include-attachments = + .label = métadonnées de la pièce jointe better-bibtex_error-report_items = .label = Références better-bibtex_error-report_not-reviewed = Les journaux de débogage ne peuvent pas être vérifiés à moins d'être référencés dans le gestionnaire de tickets GitHub par leur ID. diff --git a/locale/it-IT/better-bibtex.ftl b/locale/it-IT/better-bibtex.ftl index 8e471c16a6..e00cf24a3b 100644 --- a/locale/it-IT/better-bibtex.ftl +++ b/locale/it-IT/better-bibtex.ftl @@ -24,8 +24,16 @@ better-bibtex_error-report_debug = better-bibtex_error-report_enable-debug = Il log di debug di Zotero è disabilitato. Sarà più facile diagnosticare il problema se lo si abilita prima di tentare l'invio di un log di debug. better-bibtex_error-report_errors = .label = Errori +better-bibtex_error-report_include-errors = + .label = Include error messages +better-bibtex_error-report_include-log = + .label = Include debug log better-bibtex_error-report_include-cache = - .label = Includi la cache + .label = Include items +better-bibtex_error-report_include-notes = + .label = notes +better-bibtex_error-report_include-attachments = + .label = attachment metadata better-bibtex_error-report_items = .label = Elementi better-bibtex_error-report_not-reviewed = I log di debug non possono essere utilizzati se non sono indicati con il loro ID nell'Issue tracker di Github. diff --git a/locale/pt-BR/better-bibtex.ftl b/locale/pt-BR/better-bibtex.ftl index f2bcdbb572..3af3b28877 100644 --- a/locale/pt-BR/better-bibtex.ftl +++ b/locale/pt-BR/better-bibtex.ftl @@ -24,8 +24,16 @@ better-bibtex_error-report_debug = better-bibtex_error-report_enable-debug = Zotero debug logging is currently disabled. It will be easier to diagnose the problem if you enable it before submitting a debug log. better-bibtex_error-report_errors = .label = Erros +better-bibtex_error-report_include-errors = + .label = Include error messages +better-bibtex_error-report_include-log = + .label = Include debug log better-bibtex_error-report_include-cache = - .label = Include cache + .label = Include items +better-bibtex_error-report_include-notes = + .label = notes +better-bibtex_error-report_include-attachments = + .label = attachment metadata better-bibtex_error-report_items = .label = Items better-bibtex_error-report_not-reviewed = Debug logs cannot be reviewed unless referred to in the GitHub issue tracker by their ID. diff --git a/locale/zh-CN/better-bibtex.ftl b/locale/zh-CN/better-bibtex.ftl index fbcd34c016..13dcc6b21b 100644 --- a/locale/zh-CN/better-bibtex.ftl +++ b/locale/zh-CN/better-bibtex.ftl @@ -24,8 +24,16 @@ better-bibtex_error-report_debug = better-bibtex_error-report_enable-debug = Zotero 的调试日志记录已被禁用。如果在提交调试日志之前启用它,将更容易诊断问题。 better-bibtex_error-report_errors = .label = 错误 +better-bibtex_error-report_include-errors = + .label = Include error messages +better-bibtex_error-report_include-log = + .label = Include debug log better-bibtex_error-report_include-cache = - .label = 包含缓存 + .label = Include items +better-bibtex_error-report_include-notes = + .label = notes +better-bibtex_error-report_include-attachments = + .label = attachment metadata better-bibtex_error-report_items = .label = 条目 better-bibtex_error-report_not-reviewed = 仅当您在 GitHub Issues 中引用了日志 ID 时,调试日志才会被审阅。 From f20bf0cf8b8ca55d9e9c5aa8175bd1f9a2dc5d76 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Tue, 16 Apr 2024 21:00:20 +0200 Subject: [PATCH 055/177] biblatex-apa --- translators/Better BibLaTeX.json | 1 + 1 file changed, 1 insertion(+) diff --git a/translators/Better BibLaTeX.json b/translators/Better BibLaTeX.json index 96db3890cc..2235a40bfe 100644 --- a/translators/Better BibLaTeX.json +++ b/translators/Better BibLaTeX.json @@ -16,6 +16,7 @@ "exportNotes": false, "exportFileData": false, "useJournalAbbreviation": false, + "biblatex-apa": false, "keepUpdated": false, "worker": true }, From f803bc6f7325a17932a6bb3eddd47fc4d101cccf Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Tue, 16 Apr 2024 22:47:25 +0200 Subject: [PATCH 056/177] partial support for biblatex-apa --- content/ajv.ts | 2 +- content/logger.ts | 2 +- content/orchestrator.ts | 10 +++--- schema/BetterBibTeX JSON.json | 3 ++ test/features/export.feature | 1 + test/features/steps/steps.py | 1 + ...port of Contributor to WITH #2837.biblatex | 0 .../Export of Contributor to WITH #2837.json | 33 +++++++++++++++++++ translators/bibtex/biblatex.ts | 12 +++++++ translators/bibtex/entry.ts | 3 +- typings/translators.d.ts | 1 + 11 files changed, 60 insertions(+), 8 deletions(-) create mode 100644 test/fixtures/export/Export of Contributor to WITH #2837.biblatex create mode 100644 test/fixtures/export/Export of Contributor to WITH #2837.json diff --git a/content/ajv.ts b/content/ajv.ts index b05e6a2605..e887a8dca5 100644 --- a/content/ajv.ts +++ b/content/ajv.ts @@ -51,7 +51,7 @@ export function validItem(obj: any, strict?: boolean): string { // eslint-disabl const errors = broken.me(obj) if (!errors) return '' if (!strict && !broken.other(obj)) { - if (typeof Zotero !== 'undefined') print('Better BibTeX soft error: ' + errors) + if (typeof Zotero !== 'undefined') print('soft error: ' + errors) return '' } // https://ajv.js.org/api.html#validation-errors diff --git a/content/logger.ts b/content/logger.ts index 99e30d9500..d8dab8d569 100644 --- a/content/logger.ts +++ b/content/logger.ts @@ -7,7 +7,7 @@ import { stringify } from './stringify' import { asciify } from './text' export function print(msg: string): void { - dump(msg + '\n') + dump(`better-bibtex::${msg}\n`) } function toString(obj): string { diff --git a/content/orchestrator.ts b/content/orchestrator.ts index 388e86595a..b315a3fa00 100644 --- a/content/orchestrator.ts +++ b/content/orchestrator.ts @@ -1,4 +1,4 @@ -export type Actor = | 'start' | 'done' | 'auto-export' | 'translators' | 'TeXstudio' | 'abbreviator' | 'keymanager' | 'serializer' | 'cache' | 'sqlite' | 'git-push' | 'citekeysearch' +esoft xport type Actor = | 'start' | 'done' | 'auto-export' | 'translators' | 'TeXstudio' | 'abbreviator' | 'keymanager' | 'serializer' | 'cache' | 'sqlite' | 'git-push' | 'citekeysearch' export type PhaseID = 'startup' | 'shutdown' import type { Reason } from './bootstrap' import { log } from './logger' @@ -173,14 +173,14 @@ export class Orchestrator { } const perform = async (): Promise => { - print(`better-bibtex orchestrator: task ${phase}.${name} starting`) + print(`orchestrator: task ${phase}.${name} starting`) try { const res = await action(reason, task) as Promise - print(`better-bibtex orchestrator: task ${phase}.${name} finished`) + print(`orchestrator: task ${phase}.${name} finished`) return res } catch (err) { - print(`better-bibtex orchestrator: error: task ${phase}.${name} failed: ${err}\n${err.stack}`) + print(`orchestrator: error: task ${phase}.${name} failed: ${err}\n${err.stack}`) throw err } } @@ -203,7 +203,7 @@ export class Orchestrator { }) .catch(err => { - print(`better-bibtex better-bibtex orchestrator: ${name}.${phase} ${reason || ''} error: ${err}`) + print(`orchestrator: ${name}.${phase} ${reason || ''} error: ${err}`) throw err }) } diff --git a/schema/BetterBibTeX JSON.json b/schema/BetterBibTeX JSON.json index 76acdfc956..5643a7e98f 100644 --- a/schema/BetterBibTeX JSON.json +++ b/schema/BetterBibTeX JSON.json @@ -75,6 +75,9 @@ "Year": { "type": "boolean" }, + "biblatex-apa": { + "type": "boolean" + }, "exportFileData": { "type": "boolean" }, diff --git a/test/features/export.feature b/test/features/export.feature index b84a4c9ce9..3813f619de 100644 --- a/test/features/export.feature +++ b/test/features/export.feature @@ -13,6 +13,7 @@ Feature: Export Examples: | file | references | + | Export of Contributor to WITH #2837 | 1 | | Better BibTeX export from Zotero missing Extra fields eg issued #2816 | 1 | | Support for Chinese Quotation Marks When Exporting with Export unicode as plaintext latex commands #2810 | 1 | | en-dash and i-circumflex translation error #2796 | 3 | diff --git a/test/features/steps/steps.py b/test/features/steps/steps.py index e411a965f8..886ef13059 100644 --- a/test/features/steps/steps.py +++ b/test/features/steps/steps.py @@ -232,6 +232,7 @@ def export_library(context, translator='BetterBibTeX JSON', collection=None, exp if output: assert output.startswith('~/'), output output = os.path.join(context.tmpDir, output[2:]) + utils.print(json.dumps(displayOptions)) start = time.time() context.zotero.export_library( diff --git a/test/fixtures/export/Export of Contributor to WITH #2837.biblatex b/test/fixtures/export/Export of Contributor to WITH #2837.biblatex new file mode 100644 index 0000000000..e69de29bb2 diff --git a/test/fixtures/export/Export of Contributor to WITH #2837.json b/test/fixtures/export/Export of Contributor to WITH #2837.json new file mode 100644 index 0000000000..122c514ef3 --- /dev/null +++ b/test/fixtures/export/Export of Contributor to WITH #2837.json @@ -0,0 +1,33 @@ +{ + "config": { + "id": "36a3b0b5-bad0-4a04-b79b-441c7cef77db", + "label": "BetterBibTeX JSON", + "options": { + "biblatex-apa": true + }, + "preferences": { + "kuroshiro": true + } + }, + "items": [ + { + "citationKey": "meyersWitheringWorrying2014", + "creators": [ + { + "creatorType": "author", + "firstName": "K.", + "lastName": "Meyers" + }, + { + "creatorType": "contributor", + "firstName": "W. T.", + "lastName": "Long" + } + ], + "date": "2014", + "itemID": 1, + "itemType": "book", + "title": "Withering worrying" + } + ] +} \ No newline at end of file diff --git a/translators/bibtex/biblatex.ts b/translators/bibtex/biblatex.ts index 90e534204e..dba404bb27 100644 --- a/translators/bibtex/biblatex.ts +++ b/translators/bibtex/biblatex.ts @@ -4,6 +4,7 @@ import { strToISO } from '../../content/dateparser' import { qualityReport } from '../../gen/biber-tool' import { Entry as BaseEntry, Config } from './entry' +import { print } from '../../content/logger' type CreatorArray = any[] & { type?: string } @@ -133,6 +134,7 @@ class Entry extends BaseEntry { const creators: Record = { author: [], + with: [], bookauthor: [], commentator: [], editor: [], @@ -147,6 +149,7 @@ class Entry extends BaseEntry { creators.editorb.type = 'redactor' for (const creator of this.item.creators) { + print(`::translation:${JSON.stringify({ creator, options: this.translation.options })}`) switch (creator.creatorType) { case 'director': // 365.something @@ -159,6 +162,15 @@ class Entry extends BaseEntry { } break + case 'contributor': + if (this.translation.options['biblatex-apa']) { + creators.with.push(creator) + } + else { + creators.editora.push(creator) + } + break + case 'author': case 'inventor': case 'interviewer': diff --git a/translators/bibtex/entry.ts b/translators/bibtex/entry.ts index 1c5e8b60a5..104a43e6a3 100644 --- a/translators/bibtex/entry.ts +++ b/translators/bibtex/entry.ts @@ -60,6 +60,7 @@ const fieldOrder = [ 'translatortype', 'holder', 'holdertype', + 'with', 'options', 'date', 'origdate', @@ -181,7 +182,7 @@ export class Entry { private metadata: Cache.ExportedItemMetadata = { DeclarePrefChars: '', noopsort: false, packages: [] } private packages: Record = {} private juniorcomma: boolean - private translation: Translation + public translation: Translation public lint(_explanation: Record): string[] { return [] diff --git a/typings/translators.d.ts b/typings/translators.d.ts index 5a17f6120f..65d236539f 100644 --- a/typings/translators.d.ts +++ b/typings/translators.d.ts @@ -84,6 +84,7 @@ export namespace Translators { exportNotes?: boolean, exportFileData?: boolean useJournalAbbreviation?: boolean + 'biblatex-apa'?: boolean keepUpdated?: boolean worker?: boolean markdown?: boolean From e7c7f2d109826c354356d3b2497642cf4a88948d Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Tue, 16 Apr 2024 23:53:08 +0200 Subject: [PATCH 057/177] prelim support for biblatex-apa --- content/orchestrator.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/orchestrator.ts b/content/orchestrator.ts index b315a3fa00..d399900783 100644 --- a/content/orchestrator.ts +++ b/content/orchestrator.ts @@ -1,4 +1,4 @@ -esoft xport type Actor = | 'start' | 'done' | 'auto-export' | 'translators' | 'TeXstudio' | 'abbreviator' | 'keymanager' | 'serializer' | 'cache' | 'sqlite' | 'git-push' | 'citekeysearch' +export type Actor = | 'start' | 'done' | 'auto-export' | 'translators' | 'TeXstudio' | 'abbreviator' | 'keymanager' | 'serializer' | 'cache' | 'sqlite' | 'git-push' | 'citekeysearch' export type PhaseID = 'startup' | 'shutdown' import type { Reason } from './bootstrap' import { log } from './logger' From b21310a0aff782da94c1a6c4c02b8f6e5544e2d0 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Wed, 17 Apr 2024 00:51:27 +0200 Subject: [PATCH 058/177] prelim testcase --- .../export/Export of Contributor to WITH #2837.biblatex | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/test/fixtures/export/Export of Contributor to WITH #2837.biblatex b/test/fixtures/export/Export of Contributor to WITH #2837.biblatex index e69de29bb2..00754c10ff 100644 --- a/test/fixtures/export/Export of Contributor to WITH #2837.biblatex +++ b/test/fixtures/export/Export of Contributor to WITH #2837.biblatex @@ -0,0 +1,6 @@ +@book{meyersWitheringWorrying2014, + title = {Withering Worrying}, + author = {Meyers, K.}, + with = {Long, W. T.}, + date = {2014} +} From fdd749940ac8b3a728a29bcceb918996488766d6 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Thu, 18 Apr 2024 01:37:51 +0200 Subject: [PATCH 059/177] New translations better-bibtex.ftl (Chinese Simplified) (#2839) --- locale/zh-CN/better-bibtex.ftl | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/locale/zh-CN/better-bibtex.ftl b/locale/zh-CN/better-bibtex.ftl index 13dcc6b21b..ac1045dcbf 100644 --- a/locale/zh-CN/better-bibtex.ftl +++ b/locale/zh-CN/better-bibtex.ftl @@ -25,15 +25,15 @@ better-bibtex_error-report_enable-debug = Zotero 的调试日志记录已被禁 better-bibtex_error-report_errors = .label = 错误 better-bibtex_error-report_include-errors = - .label = Include error messages + .label = 包括错误信息 better-bibtex_error-report_include-log = - .label = Include debug log + .label = 包括调试日志 better-bibtex_error-report_include-cache = - .label = Include items + .label = 包括条目 better-bibtex_error-report_include-notes = - .label = notes + .label = 备注 better-bibtex_error-report_include-attachments = - .label = attachment metadata + .label = 附件元数据 better-bibtex_error-report_items = .label = 条目 better-bibtex_error-report_not-reviewed = 仅当您在 GitHub Issues 中引用了日志 ID 时,调试日志才会被审阅。 From ae7d34e8a9f31948a2d8e7169ca05308052079ef Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Thu, 18 Apr 2024 12:22:58 +0200 Subject: [PATCH 060/177] prep for auto-export, debug log updates --- content/ErrorReport.ts | 10 +++++- content/Preferences.ts | 2 ++ content/Preferences/autoexport.pug | 6 ++++ content/auto-export.ts | 2 ++ locale/en-US/better-bibtex.ftl | 8 +++-- schema/BetterBibTeX JSON.json | 2 +- .../templates/auto-export-displayOptions.json | 2 +- test/features/export.feature | 8 +++++ ...or to WITH #2837-autoexport.after.biblatex | 0 ...r to WITH #2837-autoexport.before.biblatex | 7 +++++ ... Contributor to WITH #2837-autoexport.json | 31 +++++++++++++++++++ translators/Better BibLaTeX.json | 2 +- translators/bibtex/biblatex.ts | 2 +- translators/lib/translator.ts | 1 + typings/translators.d.ts | 2 +- 15 files changed, 77 insertions(+), 8 deletions(-) create mode 100644 test/fixtures/export/Export of Contributor to WITH #2837-autoexport.after.biblatex create mode 100644 test/fixtures/export/Export of Contributor to WITH #2837-autoexport.before.biblatex create mode 100644 test/fixtures/export/Export of Contributor to WITH #2837-autoexport.json diff --git a/content/ErrorReport.ts b/content/ErrorReport.ts index 4b700d7a50..5b62a09686 100644 --- a/content/ErrorReport.ts +++ b/content/ErrorReport.ts @@ -274,7 +274,15 @@ export class ErrorReport { this.setValue('better-bibtex-error-context', this.report.context) this.setValue('better-bibtex-error-errors', this.report.errors || '') this.setValue('better-bibtex-error-log', this.preview(this.report.log || '')) - this.setValue('better-bibtex-error-items', this.preview(this.report.items || '')) + + let items = '' + if (this.report.items) { + const lib = JSON.parse(this.report.items) + lib = { ...lib, items: lib.items.slice(0, 2) } + items = JSON.stringify(lib, null, 2) + items += '...' + } + this.setValue('better-bibtex-error-items', items) this.setValue('better-bibtex-report-cache', this.cacheState = l10n.localize('better-bibtex_error-report_better-bibtex_cache', Cache.state())) diff --git a/content/Preferences.ts b/content/Preferences.ts index d0f276b432..e122edae66 100644 --- a/content/Preferences.ts +++ b/content/Preferences.ts @@ -204,6 +204,7 @@ class AutoExportPane { case 'asciiBibLaTeX': case 'biblatexExtendedNameFormat': case 'recursive': + case 'biblatexAPA': (node as unknown as XUL.Checkbox).checked = selected[field] break @@ -288,6 +289,7 @@ class AutoExportPane { case 'asciiBibLaTeX': case 'biblatexExtendedNameFormat': case 'recursive': + case 'biblatexAPA': log.debug('edit autoexport:', field, node.checked) value = node.checked break diff --git a/content/Preferences/autoexport.pug b/content/Preferences/autoexport.pug index 3c8c97ad6e..2b0ceaed9c 100644 --- a/content/Preferences/autoexport.pug +++ b/content/Preferences/autoexport.pug @@ -80,6 +80,12 @@ html:div#bbt-prefs-auto-exports(class='bbt-prefs-2col') label='&better-bibtex_preferences_auto-export_fields_journal-abbrev.label;' oncommand='Zotero.BetterBibTeX.PrefPane.autoexport.edit(this)' ) + checkbox.bbt-autoexport-options.bbt-autoexport-BetterBibLaTeX( + class='bbt-prefs-2col-span' + data-ae-field='biblatexAPA' + label='&better-bibtex_preferences_auto-export_fields_biblatexAPA.label;' + oncommand='Zotero.BetterBibTeX.PrefPane.autoexport.edit(this)' + ) // all checkbox( diff --git a/content/auto-export.ts b/content/auto-export.ts index 6cf4ac312d..9c1b4cdfa4 100644 --- a/content/auto-export.ts +++ b/content/auto-export.ts @@ -59,6 +59,7 @@ export const SQL = new class { job[setting] = value } + log.debug('autoexport job', job) return job as Job } @@ -412,6 +413,7 @@ type Job = { biblatexExtendedNameFormat?: boolean DOIandURL?: boolean bibtexURL?: boolean + biblatexAPA?: boolean } type JobSetting = keyof Job diff --git a/locale/en-US/better-bibtex.ftl b/locale/en-US/better-bibtex.ftl index dde8e6cbb2..c60f2cfbee 100644 --- a/locale/en-US/better-bibtex.ftl +++ b/locale/en-US/better-bibtex.ftl @@ -52,20 +52,21 @@ better-bibtex_error-report_restart-with-logging-enabled = .label = Restart with Logging Enabled… -better-bibtex_error-report_review = The data below is about to submitted to Better BibTeX for debugging. You can review the data to see whether there's sensitive information that you do not wish to send. +better-bibtex_error-report_review = The data below is about to submitted to Better BibTeX for debugging. You can preview the data here, or save a copy of the log to get the precise data about to be sent, to see whether there's sensitive information that you do not wish to send. If you are OK with sending this data, please proceed to the next screen and post the debug ID presented in the next screen in the issue tracker at https://github.com/retorquere/zotero-better-bibtex/issue better-bibtex_error-report_save = - .label = Save copy of log + .label = Save copy of log for inspection better-bibtex_error-report_submission-in-progress = Please wait while the debug log is submitted. better-bibtex_error-report_submitted = Your debug log has been submitted. better-bibtex_export-options_keep-updated = Keep updated better-bibtex_export-options_reminder = Are you sure you don't want the '{ $translator }' format? better-bibtex_export-options_worker = Background export +better-bibtex_export-options_biblatexAPA = biblatex-apa unused_better-bibtex_first-run = .title = Welcome to Better BibTeX for Zotero .label = Welcome to Better BibTeX for Zotero @@ -218,6 +219,9 @@ better-bibtex_preferences_auto-export_fields_notes = better-bibtex_preferences_auto-export_fields_recursive = .label = Export all child collections +better-bibtex_preferences_auto-export_fields_biblatexAPA = + .label = biblatex-apa + better-bibtex_preferences_auto-export_git_message = { $type } updated by Better BibTeX for Zotero better-bibtex_preferences_auto-export_idle = When Idle .label = { better-bibtex_preferences_auto-export_idle } diff --git a/schema/BetterBibTeX JSON.json b/schema/BetterBibTeX JSON.json index 5643a7e98f..5d0e67bb3c 100644 --- a/schema/BetterBibTeX JSON.json +++ b/schema/BetterBibTeX JSON.json @@ -75,7 +75,7 @@ "Year": { "type": "boolean" }, - "biblatex-apa": { + "biblatexAPA": { "type": "boolean" }, "exportFileData": { diff --git a/setup/templates/auto-export-displayOptions.json b/setup/templates/auto-export-displayOptions.json index 97c42a7cb5..6258241368 100644 --- a/setup/templates/auto-export-displayOptions.json +++ b/setup/templates/auto-export-displayOptions.json @@ -1 +1 @@ -["exportNotes", "useJournalAbbreviation"] +["exportNotes", "useJournalAbbreviation", "biblatexAPA"] diff --git a/test/features/export.feature b/test/features/export.feature index 3813f619de..33d5529617 100644 --- a/test/features/export.feature +++ b/test/features/export.feature @@ -623,6 +623,14 @@ Feature: Export And I wait 15 seconds Then "~/autoexport.bib" should match "export/*.after.bibtex" + Scenario: Export of Contributor to WITH #2837-autoexport + Given I import 1 reference from "export/*.json" + And I set preference .autoExport to "immediate" + Then an auto-export to "~/autoexport.bib" using "Better BibLaTeX" should match "export/*.before.biblatex" + When I change biblatex-apa to true on the auto-export + And I wait 5 seconds + Then "~/autoexport.bib" should match "export/*.after.biblatex" + Scenario: Auto-Export citekey edits #citekey-edit Given I import 1 reference from "export/*.json" Then an auto-export to "~/autoexport.bib" using "Better BibTeX" should match "export/*.before.bibtex" diff --git a/test/fixtures/export/Export of Contributor to WITH #2837-autoexport.after.biblatex b/test/fixtures/export/Export of Contributor to WITH #2837-autoexport.after.biblatex new file mode 100644 index 0000000000..e69de29bb2 diff --git a/test/fixtures/export/Export of Contributor to WITH #2837-autoexport.before.biblatex b/test/fixtures/export/Export of Contributor to WITH #2837-autoexport.before.biblatex new file mode 100644 index 0000000000..1e117492f7 --- /dev/null +++ b/test/fixtures/export/Export of Contributor to WITH #2837-autoexport.before.biblatex @@ -0,0 +1,7 @@ +@book{meyersWitheringWorrying2014, + title = {Withering Worrying}, + author = {Meyers, K.}, + editora = {Long, W. T.}, + editoratype = {collaborator}, + date = {2014} +} diff --git a/test/fixtures/export/Export of Contributor to WITH #2837-autoexport.json b/test/fixtures/export/Export of Contributor to WITH #2837-autoexport.json new file mode 100644 index 0000000000..a0213d5c2c --- /dev/null +++ b/test/fixtures/export/Export of Contributor to WITH #2837-autoexport.json @@ -0,0 +1,31 @@ +{ + "config": { + "id": "36a3b0b5-bad0-4a04-b79b-441c7cef77db", + "label": "BetterBibTeX JSON", + "options": { + }, + "preferences": { + } + }, + "items": [ + { + "citationKey": "meyersWitheringWorrying2014", + "creators": [ + { + "creatorType": "author", + "firstName": "K.", + "lastName": "Meyers" + }, + { + "creatorType": "contributor", + "firstName": "W. T.", + "lastName": "Long" + } + ], + "date": "2014", + "itemID": 1, + "itemType": "book", + "title": "Withering worrying" + } + ] +} diff --git a/translators/Better BibLaTeX.json b/translators/Better BibLaTeX.json index 2235a40bfe..97c4a496dd 100644 --- a/translators/Better BibLaTeX.json +++ b/translators/Better BibLaTeX.json @@ -16,7 +16,7 @@ "exportNotes": false, "exportFileData": false, "useJournalAbbreviation": false, - "biblatex-apa": false, + "biblatexAPA": false, "keepUpdated": false, "worker": true }, diff --git a/translators/bibtex/biblatex.ts b/translators/bibtex/biblatex.ts index dba404bb27..06ba0aabeb 100644 --- a/translators/bibtex/biblatex.ts +++ b/translators/bibtex/biblatex.ts @@ -163,7 +163,7 @@ class Entry extends BaseEntry { break case 'contributor': - if (this.translation.options['biblatex-apa']) { + if (this.translation.options.biblatexAPA) { creators.with.push(creator) } else { diff --git a/translators/lib/translator.ts b/translators/lib/translator.ts index 305042e10d..a7f68d0e85 100644 --- a/translators/lib/translator.ts +++ b/translators/lib/translator.ts @@ -279,6 +279,7 @@ export class Translation { // eslint-disable-line @typescript-eslint/naming-conv quickCopyMode?: string dropAttachments?: boolean exportNotes?: boolean + biblatexAPA?: boolean markdown?: boolean exportFileData?: boolean useJournalAbbreviation?: boolean diff --git a/typings/translators.d.ts b/typings/translators.d.ts index 65d236539f..74f241ee17 100644 --- a/typings/translators.d.ts +++ b/typings/translators.d.ts @@ -84,7 +84,7 @@ export namespace Translators { exportNotes?: boolean, exportFileData?: boolean useJournalAbbreviation?: boolean - 'biblatex-apa'?: boolean + biblatexAPA?: boolean keepUpdated?: boolean worker?: boolean markdown?: boolean From e4e33394e50e241ce5a5075c7f208c9f2e281e20 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Thu, 18 Apr 2024 13:27:30 +0200 Subject: [PATCH 061/177] explanatory language for debug log --- content/ErrorReport.ts | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/content/ErrorReport.ts b/content/ErrorReport.ts index 5b62a09686..f70eba5164 100644 --- a/content/ErrorReport.ts +++ b/content/ErrorReport.ts @@ -44,7 +44,7 @@ type Wizard = HTMLElement & { } export class ErrorReport { - private previewSize = 3 * kB // eslint-disable-line yoda + private previewSize = 3 private document: Document private key: string @@ -274,16 +274,7 @@ export class ErrorReport { this.setValue('better-bibtex-error-context', this.report.context) this.setValue('better-bibtex-error-errors', this.report.errors || '') this.setValue('better-bibtex-error-log', this.preview(this.report.log || '')) - - let items = '' - if (this.report.items) { - const lib = JSON.parse(this.report.items) - lib = { ...lib, items: lib.items.slice(0, 2) } - items = JSON.stringify(lib, null, 2) - items += '...' - } - this.setValue('better-bibtex-error-items', items) - + this.setValue('better-bibtex-error-items', this.report.items ? this.preview(JSON.parse(this.report.items)) : '') this.setValue('better-bibtex-report-cache', this.cacheState = l10n.localize('better-bibtex_error-report_better-bibtex_cache', Cache.state())) this.report.log = [ @@ -359,8 +350,16 @@ export class ErrorReport { } } - private preview(text: string): string { - return text.length > this.previewSize ? `${text.substr(0, this.previewSize)} ...` : text + private preview(input: any): string { + const previewSize = this.previewSize * kB + if (typeof input === 'string') return input.length > previewSize ? `${input.substr(0, previewSize)} ...` : input + + let trail = '' + if (input.items.length > this.previewSize) { + trail = `\n... + ${input.items.length - this.previewSize} more items` + input = { ...input, items: input.items.slice(0, this.previewSize) } + } + return JSON.stringify(input, null, 2) + trail } // general state of Zotero From a60c59354b3c63f75f51e6ccb0aceeba7b400d7a Mon Sep 17 00:00:00 2001 From: Mughees Ahmad Date: Thu, 18 Apr 2024 11:00:43 -0400 Subject: [PATCH 062/177] minro typo (#2841) --- site/content/exporting/auto.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/content/exporting/auto.md b/site/content/exporting/auto.md index 26d3f3a1d1..e715dc0403 100644 --- a/site/content/exporting/auto.md +++ b/site/content/exporting/auto.md @@ -21,7 +21,7 @@ separate exports for separate papers for example if you have set up a collection There are two important concepts in play for auto-export -* register a collection/library for scheduled epxorts, and +* register a collection/library for scheduled exports, and * executing these scheduled exports When you check "keep updated" in the export screen, that means "in the future, schedule this export for re-export when any of its items change, to the file I pick next". If you do not check this checkbox, that merely means you are not registering the export you are doing, rather than undoing an auto-export you scheduled before. From 11dff54c77fc890fcdaed6ec2cb57f169c807981 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Thu, 18 Apr 2024 17:01:39 +0200 Subject: [PATCH 063/177] cache really needs that overhaul --- content/auto-export.ts | 3 ++- content/better-bibtex.ts | 1 + content/db/cache.ts | 9 ++++++--- test/features/export.feature | 3 +-- .../Export of Contributor to WITH #2837-autoexport.json | 1 + .../export/Export of Contributor to WITH #2837.json | 4 ++-- translators/lib/translator.ts | 4 +++- 7 files changed, 16 insertions(+), 9 deletions(-) diff --git a/content/auto-export.ts b/content/auto-export.ts index 9c1b4cdfa4..61f94b8a07 100644 --- a/content/auto-export.ts +++ b/content/auto-export.ts @@ -50,7 +50,7 @@ export const SQL = new class { } const settings = autoExport[job.translatorID] - const displayOptions = byId[job.translatorID]?.displayOptions || {} + const displayOptions = {...(byId[job.translatorID]?.displayOptions || {})} Object.assign(job, pick(Preference, settings.preferences)) // eslint-disable-next-line @typescript-eslint/no-unsafe-return Object.assign(job, fromPairs(settings.options.map((option: PreferenceName) => [ option, job[option] ?? displayOptions[option] ?? false ]))) @@ -326,6 +326,7 @@ const queue = new class TaskQueue { const displayOptions: any = { exportNotes: ae.exportNotes, useJournalAbbreviation: ae.useJournalAbbreviation, + biblatexAPA: ae.biblatexAPA || false, } const jobs: ExportJob[] = [{ diff --git a/content/better-bibtex.ts b/content/better-bibtex.ts index e37a443ac4..ac363a84fe 100644 --- a/content/better-bibtex.ts +++ b/content/better-bibtex.ts @@ -504,6 +504,7 @@ $patch$(Zotero.Translate.Export.prototype, 'translate', original => function Zot status: 'done', translatorID, exportNotes: displayOptions.exportNotes, + biblatexAPA: displayOptions.biblatexAPA, useJournalAbbreviation: displayOptions.useJournalAbbreviation, }) } diff --git a/content/db/cache.ts b/content/db/cache.ts index 7324a44c2a..6988bd1206 100644 --- a/content/db/cache.ts +++ b/content/db/cache.ts @@ -92,7 +92,7 @@ class Cache extends Loki { coll = this.schemaCollection(header.label, { logging: false, - indices: [ 'itemID', 'exportNotes', 'useJournalAbbreviation', ...Object.keys(cachedPrefs) ], + indices: [ 'itemID', 'exportNotes', 'biblatexAPA', 'useJournalAbbreviation', ...Object.keys(cachedPrefs) ], schema: { type: 'object', additionalProperties: false, @@ -103,6 +103,7 @@ class Cache extends Loki { // displayOptions exportNotes: { type: 'boolean' }, useJournalAbbreviation: { type: 'boolean' }, + biblatexAPA: { type: 'boolean' }, // preferences ...cachedPrefs, @@ -114,7 +115,7 @@ class Cache extends Loki { meta: { type: 'object' }, $loki: { type: 'integer' }, }, - required: [ 'itemID', 'entry', 'exportNotes', 'useJournalAbbreviation', ...Object.keys(cachedPrefs) ], + required: [ 'itemID', 'entry', 'biblatexAPA', 'exportNotes', 'useJournalAbbreviation', ...Object.keys(cachedPrefs) ], }, ttl, ttlInterval, @@ -187,6 +188,7 @@ class Cache extends Loki { const query = { exportNotes: !!options.exportNotes, useJournalAbbreviation: !!options.useJournalAbbreviation, + biblatexAPA: !!options.biblatexAPA, // itemID: Array.isArray(itemID) ? {$in: itemID} : itemID, } const translatorID = byLabel[translatorLabel].translatorID @@ -227,7 +229,7 @@ class Cache extends Loki { return clone(cached) } - store(translator: string, itemID: number, options: { exportNotes?: boolean, useJournalAbbreviation?: boolean }, prefs: any, entry: any, metadata: any) { + store(translator: string, itemID: number, options: { exportNotes?: boolean, useJournalAbbreviation?: boolean, biblatexAPA?: boolean }, prefs: any, entry: any, metadata: any) { if (!Preference.cache) return false if (!metadata) metadata = {} @@ -235,6 +237,7 @@ class Cache extends Loki { options = { exportNotes: false, useJournalAbbreviation: false, + biblatexAPA: false, ...options, } diff --git a/test/features/export.feature b/test/features/export.feature index 33d5529617..eb5c328270 100644 --- a/test/features/export.feature +++ b/test/features/export.feature @@ -625,9 +625,8 @@ Feature: Export Scenario: Export of Contributor to WITH #2837-autoexport Given I import 1 reference from "export/*.json" - And I set preference .autoExport to "immediate" Then an auto-export to "~/autoexport.bib" using "Better BibLaTeX" should match "export/*.before.biblatex" - When I change biblatex-apa to true on the auto-export + When I change biblatexAPA to true on the auto-export And I wait 5 seconds Then "~/autoexport.bib" should match "export/*.after.biblatex" diff --git a/test/fixtures/export/Export of Contributor to WITH #2837-autoexport.json b/test/fixtures/export/Export of Contributor to WITH #2837-autoexport.json index a0213d5c2c..63c8865f64 100644 --- a/test/fixtures/export/Export of Contributor to WITH #2837-autoexport.json +++ b/test/fixtures/export/Export of Contributor to WITH #2837-autoexport.json @@ -5,6 +5,7 @@ "options": { }, "preferences": { + "autoExport": "immediate" } }, "items": [ diff --git a/test/fixtures/export/Export of Contributor to WITH #2837.json b/test/fixtures/export/Export of Contributor to WITH #2837.json index 122c514ef3..77cb36ce5b 100644 --- a/test/fixtures/export/Export of Contributor to WITH #2837.json +++ b/test/fixtures/export/Export of Contributor to WITH #2837.json @@ -3,7 +3,7 @@ "id": "36a3b0b5-bad0-4a04-b79b-441c7cef77db", "label": "BetterBibTeX JSON", "options": { - "biblatex-apa": true + "biblatexAPA": true }, "preferences": { "kuroshiro": true @@ -30,4 +30,4 @@ "title": "Withering worrying" } ] -} \ No newline at end of file +} diff --git a/translators/lib/translator.ts b/translators/lib/translator.ts index a7f68d0e85..6c84878522 100644 --- a/translators/lib/translator.ts +++ b/translators/lib/translator.ts @@ -8,6 +8,7 @@ const $OS = is7 ? Shim : OS import * as Prefs from '../../gen/preferences/meta' const PrefNames: Set = new Set(Object.keys(Prefs.defaults)) import { client } from '../../content/client' +import { print } from '../../content/logger' import { RegularItem, Item, Collection, Attachment } from '../../gen/typings/serialized-item' import type { Exporter as BibTeXExporter } from '../bibtex/exporter' import type { ZoteroItem } from '../bibtex/bibtex' @@ -429,7 +430,7 @@ export class Translation { // eslint-disable-line @typescript-eslint/naming-conv this[translator.label.replace(/[^a-z]/ig, '')] = true this.BetterTeX = this.BetterBibTeX || this.BetterBibLaTeX this.BetterCSL = this.BetterCSLJSON || this.BetterCSLYAML - this.options = translator.displayOptions || {} + this.options = {...(translator.displayOptions || {})} this.platform = (Zotero.getHiddenPref('better-bibtex.platform') as string) this.isJurisM = client === 'jurism' @@ -457,6 +458,7 @@ export class Translation { // eslint-disable-line @typescript-eslint/naming-conv } } this.options.custom = Zotero.getOption('custom') // for pandoc-filter CSL + print(`translation options: ${JSON.stringify(this.options)}`) this.preferences = Object.entries(Prefs.defaults).reduce((acc, [pref, dflt]) => { acc[pref] = Zotero.getHiddenPref(`better-bibtex.${pref}`) ?? dflt From e27f6b1ae559644e5a698f1b15d10b8e1f1b6bbf Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Fri, 19 Apr 2024 13:32:06 +0200 Subject: [PATCH 064/177] logging --- content/object.ts | 15 +++++++++++++++ content/translators.ts | 18 +++++++++--------- content/worker/zotero.ts | 5 +++++ package-lock.json | 1 + package.json | 1 + test/features/export.feature | 1 + translators/bibtex/biblatex.ts | 4 +++- translators/lib/translator.ts | 11 ++--------- 8 files changed, 37 insertions(+), 19 deletions(-) diff --git a/content/object.ts b/content/object.ts index 0d75068fe5..b263b9dfd2 100644 --- a/content/object.ts +++ b/content/object.ts @@ -8,3 +8,18 @@ export const pick = (obj: T, keys: TKey return acc }, {} as Pick) } + +export function stringify(obj: any): string { // eslint-disable-line @typescript-eslint/explicit-module-boundary-types + const seen = new WeakSet() + return JSON.stringify(obj, (key, value) => { + if (typeof value === 'object' && value !== null) { + if (seen.has(value)) { + // If we've seen this object before, return a placeholder + return '[Circular]' + } + seen.add(value) + } + // Otherwise, proceed with the stringification + return value // eslint-disable-line @typescript-eslint/no-unsafe-return + }) +} diff --git a/content/translators.ts b/content/translators.ts index c4979445d6..bac12d3416 100644 --- a/content/translators.ts +++ b/content/translators.ts @@ -3,6 +3,7 @@ import { Shim } from './os' import { is7 } from './client' const $OS = is7 ? Shim : OS +import merge from 'lodash.merge' Components.utils.import('resource://gre/modules/Services.jsm') @@ -11,7 +12,7 @@ declare class ChromeWorker extends Worker { } Components.utils.import('resource://zotero/config.js') declare const ZOTERO_CONFIG: any -import { clone } from './object' +// import { clone } from './object' import { Deferred } from './deferred' import type { Translators as Translator } from '../typings/translators' import { Preference } from './prefs' @@ -254,6 +255,7 @@ export const Translators = new class { // eslint-disable-line @typescript-eslint exportPath: job.path || undefined, exportDir: job.path ? $OS.Path.dirname(job.path) : undefined, } + log.debug('export job:', displayOptions) const translator = this.byId[job.translatorID] @@ -437,14 +439,12 @@ export const Translators = new class { // eslint-disable-line @typescript-eslint } public displayOptions(translatorID: string, displayOptions: any): any { - displayOptions = clone(displayOptions || this.byId[translatorID]?.displayOptions || {}) - const defaults = this.byId[translatorID]?.displayOptions || {} - for (const [k, v] of Object.entries(defaults)) { - if (typeof displayOptions[k] === 'undefined') displayOptions[k] = v - } - if (this.byId[translatorID].label === 'BetterBibTeX JSON') displayOptions.exportCharset = 'UTF-8xBOM' - - return displayOptions + return merge( + {}, + this.byId[translatorID]?.displayOptions || {}, + displayOptions, + this.byId[translatorID].label === 'BetterBibTeX JSON' ? { exportCharset: 'UTF-8xBOM' } : {} + ) } public async exportItems(job: ExportJob): Promise { diff --git a/content/worker/zotero.ts b/content/worker/zotero.ts index 18c12082f1..438e22c14c 100644 --- a/content/worker/zotero.ts +++ b/content/worker/zotero.ts @@ -4,6 +4,8 @@ import flatMap from 'array.prototype.flatmap' flatMap.shim() import matchAll from 'string.prototype.matchall' matchAll.shim() +import { print } from '../logger' +import { stringify } from '../object' declare const IOUtils: any @@ -493,6 +495,7 @@ class WorkerZotero { } public getOption(option) { + print(`option::${stringify(workerJob.options)} [${option}] = ${workerJob.options[option]}`) return workerJob.options[option] } @@ -552,6 +555,8 @@ ctx.onmessage = function(e: { isTrusted?: boolean, data?: Translators.Worker.Mes case 'start': Object.assign(workerJob, JSON.parse(dec.decode(new Uint8Array(e.data.config)))) + print(`worker job: ${stringify(workerJob.options)}`) + importScripts(`chrome://zotero-better-bibtex/content/resource/${workerJob.translator}.js`) Zotero.start() .catch(err => { Zotero.logError(err) }) diff --git a/package-lock.json b/package-lock.json index 9f0cbac953..7a295357a7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -41,6 +41,7 @@ "js-jieba": "^1.0.12", "jslingua": "^0.13.0", "kuromoji": "^0.1.2", + "lodash.merge": "^4.6.2", "pako": "^2.1.0", "papaparse": "^5.4.1", "parse5": "^7.1.2", diff --git a/package.json b/package.json index aeed34bea0..bb8cbc90ff 100644 --- a/package.json +++ b/package.json @@ -95,6 +95,7 @@ "js-jieba": "^1.0.12", "jslingua": "^0.13.0", "kuromoji": "^0.1.2", + "lodash.merge": "^4.6.2", "pako": "^2.1.0", "papaparse": "^5.4.1", "parse5": "^7.1.2", diff --git a/test/features/export.feature b/test/features/export.feature index eb5c328270..4a86ad03f0 100644 --- a/test/features/export.feature +++ b/test/features/export.feature @@ -625,6 +625,7 @@ Feature: Export Scenario: Export of Contributor to WITH #2837-autoexport Given I import 1 reference from "export/*.json" + And I set preference .cache to false Then an auto-export to "~/autoexport.bib" using "Better BibLaTeX" should match "export/*.before.biblatex" When I change biblatexAPA to true on the auto-export And I wait 5 seconds diff --git a/translators/bibtex/biblatex.ts b/translators/bibtex/biblatex.ts index 06ba0aabeb..e53a37cc20 100644 --- a/translators/bibtex/biblatex.ts +++ b/translators/bibtex/biblatex.ts @@ -5,6 +5,7 @@ import { qualityReport } from '../../gen/biber-tool' import { Entry as BaseEntry, Config } from './entry' import { print } from '../../content/logger' +import { stringify } from '../../content/object' type CreatorArray = any[] & { type?: string } @@ -149,7 +150,7 @@ class Entry extends BaseEntry { creators.editorb.type = 'redactor' for (const creator of this.item.creators) { - print(`::translation:${JSON.stringify({ creator, options: this.translation.options })}`) + print(`::translation:${stringify({ creator, options: this.translation.options })}`) switch (creator.creatorType) { case 'director': // 365.something @@ -163,6 +164,7 @@ class Entry extends BaseEntry { break case 'contributor': + print(`creator::options ${stringify(this.translation)}`) if (this.translation.options.biblatexAPA) { creators.with.push(creator) } diff --git a/translators/lib/translator.ts b/translators/lib/translator.ts index 6c84878522..c1979a6a1b 100644 --- a/translators/lib/translator.ts +++ b/translators/lib/translator.ts @@ -447,15 +447,8 @@ export class Translation { // eslint-disable-line @typescript-eslint/naming-conv catch (err) { } - for (const key in this.options) { - if (typeof this.options[key] === 'boolean') { - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment - this.options[key] = Zotero.getOption(key) - } - else { - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment - this.options[key] = !!Zotero.getOption(key) - } + for (const key in this.options) { // eslint-disable-line guard-for-in + this.options[key] = !!Zotero.getOption(key) } this.options.custom = Zotero.getOption('custom') // for pandoc-filter CSL print(`translation options: ${JSON.stringify(this.options)}`) From 912de177ec98c995d666dafc984a224f8fc94793 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Fri, 19 Apr 2024 19:56:11 +0200 Subject: [PATCH 065/177] fixes #2842 --- content/better-bibtex.ts | 3 +- test/features/import.feature | 5 +++ test/features/steps/steps.py | 4 +- test/features/steps/zotero.py | 3 ++ ... online bib file entry on import #2842.bib | 6 +++ ...online bib file entry on import #2842.json | 42 +++++++++++++++++++ translators/Better BibTeX.ts | 36 +++------------- translators/bibtex/bibtex.ts | 10 +++++ 8 files changed, 75 insertions(+), 34 deletions(-) create mode 100644 test/fixtures/import/URL not recognised in a simple online bib file entry on import #2842.bib create mode 100644 test/fixtures/import/URL not recognised in a simple online bib file entry on import #2842.json diff --git a/content/better-bibtex.ts b/content/better-bibtex.ts index e37a443ac4..1b3345d9ca 100644 --- a/content/better-bibtex.ts +++ b/content/better-bibtex.ts @@ -55,7 +55,7 @@ import * as l10n from './l10n' import * as CSL from 'citeproc' import { generateBibLaTeX } from '../translators/bibtex/biblatex' -import { generateBibTeX, parseBibTeX } from '../translators/bibtex/bibtex' +import { generateBibTeX, parseBibTeX, detectBibTeX } from '../translators/bibtex/bibtex' import { generateCSLYAML, parseCSLYAML } from '../translators/csl/yaml' import { generateCSLJSON } from '../translators/csl/json' import { Translation } from '../translators/lib/translator' @@ -429,6 +429,7 @@ Zotero.Translate.Import.prototype.Sandbox.BetterBibTeX = { // eslint-disable-next-line @typescript-eslint/no-unsafe-return parseDate(_sandbox: any, date: string): ParsedDate { return DateParser.parse(date) }, + detectBibTeX(_sandbox: any, input: string) { return detectBibTeX(input) }, async parseBibTeX(_sandbox: any, input: string, translation: Translation) { return parseBibTeX(input, translation) }, parseCSLYAML(_sandbox: any, input: string): any { return parseCSLYAML(input) }, } diff --git a/test/features/import.feature b/test/features/import.feature index d430df266e..5dd5af75f0 100644 --- a/test/features/import.feature +++ b/test/features/import.feature @@ -10,6 +10,11 @@ Feature: Import When I import 2 references from "import/*.bib" Then the library should match "import/*.json" + Scenario: URL not recognised in a simple online bib file entry on import #2842 + When I apply the preferences from "import/*.json" + And I import 1 reference from "import/*.bib" + Then the library should match "import/*.json" + # And the markdown citation for Torre2008 should be '\(Torre & Verducci, 2008\)' # And the markdown bibliography for Torre2008 should be 'Torre, J., & Verducci, T. \(2008\). _The Yankee Years_. Doubleday.' # And the markdown citation for orre2008 should be '' diff --git a/test/features/steps/steps.py b/test/features/steps/steps.py index e411a965f8..5a3f5968ed 100644 --- a/test/features/steps/steps.py +++ b/test/features/steps/steps.py @@ -139,10 +139,10 @@ def step_impl(context): context.zotero.restart(timeout=context.timeout) @step(r'I apply the preferences from "{source}"') -def step_impl(context, references, source): +def step_impl(context, source): source = expand_scenario_variables(context, source) context.imported = source - assert_that(context.zotero.import_file(context, source, items=False), equal_to(references)) + assert_that(context.zotero.import_file(context, source, items=False), equal_to(0)) @step('I compile "{source}" to "{target}" it should match "{baseline}" with {n} citations') def step_impl(context, source, target, baseline, n): diff --git a/test/features/steps/zotero.py b/test/features/steps/zotero.py index 41ef5756f8..29161a69bc 100644 --- a/test/features/steps/zotero.py +++ b/test/features/steps/zotero.py @@ -526,6 +526,9 @@ def import_file(self, context, references, collection = False, items=True): shutil.copy(orig, references) if '.bib' in references: + utils.print(references) + utils.print(os.path.exists(references)) + assert os.path.exists(references), f'{json.dumps(references)} does not exist' copy = False bib = '' with open(references) as f: diff --git a/test/fixtures/import/URL not recognised in a simple online bib file entry on import #2842.bib b/test/fixtures/import/URL not recognised in a simple online bib file entry on import #2842.bib new file mode 100644 index 0000000000..b4226e12ec --- /dev/null +++ b/test/fixtures/import/URL not recognised in a simple online bib file entry on import #2842.bib @@ -0,0 +1,6 @@ +@Online{Gartner_CloudComputing, +author = {Gartner}, +month = {08}, +year = {2013}, +url = {https://web.archive.org/web/20130825054202/http://www.gartner.com/technology/reprints.do?id=1-1IMDMZ5&ct=130819&st=sb}, +} diff --git a/test/fixtures/import/URL not recognised in a simple online bib file entry on import #2842.json b/test/fixtures/import/URL not recognised in a simple online bib file entry on import #2842.json new file mode 100644 index 0000000000..a785f6ea99 --- /dev/null +++ b/test/fixtures/import/URL not recognised in a simple online bib file entry on import #2842.json @@ -0,0 +1,42 @@ +{ + "config": { + "id": "36a3b0b5-bad0-4a04-b79b-441c7cef77db", + "label": "BetterBibTeX JSON", + "options": { + "Items": true, + "Preferences": true, + "exportNotes": true, + "worker": true + }, + "preferences": { + "auxImport": true, + "baseAttachmentPath": "C:\\Users\\shwur\\WIZnet Germany GmbH\\Agents of P.U.F. - General\\Zotero Storage", + "importSentenceCase": "off", + "rawImports": true, + "relativeFilePaths": true + } + }, + "items": [ + { + "citationKey": "Gartner_CloudComputing", + "creators": [ + { + "creatorType": "author", + "name": "Gartner" + } + ], + "date": "2013-08", + "extra": [ + "Citation Key: Gartner_CloudComputing" + ], + "itemID": 1, + "itemType": "webpage", + "tags": [ + { + "tag": "#LaTeX", + "type": 1 + } + ] + } + ] +} \ No newline at end of file diff --git a/translators/Better BibTeX.ts b/translators/Better BibTeX.ts index 85a66f6f70..30c3501318 100644 --- a/translators/Better BibTeX.ts +++ b/translators/Better BibTeX.ts @@ -21,38 +21,12 @@ export function detectImport(): boolean { const maxChars = 1048576 // 1MB const chunk = 4096 - let inComment = false - let block = '' - let buffer = '' - let chr = '' - let charsRead = 0 - - const re = /^\s*@[a-zA-Z]+[({]/ - while ((buffer = Zotero.read(chunk)) && charsRead < maxChars) { - Zotero.debug(`Scanning ${buffer.length} characters for BibTeX`) - charsRead += buffer.length - for (let i=0; i 0 + } + catch (err) { + return false + } +} + export async function parseBibTeX(input: string, translation: Translation): Promise { translation.ZoteroItem = ZoteroItem From b395a54693af1dd19054773b9c8084f8febecca3 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Fri, 19 Apr 2024 20:12:02 +0200 Subject: [PATCH 066/177] testcase for #2842 --- ...sed in a simple online bib file entry on import #2842.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/fixtures/import/URL not recognised in a simple online bib file entry on import #2842.json b/test/fixtures/import/URL not recognised in a simple online bib file entry on import #2842.json index a785f6ea99..e1d118073d 100644 --- a/test/fixtures/import/URL not recognised in a simple online bib file entry on import #2842.json +++ b/test/fixtures/import/URL not recognised in a simple online bib file entry on import #2842.json @@ -11,6 +11,7 @@ "preferences": { "auxImport": true, "baseAttachmentPath": "C:\\Users\\shwur\\WIZnet Germany GmbH\\Agents of P.U.F. - General\\Zotero Storage", + "citekeyFormat": "auth + year", "importSentenceCase": "off", "rawImports": true, "relativeFilePaths": true @@ -36,7 +37,8 @@ "tag": "#LaTeX", "type": 1 } - ] + ], + "url": "https://web.archive.org/web/20130825054202/http://www.gartner.com/technology/reprints.do?id=1-1IMDMZ5&ct=130819&st=sb" } ] } \ No newline at end of file From 4e7720104878d676e481b997a88c31df583c1d6a Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Sat, 20 Apr 2024 11:08:24 +0200 Subject: [PATCH 067/177] less logging --- test/features/steps/zotero.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/test/features/steps/zotero.py b/test/features/steps/zotero.py index 29161a69bc..b01b98229f 100644 --- a/test/features/steps/zotero.py +++ b/test/features/steps/zotero.py @@ -526,8 +526,6 @@ def import_file(self, context, references, collection = False, items=True): shutil.copy(orig, references) if '.bib' in references: - utils.print(references) - utils.print(os.path.exists(references)) assert os.path.exists(references), f'{json.dumps(references)} does not exist' copy = False bib = '' From a0588c7ad495be9b47dff0401adaf93a7976d976 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Sat, 20 Apr 2024 11:13:13 +0200 Subject: [PATCH 068/177] restore --- content/better-bibtex.ts | 3 +- content/db/cache.tst | 218 +++++++++++++++++++++++++++++++++++++++ content/gantt.pug | 42 ++++++++ 3 files changed, 261 insertions(+), 2 deletions(-) create mode 100644 content/db/cache.tst create mode 100644 content/gantt.pug diff --git a/content/better-bibtex.ts b/content/better-bibtex.ts index 1b3345d9ca..e37a443ac4 100644 --- a/content/better-bibtex.ts +++ b/content/better-bibtex.ts @@ -55,7 +55,7 @@ import * as l10n from './l10n' import * as CSL from 'citeproc' import { generateBibLaTeX } from '../translators/bibtex/biblatex' -import { generateBibTeX, parseBibTeX, detectBibTeX } from '../translators/bibtex/bibtex' +import { generateBibTeX, parseBibTeX } from '../translators/bibtex/bibtex' import { generateCSLYAML, parseCSLYAML } from '../translators/csl/yaml' import { generateCSLJSON } from '../translators/csl/json' import { Translation } from '../translators/lib/translator' @@ -429,7 +429,6 @@ Zotero.Translate.Import.prototype.Sandbox.BetterBibTeX = { // eslint-disable-next-line @typescript-eslint/no-unsafe-return parseDate(_sandbox: any, date: string): ParsedDate { return DateParser.parse(date) }, - detectBibTeX(_sandbox: any, input: string) { return detectBibTeX(input) }, async parseBibTeX(_sandbox: any, input: string, translation: Translation) { return parseBibTeX(input, translation) }, parseCSLYAML(_sandbox: any, input: string): any { return parseCSLYAML(input) }, } diff --git a/content/db/cache.tst b/content/db/cache.tst new file mode 100644 index 0000000000..014b6bdae1 --- /dev/null +++ b/content/db/cache.tst @@ -0,0 +1,218 @@ +import * as idb from './idb' + +export let db: IDBDatabase | null = null + +export async function initialize(lastUpdated?: string): Promise { + if (db) return + + return new Promise((resolve, reject) => { + const openRequest = indexedDB.open('better-bibtex', 1) + + openRequest.onerror = openRequest.onblocked = function (e) { + Zotero.debug(`could not open cache: ${(event.target as IDBRequest).error}`) + reject(new Error(`could not open cache: ${(event.target as IDBRequest).error}`)) + } + + openRequest.onsuccess = async function (e) { + try { + db = (e.target as IDBRequest).result + const clear = lastUpdated && (lastUpdated > (Zotero.Prefs.get('translators.better-bibtex.cache.lastUpdated') || '')) + if (clear) { + const { tx, ExportFormat, Exported, ExportContext } = idb.tx(db, ['ExportFormat', 'Exported', 'ExportContext'], 'readwriteflush') + await Promise.all([ExportFormat.clear(), Exported.clear(), ExportContext.clear()]) + await tx + } + resolve(true) + } + catch (err) { + reject(err) + } + } + + openRequest.onupgradeneeded = function(e) { + const cache = (e.target as IDBRequest).result + const stores = { + ExportFormat: { keyPath: 'itemID', indices: undefined }, + Exported: { keyPath: ['context', 'itemID'], indices: { // keyPath order matters for key retrieval! + itemID: { unique: false }, + context: { unique: false } + } }, + ExportContext:{ keyPath: 'id', autoIncrement: true, indices: { + properties: { unique: false, multiEntry: true }, + } } + } + + for (const [name, config] of Object.entries(stores)) { + if (cache.objectStoreNames.contains(name)) cache.deleteObjectStore(name) + const indices = config.indices + delete config.indices + const store = cache.createObjectStore(name, config) + if (indices) { + for (const [index, setup] of Object.entries(indices)) { + store.createIndex(index, index, setup) + } + } + } + } + }) +} + +export function close() { + db?.close() +} + +export const exportFormat = new class ExportFormat { + async get(itemID: number) { + if (!db) return undefined + const { ExportFormat } = idb.tx(db, 'ToExportFormat', 'readonly') + return await ExportFormat.get(itemID) + } + + async store(item: ZoteroItem) { + if (!db) return + if (item.isFeedItem || !item.isRegularItem()) return + + const exportFormat = Zotero.Utilities.Internal.itemToExportFormat(item, false, true) + const { tx, ExportFormat } = idb.tx(db, 'ExportFormat', 'readwriteflush') + await ExportFormat.put(exportFormat) + await tx + Zotero.Prefs.set('translators.better-bibtex.cache.lastUpdated', exportFormat.dateModified) + } + + async delete(itemID: number) { + if (!db) return undefined + const { tx, ExportFormat } = idb.tx(db, 'ExportFormat', 'readwriteflush') + await ExportFormat.delete(itemID) + await tx + } + + async clear() { + if (!db) return undefined + const { tx, ExportFormat } = idb.tx(db, 'ExportFormat', 'readwriteflush') + await ExportFormat.clear() + await tx + } + + async missing(itemIDs: number[]) { + const { tx, ExportFormat } = idb.tx(db, 'ExportFormat', 'readonly') + const stored = new Set((await ExportFormat.getAllKeys()) as number[]) + await tx + return itemIDs.filter(itemID => !stored.has(itemID)) + } +} + +export type ExportContext = { + context: number + preferences: string[] + options: string[] +} +export type CacheEntry = { + context: number + itemID: number + exported: string +} + +type Properties = Record + +function serialize(properties: Properties): string[] { + return Object.entries(properties).map(([k, v]) => `${k}=${JSON.stringify(v)}`).sort() +} +function key(context: { preferences: Properties, options?: Properties }) { + return serialize(context.preferences).concat(context.options ? serialize(context.options) : []).join('\x1B') +} +export const exported = new class Exported { + async context(preferences: Properties, options: Properties): Promise { + const { tx, ExportContext } = idb.tx(db, 'ExportContext', 'readwriteflush') + try { + for await (const stored of ExportContext.each()) { + if (key(stored == key({ preferences, options}) return stored.id + } + return await ExportContext.add(, { properties }) as number + } + finally { + await tx + } + } + + async add(context: number, entry: CacheEntry) { + const { exported } = idb.tx(db, ['exported'], 'readwrite') + idb.add(exported, { context, ...entry }) // order matters -- context *must* be first for compound key retrieval! + } + + async get(context: number, itemID: number) { + const { exported } = idb.tx(db, ['exported'], 'readwrite') + idb.get(exported, [context, itemID]) // order matters! + } + + async remove(itemID: number) { + return await this.drop('itemID', itemID) + } + + async drop(name: string, value: number) { + return new Promise((resolve, reject) => { + const { exported } = idb.tx(db, ['exported'], 'readwrite') + const index = exported.index(name) + const request = index.openCursor(IDBKeyRange.only(value)) + request.onsuccess = function(e) { + let cursor = e.target.result + if (cursor) { + cursor.delete() + cursor.continue() + } + else { + resolve(true) + } + } + + request.onerror = function(e) { + reject(new Error(e.target.error)) + } + }) + } + + async touch(property: string, keep: any[]) { + for (const context of await this.touched(property, keep)) { + await this.drop('context', context) + } + } + + private async touched(property: string, keep: any[]): Promise { + const keeps = keep.map(context => Object.entries(context).map(([k, v]) => `${k}=${JSON.stringify(v)}`).sort().join('\x1B')) + + return new Promise((resolve, reject) => { + const { exportContext } = idb.tx(db, ['exportContext'], 'readwrite') + + const request = property + ? exportContext.index('properties').openCursor(IDBKeyRange.bound(`${property}=`, `${property}=\x7f`)) + : exportContext.openCursor() + const contexts = [] + request.onsuccess = function(e) { + const cursor = (e.target as IDBRequest).result + if (cursor) { + if (!keeps.includes(cursor.value.properties.join('\x1B'))) { + contexts.push(cursor.value.context) + cursor.delete() + } + cursor.continue() + } + else { + resolve(contexts) + } + } + request.onerror = function(e) { + reject(new Error(e.target.error)) + } + }) + } + + async clear() { + if (!db) return undefined + const { exported } = idb.tx(db, ['exported'], 'readwrite') + return await idb.clear(exported) + } + +} + +export async function reset(): Promise { + await Promise.all([exportFormat.clear(), exported.clear()]) +} diff --git a/content/gantt.pug b/content/gantt.pug new file mode 100644 index 0000000000..62db7e8492 --- /dev/null +++ b/content/gantt.pug @@ -0,0 +1,42 @@ +- const today = new Date().toISOString().slice(0, 10) +- const scale = n => Math.ceil(n/100) +doctype xml +project(name=`Better BibTeX ${phase}` company='' webLink='https://' view-date='2023-09-30' view-index='0' gantt-divider-location='614' resource-divider-location='300' version='3.3.3295' locale='en_GB') + description + calendars + #{'day-types'} + #{'day-type'}(id='0') + #{'day-type'}(id='1') + #{'default-week'}(id='1' name='default' sun='0' mon='0' tue='0' wed='0' thu='0' fri='0' sat='0') + days + tasks(empty-milestones='true') + taskproperties + taskproperty(id='tpd0' name='type' type='default' valuetype='icon') + taskproperty(id='tpd1' name='priority' type='default' valuetype='icon') + taskproperty(id='tpd2' name='info' type='default' valuetype='icon') + taskproperty(id='tpd3' name='name' type='default' valuetype='text') + taskproperty(id='tpd4' name='begindate' type='default' valuetype='date') + taskproperty(id='tpd5' name='enddate' type='default' valuetype='date') + taskproperty(id='tpd6' name='duration' type='default' valuetype='int') + taskproperty(id='tpd7' name='completion' type='default' valuetype='int') + taskproperty(id='tpd8' name='coordinator' type='default' valuetype='text') + taskproperty(id='tpd9' name='predecessorsr' type='default' valuetype='text') + each task in tasks + task( + id=task.taskid + uid=`${task.id}${Math.random()}` + name=task.id + meeting='false' + start=task.needs.length ? null : today + duration=scale(task.finished - task.started) + complete='0' + expand='true' + ) + each dependent in tasks.filter(t => t.needs.includes(task.id)) + depend(id=dependent.taskid type='2' difference='0' hardness='Strong') + resources + allocations + vacations + previous + roles(roleset-name='Default') + roles(roleset-name='SoftwareDevelopment') From 3cb3761c8ef33bc8f2c1c08d1b4ea012658006f8 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Sat, 20 Apr 2024 11:13:44 +0200 Subject: [PATCH 069/177] restore --- content/db/cache.tst | 218 ------------------------------------------- content/gantt.pug | 42 --------- 2 files changed, 260 deletions(-) delete mode 100644 content/db/cache.tst delete mode 100644 content/gantt.pug diff --git a/content/db/cache.tst b/content/db/cache.tst deleted file mode 100644 index 014b6bdae1..0000000000 --- a/content/db/cache.tst +++ /dev/null @@ -1,218 +0,0 @@ -import * as idb from './idb' - -export let db: IDBDatabase | null = null - -export async function initialize(lastUpdated?: string): Promise { - if (db) return - - return new Promise((resolve, reject) => { - const openRequest = indexedDB.open('better-bibtex', 1) - - openRequest.onerror = openRequest.onblocked = function (e) { - Zotero.debug(`could not open cache: ${(event.target as IDBRequest).error}`) - reject(new Error(`could not open cache: ${(event.target as IDBRequest).error}`)) - } - - openRequest.onsuccess = async function (e) { - try { - db = (e.target as IDBRequest).result - const clear = lastUpdated && (lastUpdated > (Zotero.Prefs.get('translators.better-bibtex.cache.lastUpdated') || '')) - if (clear) { - const { tx, ExportFormat, Exported, ExportContext } = idb.tx(db, ['ExportFormat', 'Exported', 'ExportContext'], 'readwriteflush') - await Promise.all([ExportFormat.clear(), Exported.clear(), ExportContext.clear()]) - await tx - } - resolve(true) - } - catch (err) { - reject(err) - } - } - - openRequest.onupgradeneeded = function(e) { - const cache = (e.target as IDBRequest).result - const stores = { - ExportFormat: { keyPath: 'itemID', indices: undefined }, - Exported: { keyPath: ['context', 'itemID'], indices: { // keyPath order matters for key retrieval! - itemID: { unique: false }, - context: { unique: false } - } }, - ExportContext:{ keyPath: 'id', autoIncrement: true, indices: { - properties: { unique: false, multiEntry: true }, - } } - } - - for (const [name, config] of Object.entries(stores)) { - if (cache.objectStoreNames.contains(name)) cache.deleteObjectStore(name) - const indices = config.indices - delete config.indices - const store = cache.createObjectStore(name, config) - if (indices) { - for (const [index, setup] of Object.entries(indices)) { - store.createIndex(index, index, setup) - } - } - } - } - }) -} - -export function close() { - db?.close() -} - -export const exportFormat = new class ExportFormat { - async get(itemID: number) { - if (!db) return undefined - const { ExportFormat } = idb.tx(db, 'ToExportFormat', 'readonly') - return await ExportFormat.get(itemID) - } - - async store(item: ZoteroItem) { - if (!db) return - if (item.isFeedItem || !item.isRegularItem()) return - - const exportFormat = Zotero.Utilities.Internal.itemToExportFormat(item, false, true) - const { tx, ExportFormat } = idb.tx(db, 'ExportFormat', 'readwriteflush') - await ExportFormat.put(exportFormat) - await tx - Zotero.Prefs.set('translators.better-bibtex.cache.lastUpdated', exportFormat.dateModified) - } - - async delete(itemID: number) { - if (!db) return undefined - const { tx, ExportFormat } = idb.tx(db, 'ExportFormat', 'readwriteflush') - await ExportFormat.delete(itemID) - await tx - } - - async clear() { - if (!db) return undefined - const { tx, ExportFormat } = idb.tx(db, 'ExportFormat', 'readwriteflush') - await ExportFormat.clear() - await tx - } - - async missing(itemIDs: number[]) { - const { tx, ExportFormat } = idb.tx(db, 'ExportFormat', 'readonly') - const stored = new Set((await ExportFormat.getAllKeys()) as number[]) - await tx - return itemIDs.filter(itemID => !stored.has(itemID)) - } -} - -export type ExportContext = { - context: number - preferences: string[] - options: string[] -} -export type CacheEntry = { - context: number - itemID: number - exported: string -} - -type Properties = Record - -function serialize(properties: Properties): string[] { - return Object.entries(properties).map(([k, v]) => `${k}=${JSON.stringify(v)}`).sort() -} -function key(context: { preferences: Properties, options?: Properties }) { - return serialize(context.preferences).concat(context.options ? serialize(context.options) : []).join('\x1B') -} -export const exported = new class Exported { - async context(preferences: Properties, options: Properties): Promise { - const { tx, ExportContext } = idb.tx(db, 'ExportContext', 'readwriteflush') - try { - for await (const stored of ExportContext.each()) { - if (key(stored == key({ preferences, options}) return stored.id - } - return await ExportContext.add(, { properties }) as number - } - finally { - await tx - } - } - - async add(context: number, entry: CacheEntry) { - const { exported } = idb.tx(db, ['exported'], 'readwrite') - idb.add(exported, { context, ...entry }) // order matters -- context *must* be first for compound key retrieval! - } - - async get(context: number, itemID: number) { - const { exported } = idb.tx(db, ['exported'], 'readwrite') - idb.get(exported, [context, itemID]) // order matters! - } - - async remove(itemID: number) { - return await this.drop('itemID', itemID) - } - - async drop(name: string, value: number) { - return new Promise((resolve, reject) => { - const { exported } = idb.tx(db, ['exported'], 'readwrite') - const index = exported.index(name) - const request = index.openCursor(IDBKeyRange.only(value)) - request.onsuccess = function(e) { - let cursor = e.target.result - if (cursor) { - cursor.delete() - cursor.continue() - } - else { - resolve(true) - } - } - - request.onerror = function(e) { - reject(new Error(e.target.error)) - } - }) - } - - async touch(property: string, keep: any[]) { - for (const context of await this.touched(property, keep)) { - await this.drop('context', context) - } - } - - private async touched(property: string, keep: any[]): Promise { - const keeps = keep.map(context => Object.entries(context).map(([k, v]) => `${k}=${JSON.stringify(v)}`).sort().join('\x1B')) - - return new Promise((resolve, reject) => { - const { exportContext } = idb.tx(db, ['exportContext'], 'readwrite') - - const request = property - ? exportContext.index('properties').openCursor(IDBKeyRange.bound(`${property}=`, `${property}=\x7f`)) - : exportContext.openCursor() - const contexts = [] - request.onsuccess = function(e) { - const cursor = (e.target as IDBRequest).result - if (cursor) { - if (!keeps.includes(cursor.value.properties.join('\x1B'))) { - contexts.push(cursor.value.context) - cursor.delete() - } - cursor.continue() - } - else { - resolve(contexts) - } - } - request.onerror = function(e) { - reject(new Error(e.target.error)) - } - }) - } - - async clear() { - if (!db) return undefined - const { exported } = idb.tx(db, ['exported'], 'readwrite') - return await idb.clear(exported) - } - -} - -export async function reset(): Promise { - await Promise.all([exportFormat.clear(), exported.clear()]) -} diff --git a/content/gantt.pug b/content/gantt.pug deleted file mode 100644 index 62db7e8492..0000000000 --- a/content/gantt.pug +++ /dev/null @@ -1,42 +0,0 @@ -- const today = new Date().toISOString().slice(0, 10) -- const scale = n => Math.ceil(n/100) -doctype xml -project(name=`Better BibTeX ${phase}` company='' webLink='https://' view-date='2023-09-30' view-index='0' gantt-divider-location='614' resource-divider-location='300' version='3.3.3295' locale='en_GB') - description - calendars - #{'day-types'} - #{'day-type'}(id='0') - #{'day-type'}(id='1') - #{'default-week'}(id='1' name='default' sun='0' mon='0' tue='0' wed='0' thu='0' fri='0' sat='0') - days - tasks(empty-milestones='true') - taskproperties - taskproperty(id='tpd0' name='type' type='default' valuetype='icon') - taskproperty(id='tpd1' name='priority' type='default' valuetype='icon') - taskproperty(id='tpd2' name='info' type='default' valuetype='icon') - taskproperty(id='tpd3' name='name' type='default' valuetype='text') - taskproperty(id='tpd4' name='begindate' type='default' valuetype='date') - taskproperty(id='tpd5' name='enddate' type='default' valuetype='date') - taskproperty(id='tpd6' name='duration' type='default' valuetype='int') - taskproperty(id='tpd7' name='completion' type='default' valuetype='int') - taskproperty(id='tpd8' name='coordinator' type='default' valuetype='text') - taskproperty(id='tpd9' name='predecessorsr' type='default' valuetype='text') - each task in tasks - task( - id=task.taskid - uid=`${task.id}${Math.random()}` - name=task.id - meeting='false' - start=task.needs.length ? null : today - duration=scale(task.finished - task.started) - complete='0' - expand='true' - ) - each dependent in tasks.filter(t => t.needs.includes(task.id)) - depend(id=dependent.taskid type='2' difference='0' hardness='Strong') - resources - allocations - vacations - previous - roles(roleset-name='Default') - roles(roleset-name='SoftwareDevelopment') From c8d5ef90118504aad350e0da629acda154b33c48 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Sat, 20 Apr 2024 11:15:29 +0200 Subject: [PATCH 070/177] new parser --- translators/Better BibTeX.ts | 36 +++++++++++++++++++++++++++++++----- translators/bibtex/bibtex.ts | 10 ---------- 2 files changed, 31 insertions(+), 15 deletions(-) diff --git a/translators/Better BibTeX.ts b/translators/Better BibTeX.ts index 30c3501318..85a66f6f70 100644 --- a/translators/Better BibTeX.ts +++ b/translators/Better BibTeX.ts @@ -21,12 +21,38 @@ export function detectImport(): boolean { const maxChars = 1048576 // 1MB const chunk = 4096 - let input = Zotero.read(chunk) - while ((input += Zotero.read(chunk)) && input.length < maxChars) { - Zotero.debug(`tasting ${input}`) - if (Zotero.BetterBibTeX.detectBibTeX(input)) return true + let inComment = false + let block = '' + let buffer = '' + let chr = '' + let charsRead = 0 + + const re = /^\s*@[a-zA-Z]+[({]/ + while ((buffer = Zotero.read(chunk)) && charsRead < maxChars) { + Zotero.debug(`Scanning ${buffer.length} characters for BibTeX`) + charsRead += buffer.length + for (let i=0; i 0 - } - catch (err) { - return false - } -} - export async function parseBibTeX(input: string, translation: Translation): Promise { translation.ZoteroItem = ZoteroItem From ffa2cd6df479b66ccc9ccee7eeb25f355edf0012 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Sat, 20 Apr 2024 11:21:23 +0200 Subject: [PATCH 071/177] scrub log --- content/ErrorReport.ts | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/content/ErrorReport.ts b/content/ErrorReport.ts index 4b700d7a50..a6b59a8aed 100644 --- a/content/ErrorReport.ts +++ b/content/ErrorReport.ts @@ -187,7 +187,7 @@ export class ErrorReport { if (tab) tab.hidden = !value } - private errors(): string { + private scrub(logging: string[]): string { const ignore = [ /NS_NOINTERFACE.*ComponentUtils[.]jsm/, /Addon must include an id, version, and type/, @@ -198,8 +198,15 @@ export class ErrorReport { /See your zotero.org account settings for additional storage options/, /Could not get children of.*CrashManager.jsm/, ] + return logging.filter(line => !ignore.find(re => line.match(re))).join('\n') + } + + private errors(): string { + return this.scrub(Zotero.getErrors(true) as string[]) + } - return (Zotero.getErrors(true) as string[]).filter(line => !ignore.find(re => line.match(re))).join('\n') + private log(): string { + return this.scrub(Zotero.Debug.getConsoleViewerOutput().slice(-500000)) } private cleanItem(item: any) { @@ -310,7 +317,7 @@ export class ErrorReport { context: await this.context(), errors: `${Zotero.BetterBibTeX.outOfMemory}\n${this.errors()}`.trim(), // # 1896 - log: Zotero.Debug.getConsoleViewerOutput().slice(-500000).join('\n'), + log: this.log(), items: win.arguments[0].wrappedJSObject.items, } const acronyms = $OS.Path.join(Zotero.BetterBibTeX.dir, 'acronyms.csv') From 24f3377a6f8e398b8ebd9f167a66b0dc9e9411eb Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Sat, 20 Apr 2024 11:53:13 +0200 Subject: [PATCH 072/177] trim logging --- content/auto-export.ts | 1 - content/object.ts | 15 --------------- content/translators.ts | 1 - content/worker/zotero.ts | 4 ---- translators/bibtex/biblatex.ts | 4 ---- 5 files changed, 25 deletions(-) diff --git a/content/auto-export.ts b/content/auto-export.ts index 61f94b8a07..54a4358bd8 100644 --- a/content/auto-export.ts +++ b/content/auto-export.ts @@ -59,7 +59,6 @@ export const SQL = new class { job[setting] = value } - log.debug('autoexport job', job) return job as Job } diff --git a/content/object.ts b/content/object.ts index b263b9dfd2..0d75068fe5 100644 --- a/content/object.ts +++ b/content/object.ts @@ -8,18 +8,3 @@ export const pick = (obj: T, keys: TKey return acc }, {} as Pick) } - -export function stringify(obj: any): string { // eslint-disable-line @typescript-eslint/explicit-module-boundary-types - const seen = new WeakSet() - return JSON.stringify(obj, (key, value) => { - if (typeof value === 'object' && value !== null) { - if (seen.has(value)) { - // If we've seen this object before, return a placeholder - return '[Circular]' - } - seen.add(value) - } - // Otherwise, proceed with the stringification - return value // eslint-disable-line @typescript-eslint/no-unsafe-return - }) -} diff --git a/content/translators.ts b/content/translators.ts index bac12d3416..6f20df60a1 100644 --- a/content/translators.ts +++ b/content/translators.ts @@ -255,7 +255,6 @@ export const Translators = new class { // eslint-disable-line @typescript-eslint exportPath: job.path || undefined, exportDir: job.path ? $OS.Path.dirname(job.path) : undefined, } - log.debug('export job:', displayOptions) const translator = this.byId[job.translatorID] diff --git a/content/worker/zotero.ts b/content/worker/zotero.ts index 438e22c14c..a00a015ce6 100644 --- a/content/worker/zotero.ts +++ b/content/worker/zotero.ts @@ -4,8 +4,6 @@ import flatMap from 'array.prototype.flatmap' flatMap.shim() import matchAll from 'string.prototype.matchall' matchAll.shim() -import { print } from '../logger' -import { stringify } from '../object' declare const IOUtils: any @@ -495,7 +493,6 @@ class WorkerZotero { } public getOption(option) { - print(`option::${stringify(workerJob.options)} [${option}] = ${workerJob.options[option]}`) return workerJob.options[option] } @@ -555,7 +552,6 @@ ctx.onmessage = function(e: { isTrusted?: boolean, data?: Translators.Worker.Mes case 'start': Object.assign(workerJob, JSON.parse(dec.decode(new Uint8Array(e.data.config)))) - print(`worker job: ${stringify(workerJob.options)}`) importScripts(`chrome://zotero-better-bibtex/content/resource/${workerJob.translator}.js`) Zotero.start() diff --git a/translators/bibtex/biblatex.ts b/translators/bibtex/biblatex.ts index e53a37cc20..ac57021cb0 100644 --- a/translators/bibtex/biblatex.ts +++ b/translators/bibtex/biblatex.ts @@ -4,8 +4,6 @@ import { strToISO } from '../../content/dateparser' import { qualityReport } from '../../gen/biber-tool' import { Entry as BaseEntry, Config } from './entry' -import { print } from '../../content/logger' -import { stringify } from '../../content/object' type CreatorArray = any[] & { type?: string } @@ -150,7 +148,6 @@ class Entry extends BaseEntry { creators.editorb.type = 'redactor' for (const creator of this.item.creators) { - print(`::translation:${stringify({ creator, options: this.translation.options })}`) switch (creator.creatorType) { case 'director': // 365.something @@ -164,7 +161,6 @@ class Entry extends BaseEntry { break case 'contributor': - print(`creator::options ${stringify(this.translation)}`) if (this.translation.options.biblatexAPA) { creators.with.push(creator) } From b25d35cbfc6e0edfb885ce42845034fca7f81fb3 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Sat, 20 Apr 2024 11:56:12 +0200 Subject: [PATCH 073/177] async ftw --- content/worker/zotero.ts | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/content/worker/zotero.ts b/content/worker/zotero.ts index 18c12082f1..b7c11fde8b 100644 --- a/content/worker/zotero.ts +++ b/content/worker/zotero.ts @@ -541,7 +541,7 @@ export var Zotero = new WorkerZotero // eslint-disable-line @typescript-eslint/n const dec = new TextDecoder('utf-8') -ctx.onmessage = function(e: { isTrusted?: boolean, data?: Translators.Worker.Message } ): void { // eslint-disable-line prefer-arrow/prefer-arrow-functions +ctx.onmessage = async function(e: { isTrusted?: boolean, data?: Translators.Worker.Message } ): void { // eslint-disable-line prefer-arrow/prefer-arrow-functions if (!e.data) return // some kind of startup message try { @@ -553,9 +553,15 @@ ctx.onmessage = function(e: { isTrusted?: boolean, data?: Translators.Worker.Mes case 'start': Object.assign(workerJob, JSON.parse(dec.decode(new Uint8Array(e.data.config)))) importScripts(`chrome://zotero-better-bibtex/content/resource/${workerJob.translator}.js`) - Zotero.start() - .catch(err => { Zotero.logError(err) }) - .finally(() => { Zotero.send({ kind: 'done', output: Zotero.exportFile ? true : Zotero.output }) }) + try { + await Zotero.start() + } + catch (err) { + Zotero.logError(err) + } + finally { + Zotero.send({ kind: 'done', output: Zotero.exportFile ? true : Zotero.output }) + } break case 'stop': From a87d2d847469e3de72d5a994103901283a86f64b Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Sat, 20 Apr 2024 12:58:21 +0200 Subject: [PATCH 074/177] async --- content/worker/zotero.ts | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/content/worker/zotero.ts b/content/worker/zotero.ts index bdda4e2b06..558c5c6d21 100644 --- a/content/worker/zotero.ts +++ b/content/worker/zotero.ts @@ -5,6 +5,9 @@ flatMap.shim() import matchAll from 'string.prototype.matchall' matchAll.shim() +import { print } from '../logger' +import { stringify } from '../stringify' + declare const IOUtils: any import { Shim } from '../os' @@ -24,8 +27,6 @@ for(const [key, value] of (new URLSearchParams(ctx.location.search)).entries()) workerEnvironment[key] = value } -declare const dump: (message: string) => void - importScripts('resource://zotero/config.js') // import ZOTERO_CONFIG' import { client, clientName } from '../../content/client' @@ -197,7 +198,6 @@ class WorkerZoteroBetterBibTeX { public getContents(path: string): string { if (!path) return null - dump(`getContents from ${path}\n`) try { if (is7) { const file = IOUtils.openFileForSyncReading(path) @@ -217,26 +217,21 @@ class WorkerZoteroBetterBibTeX { } file.close() - dump(`getContents ${path} return\n`) return text } else { if (!OS.File.exists(path)) return null const bytes = OS.File.read(path) const decoder = new TextDecoder() - dump(`getContents ${path} return\n`) return decoder.decode(bytes as BufferSource) } } catch (err) { if (!err.message?.includes('NS_ERROR_FILE_NOT_FOUND')) { - dump(`getContents ${path} error ${err} ${Object.keys(err)} ${err.message}\n`) + print(`getContents ${path} error ${err} ${Object.keys(err)} ${err.message}`) } return null } - finally { - dump(`getContents ${path} out\n`) - } } /* @@ -502,7 +497,7 @@ class WorkerZotero { } } public logError(err) { - dump(`worker: error: ${err}\n${err.stack}\n`) + print(`worker: error: ${err}\n${err.stack}`) this.send({ kind: 'error', message: `${err}\n${err.stack}` }) } @@ -541,7 +536,7 @@ export var Zotero = new WorkerZotero // eslint-disable-line @typescript-eslint/n const dec = new TextDecoder('utf-8') -ctx.onmessage = async function(e: { isTrusted?: boolean, data?: Translators.Worker.Message } ): void { // eslint-disable-line prefer-arrow/prefer-arrow-functions +ctx.onmessage = async function(e: { isTrusted?: boolean, data?: Translators.Worker.Message } ): Promise { // eslint-disable-line prefer-arrow/prefer-arrow-functions if (!e.data) return // some kind of startup message try { @@ -552,6 +547,7 @@ ctx.onmessage = async function(e: { isTrusted?: boolean, data?: Translators.Work case 'start': Object.assign(workerJob, JSON.parse(dec.decode(new Uint8Array(e.data.config)))) + print(`worker start:: ${stringify(workerJob.options)}`) importScripts(`chrome://zotero-better-bibtex/content/resource/${workerJob.translator}.js`) try { From e6e8cffd427fc65005b8cfd2984aaf62e709ab09 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Sat, 20 Apr 2024 12:58:43 +0200 Subject: [PATCH 075/177] async --- content/worker/zotero.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/worker/zotero.ts b/content/worker/zotero.ts index b7c11fde8b..ac4854f5e5 100644 --- a/content/worker/zotero.ts +++ b/content/worker/zotero.ts @@ -541,7 +541,7 @@ export var Zotero = new WorkerZotero // eslint-disable-line @typescript-eslint/n const dec = new TextDecoder('utf-8') -ctx.onmessage = async function(e: { isTrusted?: boolean, data?: Translators.Worker.Message } ): void { // eslint-disable-line prefer-arrow/prefer-arrow-functions +ctx.onmessage = async function(e: { isTrusted?: boolean, data?: Translators.Worker.Message } ): Promise { // eslint-disable-line prefer-arrow/prefer-arrow-functions if (!e.data) return // some kind of startup message try { From 2e7a705a02b61b2ce7aaf8eae6480e16d7523033 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Sun, 21 Apr 2024 10:48:23 +0200 Subject: [PATCH 076/177] fixes #2837 --- content/better-bibtex.ts | 11 ----------- content/logger.ts | 2 +- content/stringify.ts | 2 +- content/worker/zotero.ts | 11 ----------- test/features/export.feature | 3 +-- test/features/steps/steps.py | 1 - ...ontributor to WITH #2837-autoexport.after.biblatex | 6 ++++++ translators/Better BibLaTeX.ts | 1 + translators/bibtex/biblatex.ts | 3 +++ translators/bibtex/exporter.ts | 1 + translators/lib/translator.ts | 2 +- 11 files changed, 15 insertions(+), 28 deletions(-) diff --git a/content/better-bibtex.ts b/content/better-bibtex.ts index ac363a84fe..de541e56ff 100644 --- a/content/better-bibtex.ts +++ b/content/better-bibtex.ts @@ -399,17 +399,6 @@ Zotero.Translate.Export.prototype.Sandbox.BetterBibTeX = { generateCSLYAML(_sandbox: any, translation: Translation) { generateCSLYAML(translation) }, generateCSLJSON(_sandbox: any, translation: Translation) { generateCSLJSON(translation) }, - /* - cacheFetch(sandbox: { translator: { label: string }[] }, itemID: number, options: { exportNotes: boolean, useJournalAbbreviation: boolean }, prefs: any) { - // eslint-disable-next-line @typescript-eslint/no-unsafe-return - return Cache.fetch(sandbox.translator[0].label, itemID, options, prefs) - }, - - cacheStore(sandbox: { translator: { label: string }[] }, itemID: number, options: { exportNotes: boolean, useJournalAbbreviation: boolean }, prefs: any, entry: any, metadata: any) { - return Cache.store(sandbox.translator[0].label, itemID, options, prefs, entry, metadata) - }, - */ - parseDate(_sandbox: any, date: string): ParsedDate { return DateParser.parse(date) }, } diff --git a/content/logger.ts b/content/logger.ts index d8dab8d569..1181c96891 100644 --- a/content/logger.ts +++ b/content/logger.ts @@ -35,7 +35,7 @@ class Logger { let prefix = '' if (typeof workerEnvironment !== 'undefined') { prefix += ' worker' - if (typeof workerJob !== 'undefined') prefix += `${workerJob.translator}` + if (typeof workerJob !== 'undefined') prefix += `:${workerJob.translator}` } if (error) prefix += ' error:' diff --git a/content/stringify.ts b/content/stringify.ts index 610baf602a..40920cdaa8 100644 --- a/content/stringify.ts +++ b/content/stringify.ts @@ -59,7 +59,7 @@ function $stringify(key, value, cache): any { } // safely handles circular references -export function stringify(obj, indent: number | string = 2, ucode?: boolean) { // eslint-disable-line @typescript-eslint/explicit-module-boundary-types +export function stringify(obj, indent: number | string = 0, ucode?: boolean) { // eslint-disable-line @typescript-eslint/explicit-module-boundary-types let cache = [] const stringified = JSON.stringify( obj, diff --git a/content/worker/zotero.ts b/content/worker/zotero.ts index 558c5c6d21..eb6a04401f 100644 --- a/content/worker/zotero.ts +++ b/content/worker/zotero.ts @@ -234,16 +234,6 @@ class WorkerZoteroBetterBibTeX { } } - /* - public cacheFetch(itemID: number) { - return cacheFetch('', itemID, null, null) - } - - public cacheStore(itemID: number, _options: any, _prefs: any, entry: string, metadata: any) { - return cacheStore('', itemID, null, null, entry, metadata) - } - */ - public parseDate(date) { return DateParser.parse(date) } @@ -547,7 +537,6 @@ ctx.onmessage = async function(e: { isTrusted?: boolean, data?: Translators.Work case 'start': Object.assign(workerJob, JSON.parse(dec.decode(new Uint8Array(e.data.config)))) - print(`worker start:: ${stringify(workerJob.options)}`) importScripts(`chrome://zotero-better-bibtex/content/resource/${workerJob.translator}.js`) try { diff --git a/test/features/export.feature b/test/features/export.feature index 4a86ad03f0..54ce289aa9 100644 --- a/test/features/export.feature +++ b/test/features/export.feature @@ -625,10 +625,9 @@ Feature: Export Scenario: Export of Contributor to WITH #2837-autoexport Given I import 1 reference from "export/*.json" - And I set preference .cache to false Then an auto-export to "~/autoexport.bib" using "Better BibLaTeX" should match "export/*.before.biblatex" When I change biblatexAPA to true on the auto-export - And I wait 5 seconds + And I wait 15 seconds Then "~/autoexport.bib" should match "export/*.after.biblatex" Scenario: Auto-Export citekey edits #citekey-edit diff --git a/test/features/steps/steps.py b/test/features/steps/steps.py index 886ef13059..e411a965f8 100644 --- a/test/features/steps/steps.py +++ b/test/features/steps/steps.py @@ -232,7 +232,6 @@ def export_library(context, translator='BetterBibTeX JSON', collection=None, exp if output: assert output.startswith('~/'), output output = os.path.join(context.tmpDir, output[2:]) - utils.print(json.dumps(displayOptions)) start = time.time() context.zotero.export_library( diff --git a/test/fixtures/export/Export of Contributor to WITH #2837-autoexport.after.biblatex b/test/fixtures/export/Export of Contributor to WITH #2837-autoexport.after.biblatex index e69de29bb2..00754c10ff 100644 --- a/test/fixtures/export/Export of Contributor to WITH #2837-autoexport.after.biblatex +++ b/test/fixtures/export/Export of Contributor to WITH #2837-autoexport.after.biblatex @@ -0,0 +1,6 @@ +@book{meyersWitheringWorrying2014, + title = {Withering Worrying}, + author = {Meyers, K.}, + with = {Long, W. T.}, + date = {2014} +} diff --git a/translators/Better BibLaTeX.ts b/translators/Better BibLaTeX.ts index dd80c72365..50603940de 100644 --- a/translators/Better BibLaTeX.ts +++ b/translators/Better BibLaTeX.ts @@ -1,5 +1,6 @@ declare const Zotero: any +import { print } from '../content/logger' import { Translation, collect } from './lib/translator' import type { Translators } from '../typings/translators.d.ts' declare var ZOTERO_TRANSLATOR_INFO: Translators.Header // eslint-disable-line no-var diff --git a/translators/bibtex/biblatex.ts b/translators/bibtex/biblatex.ts index ac57021cb0..5708457f02 100644 --- a/translators/bibtex/biblatex.ts +++ b/translators/bibtex/biblatex.ts @@ -5,6 +5,9 @@ import { qualityReport } from '../../gen/biber-tool' import { Entry as BaseEntry, Config } from './entry' +import { print } from '../../content/logger' +import { stringify } from '../../content/stringify' + type CreatorArray = any[] & { type?: string } const config: Config = { diff --git a/translators/bibtex/exporter.ts b/translators/bibtex/exporter.ts index 580b2af76a..68d9d44d7f 100644 --- a/translators/bibtex/exporter.ts +++ b/translators/bibtex/exporter.ts @@ -1,6 +1,7 @@ declare const Zotero: any import { Translation } from '../lib/translator' +import { print } from '../../content/logger' import { RegularItem } from '../../gen/typings/serialized-item' import { Cache } from '../../typings/cache' diff --git a/translators/lib/translator.ts b/translators/lib/translator.ts index c1979a6a1b..2355b5451c 100644 --- a/translators/lib/translator.ts +++ b/translators/lib/translator.ts @@ -9,6 +9,7 @@ import * as Prefs from '../../gen/preferences/meta' const PrefNames: Set = new Set(Object.keys(Prefs.defaults)) import { client } from '../../content/client' import { print } from '../../content/logger' +import { stringify } from '../../content/stringify' import { RegularItem, Item, Collection, Attachment } from '../../gen/typings/serialized-item' import type { Exporter as BibTeXExporter } from '../bibtex/exporter' import type { ZoteroItem } from '../bibtex/bibtex' @@ -451,7 +452,6 @@ export class Translation { // eslint-disable-line @typescript-eslint/naming-conv this.options[key] = !!Zotero.getOption(key) } this.options.custom = Zotero.getOption('custom') // for pandoc-filter CSL - print(`translation options: ${JSON.stringify(this.options)}`) this.preferences = Object.entries(Prefs.defaults).reduce((acc, [pref, dflt]) => { acc[pref] = Zotero.getHiddenPref(`better-bibtex.${pref}`) ?? dflt From 02266ed48a345ae94017a87a1695c70a2221d0b5 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Sun, 21 Apr 2024 10:57:26 +0200 Subject: [PATCH 077/177] fixes #2837 --- content/worker/zotero.ts | 1 - translators/Better BibLaTeX.ts | 1 - translators/bibtex/biblatex.ts | 3 --- translators/bibtex/exporter.ts | 1 - translators/lib/translator.ts | 2 -- 5 files changed, 8 deletions(-) diff --git a/content/worker/zotero.ts b/content/worker/zotero.ts index eb6a04401f..1e36bc39c4 100644 --- a/content/worker/zotero.ts +++ b/content/worker/zotero.ts @@ -6,7 +6,6 @@ import matchAll from 'string.prototype.matchall' matchAll.shim() import { print } from '../logger' -import { stringify } from '../stringify' declare const IOUtils: any diff --git a/translators/Better BibLaTeX.ts b/translators/Better BibLaTeX.ts index 50603940de..dd80c72365 100644 --- a/translators/Better BibLaTeX.ts +++ b/translators/Better BibLaTeX.ts @@ -1,6 +1,5 @@ declare const Zotero: any -import { print } from '../content/logger' import { Translation, collect } from './lib/translator' import type { Translators } from '../typings/translators.d.ts' declare var ZOTERO_TRANSLATOR_INFO: Translators.Header // eslint-disable-line no-var diff --git a/translators/bibtex/biblatex.ts b/translators/bibtex/biblatex.ts index 5708457f02..ac57021cb0 100644 --- a/translators/bibtex/biblatex.ts +++ b/translators/bibtex/biblatex.ts @@ -5,9 +5,6 @@ import { qualityReport } from '../../gen/biber-tool' import { Entry as BaseEntry, Config } from './entry' -import { print } from '../../content/logger' -import { stringify } from '../../content/stringify' - type CreatorArray = any[] & { type?: string } const config: Config = { diff --git a/translators/bibtex/exporter.ts b/translators/bibtex/exporter.ts index 68d9d44d7f..580b2af76a 100644 --- a/translators/bibtex/exporter.ts +++ b/translators/bibtex/exporter.ts @@ -1,7 +1,6 @@ declare const Zotero: any import { Translation } from '../lib/translator' -import { print } from '../../content/logger' import { RegularItem } from '../../gen/typings/serialized-item' import { Cache } from '../../typings/cache' diff --git a/translators/lib/translator.ts b/translators/lib/translator.ts index 2355b5451c..293081ab5b 100644 --- a/translators/lib/translator.ts +++ b/translators/lib/translator.ts @@ -8,8 +8,6 @@ const $OS = is7 ? Shim : OS import * as Prefs from '../../gen/preferences/meta' const PrefNames: Set = new Set(Object.keys(Prefs.defaults)) import { client } from '../../content/client' -import { print } from '../../content/logger' -import { stringify } from '../../content/stringify' import { RegularItem, Item, Collection, Attachment } from '../../gen/typings/serialized-item' import type { Exporter as BibTeXExporter } from '../bibtex/exporter' import type { ZoteroItem } from '../bibtex/bibtex' From c058f659c0f9da7467f18bc36b477a3f17070cf9 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Mon, 22 Apr 2024 11:17:57 +0200 Subject: [PATCH 078/177] ncu --- package-lock.json | 36 ++++++++++++++++++------------------ package.json | 4 ++-- site/themes/relearn | 2 +- submodules/babel | 2 +- submodules/zotero | 2 +- 5 files changed, 23 insertions(+), 23 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7a295357a7..a2dee85af7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -48,7 +48,7 @@ "pinyin": "^3.1.0", "punycode2": "^1.0.1", "puqeue": "^1.1.4", - "remeda": "^1.59.0", + "remeda": "^1.60.1", "sprintf-js": "^1.1.3", "string.prototype.matchall": "^4.0.11", "tar-js": "^0.3.0", @@ -116,7 +116,7 @@ "process": "^0.11.10", "properties-reader": "^2.3.0", "pug": "^3.0.2", - "putout": "^35.15.0", + "putout": "^35.16.0", "recast": "^0.23.6", "regenerate": "^1.4.2", "rimraf": "^5.0.5", @@ -1982,9 +1982,9 @@ } }, "node_modules/@putout/plugin-declare": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@putout/plugin-declare/-/plugin-declare-3.1.0.tgz", - "integrity": "sha512-Jk+lxWiSUU98ZF0Gs8RkzbgNtpJp9ZkfM0B10VUnzIOpkwX0nzY7t5tuQLbKCmyc7ZInd/T4Usuogy8ZhKdu7Q==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@putout/plugin-declare/-/plugin-declare-4.0.0.tgz", + "integrity": "sha512-t5PQ/BsUvSbEBEQQBgQ6Lyg8MVFzDgl7P3ycv6GGaJ4C6dmGOwa2qePxvnQ2Bgqa6ZXPfj9wsCraofXfjIH7tg==", "dev": true, "engines": { "node": ">=18" @@ -2793,15 +2793,15 @@ } }, "node_modules/@putout/plugin-types": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@putout/plugin-types/-/plugin-types-3.0.0.tgz", - "integrity": "sha512-DX/uhechHHBgJkDgk8+lyUjQn6kIktYVVHX2l9pVlqy9BIot4lG5Hy3AAFBm7/LeBrTNafy7z3s/sZmqBHj3GA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@putout/plugin-types/-/plugin-types-4.0.0.tgz", + "integrity": "sha512-Uy8Ipq4MjLk3RAVdvU9hQ+80rG/g2PslcOo44jL2a0DI6sX6TmyPgXAQFeLiIk/DVONvVchE6nRivA6qIX1P8A==", "dev": true, "engines": { - "node": ">=16" + "node": ">=18" }, "peerDependencies": { - "putout": ">=31" + "putout": ">=35" } }, "node_modules/@putout/plugin-typescript": { @@ -14691,9 +14691,9 @@ "integrity": "sha512-EkCRMV2w15w+9wylcpabacKK9VvTRX3TvhVQJBwIk4ThvllI2M6RlvdEZvJLhxsxy4x8IEDZneQhlGU0Pk5keg==" }, "node_modules/putout": { - "version": "35.15.0", - "resolved": "https://registry.npmjs.org/putout/-/putout-35.15.0.tgz", - "integrity": "sha512-eXMB8k6v6Nfy/1FBLiyjh5qULZyt1jyXWddMpHlUnu9bq9i2n+a88MV7JzBuupaSnTFdWuGQ6+xPVp58GvDqvQ==", + "version": "35.16.0", + "resolved": "https://registry.npmjs.org/putout/-/putout-35.16.0.tgz", + "integrity": "sha512-BUox495zAHFwZT2AvZcZTRWg6hpV5xgDWXu7XAfUV8vl9SW7ZzMfH4ETvESHOKhHqOZV2ThIf6hD8yOzxaQGwg==", "dev": true, "dependencies": { "@putout/babel": "^2.0.0", @@ -14756,7 +14756,7 @@ "@putout/plugin-convert-template-to-string": "^2.0.0", "@putout/plugin-convert-to-arrow-function": "^4.0.0", "@putout/plugin-coverage": "^1.0.0", - "@putout/plugin-declare": "^3.0.0", + "@putout/plugin-declare": "^4.0.0", "@putout/plugin-declare-before-reference": "^3.0.0", "@putout/plugin-declare-imports-first": "^2.0.0", "@putout/plugin-eslint": "^8.0.0", @@ -14821,7 +14821,7 @@ "@putout/plugin-split-variable-declarations": "^3.0.0", "@putout/plugin-tape": "^14.0.0", "@putout/plugin-try-catch": "^3.0.0", - "@putout/plugin-types": "^3.0.0", + "@putout/plugin-types": "^4.0.0", "@putout/plugin-typescript": "^7.0.0", "@putout/plugin-webpack": "^3.0.0", "@putout/processor-css": "^9.0.0", @@ -16260,9 +16260,9 @@ } }, "node_modules/remeda": { - "version": "1.59.0", - "resolved": "https://registry.npmjs.org/remeda/-/remeda-1.59.0.tgz", - "integrity": "sha512-yqIz7z+eriLF6ll4TxhUM56b2wIrmHgJNbzRGYqfJ0Jx6QOioSvGJuT9jD6MqtKzGUizaxSlJZXTVYjVSC4Qig==" + "version": "1.60.1", + "resolved": "https://registry.npmjs.org/remeda/-/remeda-1.60.1.tgz", + "integrity": "sha512-g2h+NJbYJlaVKjT8ipLLYAhoNcZaES9UPnPSwY3uRO52KDl77y9AQucgdyiBt+bTCB80MJ1Hdr0N9rdxOFEZ4g==" }, "node_modules/remove-blank-lines": { "version": "1.4.1", diff --git a/package.json b/package.json index bb8cbc90ff..ac7607e59d 100644 --- a/package.json +++ b/package.json @@ -102,7 +102,7 @@ "pinyin": "^3.1.0", "punycode2": "^1.0.1", "puqeue": "^1.1.4", - "remeda": "^1.59.0", + "remeda": "^1.60.1", "sprintf-js": "^1.1.3", "string.prototype.matchall": "^4.0.11", "tar-js": "^0.3.0", @@ -170,7 +170,7 @@ "process": "^0.11.10", "properties-reader": "^2.3.0", "pug": "^3.0.2", - "putout": "^35.15.0", + "putout": "^35.16.0", "recast": "^0.23.6", "regenerate": "^1.4.2", "rimraf": "^5.0.5", diff --git a/site/themes/relearn b/site/themes/relearn index 77ed3f431a..87812d1e29 160000 --- a/site/themes/relearn +++ b/site/themes/relearn @@ -1 +1 @@ -Subproject commit 77ed3f431ae6fffa8f63c0ac59a407f06167cb19 +Subproject commit 87812d1e296261fcbff707eb7c364b89949499b2 diff --git a/submodules/babel b/submodules/babel index 1040ffd87c..5d3a398da0 160000 --- a/submodules/babel +++ b/submodules/babel @@ -1 +1 @@ -Subproject commit 1040ffd87cc538a6121ab34d34213bd1e907a212 +Subproject commit 5d3a398da0459785c13b350ea92d9e29c54462c7 diff --git a/submodules/zotero b/submodules/zotero index 4fe0ebc63b..704d90cd83 160000 --- a/submodules/zotero +++ b/submodules/zotero @@ -1 +1 @@ -Subproject commit 4fe0ebc63b1d510f24e91921ecbb3979c6d170fa +Subproject commit 704d90cd83ff1831d965185636f5f75eb7c5f24a From adec61874de05bf95cc2fb0420cedebfc0a65041 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Mon, 22 Apr 2024 11:22:25 +0200 Subject: [PATCH 079/177] url error --- translators/bibtex/bibtex.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translators/bibtex/bibtex.ts b/translators/bibtex/bibtex.ts index 632e9d41e8..2b1a042303 100644 --- a/translators/bibtex/bibtex.ts +++ b/translators/bibtex/bibtex.ts @@ -440,7 +440,7 @@ const importJabRef = new class JabRefDefaults { const cache = asset.split('.')[0] if (this.loaded[cache]) continue - const data = Zotero.File.getContentsFromURL(`chrome://zotero-better-bibtex/content/resource//bibtex/${asset}`) + const data = Zotero.File.getContentsFromURL(`chrome://zotero-better-bibtex/content/resource/bibtex/${asset}`) switch (cache) { case 'unabbrev': Object.assign(this[cache], JSON.parse(data)) From 5ae585761f0b696399061b7c80d50766eb358a83 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Mon, 22 Apr 2024 14:59:50 +0200 Subject: [PATCH 080/177] scrubbidy-scrub --- content/ErrorReport.pug | 3 +- content/ErrorReport.ts | 72 ++++++++++++++++++---------------- locale/en-US/better-bibtex.ftl | 4 +- 3 files changed, 44 insertions(+), 35 deletions(-) diff --git a/content/ErrorReport.pug b/content/ErrorReport.pug index a19c1f4269..83887c8b15 100644 --- a/content/ErrorReport.pug +++ b/content/ErrorReport.pug @@ -30,9 +30,10 @@ wizard#better-bibtex-error-report( checkbox#better-bibtex-error-report-include-errors(label='&better-bibtex_error-report_include-errors.label;')/ checkbox#better-bibtex-error-report-include-log(label='&better-bibtex_error-report_include-log.label;')/ hbox - checkbox#better-bibtex-error-report-include-items(label='&better-bibtex_error-report_include-cache.label;')/ + checkbox#better-bibtex-error-report-include-items(label='&better-bibtex_error-report_include-items.label;')/ checkbox#better-bibtex-error-report-include-notes(label='&better-bibtex_error-report_include-notes.label;')/ checkbox#better-bibtex-error-report-include-attachments(label='&better-bibtex_error-report_include-attachments.label;')/ + checkbox#better-bibtex-error-report-include-cache(label='&better-bibtex_error-report_include-cache.label;')/ hbox(flex='1') tabbox.debug-on(flex='10') tabs diff --git a/content/ErrorReport.ts b/content/ErrorReport.ts index 3758989a86..406267e44a 100644 --- a/content/ErrorReport.ts +++ b/content/ErrorReport.ts @@ -43,6 +43,14 @@ type Wizard = HTMLElement & { rewind: () => void } +type Report = { + context: string + errors: string + log: string + items?: string + acronyms?: string +} + export class ErrorReport { private previewSize = 3 private document: Document @@ -54,27 +62,9 @@ export class ErrorReport { private bucket: string private cacheState: string - private input: { - context: string - errors: string - log: string - items?: string - acronyms?: string - } - private report: { - context: string - errors: string - log: string - items?: string - acronyms?: string - } - private config: { - errors: boolean - log: boolean - items: boolean - notes: boolean - attachments: boolean - } + private input: Report + private report: Report + private config: Record public async send(): Promise { const wizard: Wizard = this.document.getElementById('better-bibtex-error-report') as Wizard @@ -157,8 +147,8 @@ export class ErrorReport { out = tape.append(`${this.key}/debug.txt`, this.report.log) - if (this.report.items) { - out = tape.append(`${this.key}/items.json`, this.report.items) + if (this.report.items) out = tape.append(`${this.key}/items.json`, this.report.items) + if (this.config.cache) { out = tape.append(`${this.key}/database.json`, JSON.stringify(KeyManager.all())) out = tape.append(`${this.key}/cache.json`, Cache.serialize({ serializationMethod: 'pretty' })) } @@ -188,7 +178,7 @@ export class ErrorReport { } private scrub(logging: string[]): string { - const ignore = [ + const ignore = new RegExp([ /NS_NOINTERFACE.*ComponentUtils[.]jsm/, /Addon must include an id, version, and type/, /NS_ERROR_NOT_AVAILABLE.*PartitioningExceptionListService[.]jsm/, @@ -197,8 +187,10 @@ export class ErrorReport { /You have reached your Zotero File Storage quota/, /See your zotero.org account settings for additional storage options/, /Could not get children of.*CrashManager.jsm/, - ] - return logging.filter(line => !ignore.find(re => line.match(re))).join('\n') + /PAC file installed from/, + ].map(re => re.source).join('|')) + const homeDir = $OS.Constants.Path.homeDir + return logging.filter(line => !line.match(ignore)).map(line => line.replace(homeDir, '$HOME')).join('\n') } private errors(): string { @@ -242,15 +234,29 @@ export class ErrorReport { private reload() { const init = typeof this.config === 'undefined' this.config = { - errors: false, - log: false, - items: false, - notes: false, - attachments: false, + context: true, + acronyms: true, + errors: true, + log: true, + items: true, + notes: true, + attachments: true, + cache: true, } - for (const facet of ['errors', 'log', 'items', 'attachments', 'notes']) { // atts & notes after items + for (const facet of ['errors', 'log', 'items', 'cache', 'attachments', 'notes']) { // atts & notes after items const cb = this.document.getElementById(`better-bibtex-error-report-include-${facet}`) - if (init) cb.checked = true + if (init) { + if (facet.match(/items|notes|attachments/)) { + cb.disabled = !this.input.items + this.config[facet] = !!this.input.items + } + if (facet === 'errors') { + log.debug('error report errors:', { errors: this.input.errors }) + cb.disabled = !this.input.errors + this.config[facet] = !!this.input.errors + } + cb.checked = this.config[facet] + } this.config[facet] = cb.checked if (facet === 'notes' || facet === 'attachments') cb.disabled = !this.config.items } diff --git a/locale/en-US/better-bibtex.ftl b/locale/en-US/better-bibtex.ftl index c60f2cfbee..e84f7de7fe 100644 --- a/locale/en-US/better-bibtex.ftl +++ b/locale/en-US/better-bibtex.ftl @@ -34,10 +34,12 @@ better-bibtex_error-report_include-errors = .label = Include error messages better-bibtex_error-report_include-log = .label = Include debug log -better-bibtex_error-report_include-cache = +better-bibtex_error-report_include-items = .label = Include items better-bibtex_error-report_include-notes = .label = notes +better-bibtex_error-report_include-cache = + .label = cache better-bibtex_error-report_include-attachments = .label = attachment metadata From ce942fce3812f9b92649ee7238ab1a420ef28ce7 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Mon, 22 Apr 2024 16:31:26 +0200 Subject: [PATCH 081/177] debug log wizard cleanup --- content/ErrorReport.pug | 12 ++++----- content/ErrorReport.ts | 49 ++++++++++++++++++++-------------- locale/en-US/better-bibtex.ftl | 5 ++-- 3 files changed, 38 insertions(+), 28 deletions(-) diff --git a/content/ErrorReport.pug b/content/ErrorReport.pug index 83887c8b15..8fc883726f 100644 --- a/content/ErrorReport.pug +++ b/content/ErrorReport.pug @@ -16,7 +16,7 @@ wizard#better-bibtex-error-report( xmlns='http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul' xmlns:html="http://www.w3.org/1999/xhtml" - title='&better-bibtex_error-report.title;' width='550' height='550' + title='&better-bibtex_error-report.title;' width='700' height='700' ) wizardpage(pageid='page-enable-debug' label=' ') description.header(style='white-space: pre-wrap;') &better-bibtex_error-report_enable-debug; @@ -41,14 +41,14 @@ wizard#better-bibtex-error-report( tab#better-bibtex-error-errors-tab(label='&better-bibtex_error-report_errors.label;')/ tab#better-bibtex-error-log-tab(label='&better-bibtex_error-report_debug.label;')/ tab#better-bibtex-error-items-tab(label='&better-bibtex_error-report_items.label;')/ - tabpanels - tabpanel(orient='vertical') + tabpanels(flex='1') + tabpanel(flex='1' orient='vertical') textbox#better-bibtex-error-context.plain(readonly='true' multiline='true' flex='10' style='min-height: 8em;') - tabpanel(orient='vertical') + tabpanel(flex='1' orient='vertical') textbox#better-bibtex-error-errors.plain(readonly='true' multiline='true' flex='10' style='min-height: 8em;') - tabpanel(orient='vertical') + tabpanel(flex='1' orient='vertical') textbox#better-bibtex-error-log.plain(readonly='true' multiline='true' flex='10' style='min-height: 8em;') - tabpanel(orient='vertical') + tabpanel(flex='1' orient='vertical') textbox#better-bibtex-error-items.plain(readonly='true' multiline='true' flex='10' style='min-height: 8em;') hbox button(label='&better-bibtex_error-report_save.label;' oncommand='window.ErrorReport.save()')/ diff --git a/content/ErrorReport.ts b/content/ErrorReport.ts index 406267e44a..65e5da5117 100644 --- a/content/ErrorReport.ts +++ b/content/ErrorReport.ts @@ -56,8 +56,12 @@ export class ErrorReport { private document: Document private key: string + private region: { + region: string + short: string + tld: string + } private timestamp: string - private tarball: string private bucket: string private cacheState: string @@ -76,7 +80,7 @@ export class ErrorReport { const version = require('../gen/version.js') try { - await Zotero.HTTP.request('PUT', `${this.bucket}/${$OS.Path.basename(this.tarball)}`, { + await Zotero.HTTP.request('PUT', `${this.bucket}/${$OS.Path.basename(this.tarball())}`, { noCache: true, // followRedirects: true, // noCache: true, @@ -92,12 +96,12 @@ export class ErrorReport { wizard.advance(); // eslint-disable-next-line no-magic-numbers - (this.document.getElementById('better-bibtex-report-id')).value = `${this.key}/${version}-${is7 ? 7 : 6}${Zotero.BetterBibTeX.outOfMemory ? '/oom' : ''}` + (this.document.getElementById('better-bibtex-report-id')).value = `${this.name()}/${version}-${is7 ? 7 : 6}${Zotero.BetterBibTeX.outOfMemory ? '/oom' : ''}` this.document.getElementById('better-bibtex-report-result').hidden = false } catch (err) { - log.error('failed to submit', this.key, err) - alert({ text: `${err} (${this.key}, items: ${!!this.report.items})`, title: Zotero.getString('general.error') }) + log.error('failed to submit', this.name(), err) + alert({ text: `${err} (${this.name()}, items: ${!!this.report.items})`, title: Zotero.getString('general.error') }) if (wizard.rewind) wizard.rewind() } } @@ -145,20 +149,20 @@ export class ErrorReport { const tape = new Tar let out: Uint8Array - out = tape.append(`${this.key}/debug.txt`, this.report.log) + out = tape.append(`${this.name()}/debug.txt`, this.report.log) - if (this.report.items) out = tape.append(`${this.key}/items.json`, this.report.items) + if (this.report.items) out = tape.append(`${this.name()}/items.json`, this.report.items) if (this.config.cache) { - out = tape.append(`${this.key}/database.json`, JSON.stringify(KeyManager.all())) - out = tape.append(`${this.key}/cache.json`, Cache.serialize({ serializationMethod: 'pretty' })) + out = tape.append(`${this.name()}/database.json`, JSON.stringify(KeyManager.all())) + out = tape.append(`${this.name()}/cache.json`, Cache.serialize({ serializationMethod: 'pretty' })) } - if (this.report.acronyms) out = tape.append(`${this.key}/acronyms.csv`, this.report.acronyms) + if (this.report.acronyms) out = tape.append(`${this.name()}/acronyms.csv`, this.report.acronyms) return gzip(out) } public async save(): Promise { - const filename = await pick('Logs', 'save', [['Tape Archive (*.tgz)', '*.tgz']], `${this.key}.tgz`) + const filename = await pick('Logs', 'save', [['Tape Archive (*.tgz)', '*.tgz']], `${this.name()}.tgz`) if (filename) await $OS.File.writeAtomic(filename, this.tar(), { tmpPath: filename + '.tmp' }) } @@ -239,16 +243,16 @@ export class ErrorReport { errors: true, log: true, items: true, - notes: true, - attachments: true, - cache: true, + notes: false, + attachments: false, + cache: false, } for (const facet of ['errors', 'log', 'items', 'cache', 'attachments', 'notes']) { // atts & notes after items const cb = this.document.getElementById(`better-bibtex-error-report-include-${facet}`) if (init) { if (facet.match(/items|notes|attachments/)) { cb.disabled = !this.input.items - this.config[facet] = !!this.input.items + this.config[facet] = this.config[facet] && !!this.input.items } if (facet === 'errors') { log.debug('error report errors:', { errors: this.input.errors }) @@ -347,11 +351,9 @@ export class ErrorReport { (this.document.getElementById('better-bibtex-report-oom')).hidden = !Zotero.BetterBibTeX.outOfMemory - const region = await Zotero.Promise.any(Object.keys(s3.region).map(this.ping.bind(this))) - this.bucket = `https://${s3.bucket}-${region.short}.s3-${region.region}.amazonaws.com${region.tld || ''}` - this.key = `${Zotero.Utilities.generateObjectKey()}${this.report.items ? '-refs' : ''}-${region.short}` // eslint-disable-line no-magic-numbers - - this.tarball = `${this.key}-${this.timestamp}.tgz` + this.region = await Zotero.Promise.any(Object.keys(s3.region).map(this.ping.bind(this))) + this.bucket = `https://${s3.bucket}-${this.region.short}.s3-${this.region.region}.amazonaws.com${this.region.tld || ''}` + this.key = Zotero.Utilities.generateObjectKey() continueButton.disabled = false continueButton.focus() @@ -363,6 +365,13 @@ export class ErrorReport { } } + private name() { + return `${this.key}${this.report.items ? '-refs' : ''}-${this.region.short}` + } + private tarball() { + return `${this.name()}-${this.timestamp}.tgz` + } + private preview(input: any): string { const previewSize = this.previewSize * kB if (typeof input === 'string') return input.length > previewSize ? `${input.substr(0, previewSize)} ...` : input diff --git a/locale/en-US/better-bibtex.ftl b/locale/en-US/better-bibtex.ftl index e84f7de7fe..947bbee30e 100644 --- a/locale/en-US/better-bibtex.ftl +++ b/locale/en-US/better-bibtex.ftl @@ -54,12 +54,13 @@ better-bibtex_error-report_restart-with-logging-enabled = .label = Restart with Logging Enabled… -better-bibtex_error-report_review = The data below is about to submitted to Better BibTeX for debugging. You can preview the data here, or save a copy of the log to get the precise data about to be sent, to see whether there's sensitive information that you do not wish to send. +better-bibtex_error-report_review = The data below is about to submitted to Better BibTeX for debugging. You can preview the data here, or save a copy of the log to get the precise data about to be sent, to see whether there's sensitive information that you do not wish to send. Please think carefully about whether unchecking options below is necessary for your environment. We will generally needs more communication (= time) if you remove parts of the log this way. - If you are OK with sending this data, please proceed to the next screen and post the debug ID presented in the next screen in the issue tracker at + If you are OK with sending this data, please proceed to the next screen where you will be presented a red debug ID, and post this ID on the issue tracker at https://github.com/retorquere/zotero-better-bibtex/issue + better-bibtex_error-report_save = .label = Save copy of log for inspection From 5699a45d3d009c382803b1b13c3d993017a2b655 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Mon, 22 Apr 2024 19:01:51 +0200 Subject: [PATCH 082/177] wire up checkboxes --- content/ErrorReport.pug | 12 ++++++------ content/ErrorReport.ts | 11 +++++++---- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/content/ErrorReport.pug b/content/ErrorReport.pug index 8fc883726f..e5e4ed861c 100644 --- a/content/ErrorReport.pug +++ b/content/ErrorReport.pug @@ -27,13 +27,13 @@ wizard#better-bibtex-error-report( textbox#better-bibtex-report-latest.plain.textbox-emph(flex='1' readonly='true') textbox#better-bibtex-report-oom.plain.textbox-emph(hidden='true' flex='1' multiline='true' readonly='true' value='&better-bibtex_error-report_better-bibtex_oom.value;') textbox#better-bibtex-report-cache.plain(flex='1' readonly='true') - checkbox#better-bibtex-error-report-include-errors(label='&better-bibtex_error-report_include-errors.label;')/ - checkbox#better-bibtex-error-report-include-log(label='&better-bibtex_error-report_include-log.label;')/ + checkbox.better-bibtex-error-report-facet#better-bibtex-error-report-include-errors(label='&better-bibtex_error-report_include-errors.label;')/ + checkbox.better-bibtex-error-report-facet#better-bibtex-error-report-include-log(label='&better-bibtex_error-report_include-log.label;')/ hbox - checkbox#better-bibtex-error-report-include-items(label='&better-bibtex_error-report_include-items.label;')/ - checkbox#better-bibtex-error-report-include-notes(label='&better-bibtex_error-report_include-notes.label;')/ - checkbox#better-bibtex-error-report-include-attachments(label='&better-bibtex_error-report_include-attachments.label;')/ - checkbox#better-bibtex-error-report-include-cache(label='&better-bibtex_error-report_include-cache.label;')/ + checkbox.better-bibtex-error-report-facet#better-bibtex-error-report-include-items(label='&better-bibtex_error-report_include-items.label;')/ + checkbox.better-bibtex-error-report-facet#better-bibtex-error-report-include-notes(label='&better-bibtex_error-report_include-notes.label;')/ + checkbox.better-bibtex-error-report-facet#better-bibtex-error-report-include-attachments(label='&better-bibtex_error-report_include-attachments.label;')/ + checkbox.better-bibtex-error-report-facet#better-bibtex-error-report-include-cache(label='&better-bibtex_error-report_include-cache.label;')/ hbox(flex='1') tabbox.debug-on(flex='10') tabs diff --git a/content/ErrorReport.ts b/content/ErrorReport.ts index 65e5da5117..949ab3c4a2 100644 --- a/content/ErrorReport.ts +++ b/content/ErrorReport.ts @@ -247,8 +247,9 @@ export class ErrorReport { attachments: false, cache: false, } - for (const facet of ['errors', 'log', 'items', 'cache', 'attachments', 'notes']) { // atts & notes after items - const cb = this.document.getElementById(`better-bibtex-error-report-include-${facet}`) + for (const cb of Array.from(this.document.getElementsByClassName('better-bibtex-error-report-facet')) as HTMLInputElement[]) { + const facet = cb.id.replace(/.*-/, '') + if (init) { if (facet.match(/items|notes|attachments/)) { cb.disabled = !this.input.items @@ -261,6 +262,7 @@ export class ErrorReport { } cb.checked = this.config[facet] } + this.config[facet] = cb.checked if (facet === 'notes' || facet === 'attachments') cb.disabled = !this.config.items } @@ -313,8 +315,9 @@ export class ErrorReport { wizard.getPageById('page-review').addEventListener('pageshow', this.show.bind(this)) wizard.getPageById('page-send').addEventListener('pageshow', () => { this.send().catch(err => log.debug('could not send debug log:', err)) }) wizard.getPageById('page-done').addEventListener('pageshow', this.show.bind(this)) - for (const facet of ['errors', 'log', 'items', 'notes', 'attachments']) { - (this.document.getElementById(`better-bibtex-error-report-include-${facet}`)).addEventListener('command', this.reload.bind(this)) + + for (const cb of Array.from(this.document.getElementsByClassName('better-bibtex-error-report-facet')) as HTMLInputElement[]) { + cb.addEventListener('command', this.reload.bind(this)) } wizard.pageIndex = Zotero.Debug.storing ? 1 : 0 From 489b361eb2ea999f3752a2268710eb1c9ec43c6a Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Tue, 23 Apr 2024 14:22:31 +0200 Subject: [PATCH 083/177] cleanup --- content/ErrorReport.pug | 2 +- content/ErrorReport.ts | 4 ++-- locale/en-US/better-bibtex.ftl | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/content/ErrorReport.pug b/content/ErrorReport.pug index e5e4ed861c..c0048360eb 100644 --- a/content/ErrorReport.pug +++ b/content/ErrorReport.pug @@ -30,7 +30,7 @@ wizard#better-bibtex-error-report( checkbox.better-bibtex-error-report-facet#better-bibtex-error-report-include-errors(label='&better-bibtex_error-report_include-errors.label;')/ checkbox.better-bibtex-error-report-facet#better-bibtex-error-report-include-log(label='&better-bibtex_error-report_include-log.label;')/ hbox - checkbox.better-bibtex-error-report-facet#better-bibtex-error-report-include-items(label='&better-bibtex_error-report_include-items.label;')/ + label &better-bibtex_error-report_include-items.label; checkbox.better-bibtex-error-report-facet#better-bibtex-error-report-include-notes(label='&better-bibtex_error-report_include-notes.label;')/ checkbox.better-bibtex-error-report-facet#better-bibtex-error-report-include-attachments(label='&better-bibtex_error-report_include-attachments.label;')/ checkbox.better-bibtex-error-report-facet#better-bibtex-error-report-include-cache(label='&better-bibtex_error-report_include-cache.label;')/ diff --git a/content/ErrorReport.ts b/content/ErrorReport.ts index 949ab3c4a2..4a448051f9 100644 --- a/content/ErrorReport.ts +++ b/content/ErrorReport.ts @@ -251,8 +251,8 @@ export class ErrorReport { const facet = cb.id.replace(/.*-/, '') if (init) { - if (facet.match(/items|notes|attachments/)) { - cb.disabled = !this.input.items + if (facet.match(/notes|attachments/)) { + cb.hidden = !this.input.items this.config[facet] = this.config[facet] && !!this.input.items } if (facet === 'errors') { diff --git a/locale/en-US/better-bibtex.ftl b/locale/en-US/better-bibtex.ftl index 947bbee30e..10304a5ee8 100644 --- a/locale/en-US/better-bibtex.ftl +++ b/locale/en-US/better-bibtex.ftl @@ -35,7 +35,7 @@ better-bibtex_error-report_include-errors = better-bibtex_error-report_include-log = .label = Include debug log better-bibtex_error-report_include-items = - .label = Include items + .label = Include item better-bibtex_error-report_include-notes = .label = notes better-bibtex_error-report_include-cache = From 83a5d6ed6f6f85e347b4332b2da5218ab8bcd355 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Tue, 23 Apr 2024 21:35:51 +0200 Subject: [PATCH 084/177] big icons --- content/Preferences/autoexport.pug | 2 +- content/Preferences/export/bibtex.pug | 2 +- content/Preferences/export/fields.pug | 4 ++-- content/Preferences/export/misc.pug | 6 +++--- content/Preferences/import.pug | 4 ++-- setup/preferences.ts | 2 +- site/themes/relearn | 2 +- submodules/zotero | 2 +- 8 files changed, 12 insertions(+), 12 deletions(-) diff --git a/content/Preferences/autoexport.pug b/content/Preferences/autoexport.pug index 2b0ceaed9c..f7021f618e 100644 --- a/content/Preferences/autoexport.pug +++ b/content/Preferences/autoexport.pug @@ -43,7 +43,7 @@ html:div#bbt-prefs-auto-exports(class='bbt-prefs-2col') menuitem(value='note-url-ish' label='&better-bibtex_preferences_export_bibtex_urls_note-url-ish.label;') menuitem(value='url' label='&better-bibtex_preferences_export_bibtex_urls_url.label;') menuitem(value='url-ish' label='&better-bibtex_preferences_export_bibtex_urls_url-ish.label;') - image(tooltip='bbt-tooltip-bibtexURL' src='chrome://zotero-better-bibtex/content/skin/attention.svg' width='16' height='16') + image(tooltip='bbt-tooltip-bibtexURL' src='chrome://zotero-better-bibtex/content/skin/attention.svg' width='16px' height='16px') // biblatex checkbox.bbt-autoexport-options.bbt-autoexport-BetterBibLaTeX( diff --git a/content/Preferences/export/bibtex.pug b/content/Preferences/export/bibtex.pug index 282bdf5b81..04d72beeae 100644 --- a/content/Preferences/export/bibtex.pug +++ b/content/Preferences/export/bibtex.pug @@ -3,7 +3,7 @@ checkbox(preference="extensions.zotero.translators.better-bibtex.bibtexParticleN checkbox(preference="extensions.zotero.translators.better-bibtex.bibtexEditionOrdinal" label="&better-bibtex_preferences_export_fields_bibtex-edition-ordinal.label;") html:div label(bbt:preference="extensions.zotero.translators.better-bibtex.bibtexURL") &better-bibtex_preferences_export_bibtex_urls; - image(tooltip="bbt-tooltip-bibtexURL" src="chrome://zotero-better-bibtex/content/skin/attention.svg" width="16" height="16") + image(tooltip="bbt-tooltip-bibtexURL" src="chrome://zotero-better-bibtex/content/skin/attention.svg" width='16px' height='16px') menulist(preference="extensions.zotero.translators.better-bibtex.bibtexURL") menupopup menuitem(value='off' label='&better-bibtex_preferences_export_bibtex_urls_off.label;') diff --git a/content/Preferences/export/fields.pug b/content/Preferences/export/fields.pug index 6a1824fef0..aac85e675b 100644 --- a/content/Preferences/export/fields.pug +++ b/content/Preferences/export/fields.pug @@ -12,7 +12,7 @@ html:div menuitem(value='both' label='&better-bibtex_preferences_export_fields_doi-and-url_both.label;') menuitem(value='doi' label='&better-bibtex_preferences_export_fields_doi-and-url_doi.label;') menuitem(value='url' label='&better-bibtex_preferences_export_fields_doi-and-url_url.label;') - image(tooltip="bbt-tooltip-DOIandURL" src="chrome://zotero-better-bibtex/content/skin/attention.svg" width="16" height="16") + image(tooltip="bbt-tooltip-DOIandURL" src="chrome://zotero-better-bibtex/content/skin/attention.svg" width='16px' height='16px') html:div label(bbt:preference="extensions.zotero.translators.better-bibtex.skipFields") &better-bibtex_preferences_export_fields_skip; textbox(size='30' preference='extensions.zotero.translators.better-bibtex.skipFields') @@ -24,4 +24,4 @@ html:div menuitem(value='3' label='&better-bibtex_preferences_export_jabref-format_3.label;') menuitem(value='4' label='&better-bibtex_preferences_export_jabref-format_4.label;') menuitem(value='5' label='&better-bibtex_preferences_export_jabref-format_5.label;') - image(tooltip="bbt-tooltip-jabrefFormat" src="chrome://zotero-better-bibtex/content/skin/attention.svg" width="16" height="16") + image(tooltip="bbt-tooltip-jabrefFormat" src="chrome://zotero-better-bibtex/content/skin/attention.svg" width='16px' height='16px') diff --git a/content/Preferences/export/misc.pug b/content/Preferences/export/misc.pug index 9e65d706e9..58b3826a36 100644 --- a/content/Preferences/export/misc.pug +++ b/content/Preferences/export/misc.pug @@ -12,16 +12,16 @@ checkbox(label="&better-bibtex_preferences_export_automatic-tags.label;" prefere html:div checkbox(preference="extensions.zotero.translators.better-bibtex.exportTitleCase" label="&better-bibtex_preferences_advanced_export_title-case.label;") - image(tooltip="bbt-tooltip-exportTitleCase" src="chrome://zotero-better-bibtex/content/skin/attention.svg" width="16" height="16") + image(tooltip="bbt-tooltip-exportTitleCase" src="chrome://zotero-better-bibtex/content/skin/attention.svg" width='16px' height='16px') html:div checkbox(preference="extensions.zotero.translators.better-bibtex.exportBraceProtection" label="&better-bibtex_preferences_advanced_export_brace-protection.label;") - image(tooltip="bbt-tooltip-exportBraceProtection" src="chrome://zotero-better-bibtex/content/skin/attention.svg" width="16" height="16") + image(tooltip="bbt-tooltip-exportBraceProtection" src="chrome://zotero-better-bibtex/content/skin/attention.svg" width='16px' height='16px') groupbox caption Cache html:div checkbox(preference="extensions.zotero.translators.better-bibtex.retainCache" label="&better-bibtex_preferences_advanced_export_retain-cache.label;") - image(tooltip="bbt-tooltip-retainCache" src="chrome://zotero-better-bibtex/content/skin/attention.svg" width="16" height="16") + image(tooltip="bbt-tooltip-retainCache" src="chrome://zotero-better-bibtex/content/skin/attention.svg" width='16px' height='16px') checkbox(preference="extensions.zotero.translators.better-bibtex.cache" label="&better-bibtex_preferences_advanced_export_workers_cache.label;") button(label="&better-bibtex_preferences_reset-cache.label;" oncommand="Zotero.BetterBibTeX.PrefPane.cacheReset()") diff --git a/content/Preferences/import.pug b/content/Preferences/import.pug index 829c85f472..9c1fb68778 100644 --- a/content/Preferences/import.pug +++ b/content/Preferences/import.pug @@ -5,13 +5,13 @@ hbox(flex=0) menuitem(value='as-needed' label='&better-bibtex_preferences_advanced_import_case-protection_as-needed.label;') menuitem(value='on' label='&better-bibtex_preferences_advanced_import_case-protection_on.label;') menuitem(value='off' label='&better-bibtex_preferences_advanced_import_case-protection_off.label;') - image(tooltip="bbt-tooltip-importCaseProtection" src="chrome://zotero-better-bibtex/content/skin/attention.svg" width="16" height="16") + image(tooltip="bbt-tooltip-importCaseProtection" src="chrome://zotero-better-bibtex/content/skin/attention.svg" width='16px' height='16px') checkbox(preference="extensions.zotero.translators.better-bibtex.auxImport" label="&better-bibtex_preferences_citekey_aux-scanner_import.label;") hbox(flex=0) groupbox caption(bbt:preference="extensions.zotero.translators.better-bibtex.importSentenceCase") &better-bibtex_preferences_advanced_import_sentence-case; - image(tooltip="bbt-tooltip-importSentenceCase" src="chrome://zotero-better-bibtex/content/skin/attention.svg" width="16" height="16") + image(tooltip="bbt-tooltip-importSentenceCase" src="chrome://zotero-better-bibtex/content/skin/attention.svg" width='16px' height='16px') radiogroup(preference="extensions.zotero.translators.better-bibtex.importSentenceCase") radio(label="&better-bibtex_preferences_advanced_import_sentence-case_on-guess.label;" value="on+guess") radio(label="&better-bibtex_preferences_advanced_import_sentence-case_on.label;" value="on") diff --git a/setup/preferences.ts b/setup/preferences.ts index 65f69bbc42..5a135a2ac2 100755 --- a/setup/preferences.ts +++ b/setup/preferences.ts @@ -681,7 +681,7 @@ class XHTML extends BaseASTWalker { let style: string switch (node.name) { case'image': - style = node.attrs.filter(a => a.name === 'height' || a.name === 'width').map(a => `${a.name}:${a.val}`).join(';') + style = node.attrs.filter(a => a.name === 'height' || a.name === 'width').map(a => `${a.name}:${eval(a.val)}`).join(';') if (style) node.attrs.push({ name: 'style', val: JSON.stringify(style), mustEscape: false }) break diff --git a/site/themes/relearn b/site/themes/relearn index 87812d1e29..e326a8e85f 160000 --- a/site/themes/relearn +++ b/site/themes/relearn @@ -1 +1 @@ -Subproject commit 87812d1e296261fcbff707eb7c364b89949499b2 +Subproject commit e326a8e85fd99919539443fb5018f32c791ff541 diff --git a/submodules/zotero b/submodules/zotero index 704d90cd83..0077c3f07a 160000 --- a/submodules/zotero +++ b/submodules/zotero @@ -1 +1 @@ -Subproject commit 704d90cd83ff1831d965185636f5f75eb7c5f24a +Subproject commit 0077c3f07a2f0fa1fb0e2568f25aa8b598b9074a From 9ed590f4b7966c71f67425be546b0164b9d013de Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Tue, 23 Apr 2024 21:46:23 +0200 Subject: [PATCH 085/177] upgrades --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index a2dee85af7..fe2070405e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -48,7 +48,7 @@ "pinyin": "^3.1.0", "punycode2": "^1.0.1", "puqeue": "^1.1.4", - "remeda": "^1.60.1", + "remeda": "^1.61.0", "sprintf-js": "^1.1.3", "string.prototype.matchall": "^4.0.11", "tar-js": "^0.3.0", @@ -16260,9 +16260,9 @@ } }, "node_modules/remeda": { - "version": "1.60.1", - "resolved": "https://registry.npmjs.org/remeda/-/remeda-1.60.1.tgz", - "integrity": "sha512-g2h+NJbYJlaVKjT8ipLLYAhoNcZaES9UPnPSwY3uRO52KDl77y9AQucgdyiBt+bTCB80MJ1Hdr0N9rdxOFEZ4g==" + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/remeda/-/remeda-1.61.0.tgz", + "integrity": "sha512-caKfSz9rDeSKBQQnlJnVW3mbVdFgxgGWQKq1XlFokqjf+hQD5gxutLGTTY2A/x24UxVyJe9gH5fAkFI63ULw4A==" }, "node_modules/remove-blank-lines": { "version": "1.4.1", diff --git a/package.json b/package.json index ac7607e59d..345a63e903 100644 --- a/package.json +++ b/package.json @@ -102,7 +102,7 @@ "pinyin": "^3.1.0", "punycode2": "^1.0.1", "puqeue": "^1.1.4", - "remeda": "^1.60.1", + "remeda": "^1.61.0", "sprintf-js": "^1.1.3", "string.prototype.matchall": "^4.0.11", "tar-js": "^0.3.0", From c8347be9bef0904ed0171ea7fac614519cbe66bd Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Tue, 23 Apr 2024 21:46:35 +0200 Subject: [PATCH 086/177] 6.7.175 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index fe2070405e..97bdbccb57 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "zotero-better-bibtex", - "version": "6.7.174", + "version": "6.7.175", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "zotero-better-bibtex", - "version": "6.7.174", + "version": "6.7.175", "license": "ISC", "dependencies": { "@artsy/to-title-case": "^1.1.0", diff --git a/package.json b/package.json index 345a63e903..29f1ed82ac 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "zotero-better-bibtex", - "version": "6.7.174", + "version": "6.7.175", "description": "Make Zotero useful for us LaTeX holdouts.", "homepage": "https://retorque.re/zotero-better-bibtex", "license": "ISC", From 3f5a9f590721395e4ac6329e7e0d27aa0d345c17 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Tue, 23 Apr 2024 21:53:09 +0200 Subject: [PATCH 087/177] New Crowdin updates (#2846) * New translations better-bibtex.ftl (French) * New translations better-bibtex.ftl (German) * New translations better-bibtex.ftl (Italian) * New translations better-bibtex.ftl (Chinese Simplified) * New translations better-bibtex.ftl (Portuguese, Brazilian) --- locale/de-DE/better-bibtex.ftl | 15 ++++++++++----- locale/fr-FR/better-bibtex.ftl | 15 ++++++++++----- locale/it-IT/better-bibtex.ftl | 15 ++++++++++----- locale/pt-BR/better-bibtex.ftl | 15 ++++++++++----- locale/zh-CN/better-bibtex.ftl | 15 ++++++++++----- 5 files changed, 50 insertions(+), 25 deletions(-) diff --git a/locale/de-DE/better-bibtex.ftl b/locale/de-DE/better-bibtex.ftl index a11c98ad05..ca988cfb97 100644 --- a/locale/de-DE/better-bibtex.ftl +++ b/locale/de-DE/better-bibtex.ftl @@ -28,10 +28,12 @@ better-bibtex_error-report_include-errors = .label = Include error messages better-bibtex_error-report_include-log = .label = Include debug log -better-bibtex_error-report_include-cache = - .label = Include items +better-bibtex_error-report_include-items = + .label = Include item better-bibtex_error-report_include-notes = .label = notes +better-bibtex_error-report_include-cache = + .label = cache better-bibtex_error-report_include-attachments = .label = attachment metadata better-bibtex_error-report_items = @@ -42,18 +44,19 @@ better-bibtex_error-report_report-id = Debug-Log-ID: better-bibtex_error-report_restart-with-logging-enabled = .label = Mit aktiviertem Logging neustarten… better-bibtex_error-report_review = - Die unten aufgeführten Daten werden für die Fehlerbehebung an Better BibTeX gesendet. Bitte prüfen Sie sie auf sensible Daten, die sie nicht senden wollen. + The data below is about to submitted to Better BibTeX for debugging. You can preview the data here, or save a copy of the log to get the precise data about to be sent, to see whether there's sensitive information that you do not wish to send. Please think carefully about whether unchecking options below is necessary for your environment. We will generally needs more communication (= time) if you remove parts of the log this way. - Wenn Sie mit dem Senden einverstanden sind, bitte fahren Sie mit der nächsten Anzeige fort und posten Sie die dort erscheinende Debug-ID im Issue-Tracker bei + If you are OK with sending this data, please proceed to the next screen where you will be presented a red debug ID, and post this ID on the issue tracker at https://github.com/retorquere/zotero-better-bibtex/issue better-bibtex_error-report_save = - .label = Kopie des Logs speichern + .label = Save copy of log for inspection better-bibtex_error-report_submission-in-progress = Bitte warten Sie, während der Debug-Log übermittelt wird. better-bibtex_error-report_submitted = Ihr Debug-Log wurde übermittelt. better-bibtex_export-options_keep-updated = Halte aktuell better-bibtex_export-options_reminder = Sind Sie sicher, dass Sie nicht das ''{ $translator }''-Format wollen? better-bibtex_export-options_worker = Hintergrund-Export +better-bibtex_export-options_biblatexAPA = biblatex-apa unused_better-bibtex_first-run = .title = Welcome to Better BibTeX for Zotero .label = Welcome to Better BibTeX for Zotero @@ -162,6 +165,8 @@ better-bibtex_preferences_auto-export_fields_notes = .label = Exportiere Notizen better-bibtex_preferences_auto-export_fields_recursive = .label = Exportiere alle Untersammlungen +better-bibtex_preferences_auto-export_fields_biblatexAPA = + .label = biblatex-apa better-bibtex_preferences_auto-export_git_message = { $type } aktualisiert durch Better BibTex for Zotero better-bibtex_preferences_auto-export_idle = Wenn unbeschäftigt .label = { better-bibtex_preferences_auto-export_idle } diff --git a/locale/fr-FR/better-bibtex.ftl b/locale/fr-FR/better-bibtex.ftl index 083e4c9556..4016c75890 100644 --- a/locale/fr-FR/better-bibtex.ftl +++ b/locale/fr-FR/better-bibtex.ftl @@ -28,10 +28,12 @@ better-bibtex_error-report_include-errors = .label = Inclure les messages d'erreur better-bibtex_error-report_include-log = .label = Inclure le journal de débogage -better-bibtex_error-report_include-cache = - .label = Inclure les items +better-bibtex_error-report_include-items = + .label = Include item better-bibtex_error-report_include-notes = .label = notes +better-bibtex_error-report_include-cache = + .label = cache better-bibtex_error-report_include-attachments = .label = métadonnées de la pièce jointe better-bibtex_error-report_items = @@ -42,18 +44,19 @@ better-bibtex_error-report_report-id = ID du journal de débogage : better-bibtex_error-report_restart-with-logging-enabled = .label = Redémarrer avec le journal activé… better-bibtex_error-report_review = - Les données ci-dessous sont sur le point d'être soumises à Better BibTeX à fins de débogage. Vous pouvez les examiner pour contrôler s'il y a des informations sensibles que vous ne souhaitez pas envoyer. + The data below is about to submitted to Better BibTeX for debugging. You can preview the data here, or save a copy of the log to get the precise data about to be sent, to see whether there's sensitive information that you do not wish to send. Please think carefully about whether unchecking options below is necessary for your environment. We will generally needs more communication (= time) if you remove parts of the log this way. - Si vous êtes d'accord pour envoyer ces données, veuillez passer à l'écran suivant et publier l'ID de débogage qui y figure dans le gestionnaire de problèmes à l'adresse suivante : + If you are OK with sending this data, please proceed to the next screen where you will be presented a red debug ID, and post this ID on the issue tracker at https://github.com/retorquere/zotero-better-bibtex/issue better-bibtex_error-report_save = - .label = Enregistrer la copie du journal + .label = Save copy of log for inspection better-bibtex_error-report_submission-in-progress = Veuillez patienter pendant que le journal de débogage est soumis. better-bibtex_error-report_submitted = Votre journal de débogage a été envoyé. better-bibtex_export-options_keep-updated = Garder à jour better-bibtex_export-options_reminder = Êtes-vous sûr de ne pas vouloir du format ''{ $translator }''? better-bibtex_export-options_worker = Exportation en arrière-plan +better-bibtex_export-options_biblatexAPA = biblatex-apa unused_better-bibtex_first-run = .title = Bienvenue sur Better BibTeX pour Zotero .label = Bienvenue sur Better BibTeX pour Zotero @@ -163,6 +166,8 @@ better-bibtex_preferences_auto-export_fields_notes = .label = Export des notes better-bibtex_preferences_auto-export_fields_recursive = .label = Exporter toutes les collections enfants +better-bibtex_preferences_auto-export_fields_biblatexAPA = + .label = biblatex-apa better-bibtex_preferences_auto-export_git_message = { $type } mis à jour par Better BibTeX pour Zotero better-bibtex_preferences_auto-export_idle = à la mise en veille .label = { better-bibtex_preferences_auto-export_idle } diff --git a/locale/it-IT/better-bibtex.ftl b/locale/it-IT/better-bibtex.ftl index e00cf24a3b..ca1d2e2339 100644 --- a/locale/it-IT/better-bibtex.ftl +++ b/locale/it-IT/better-bibtex.ftl @@ -28,10 +28,12 @@ better-bibtex_error-report_include-errors = .label = Include error messages better-bibtex_error-report_include-log = .label = Include debug log -better-bibtex_error-report_include-cache = - .label = Include items +better-bibtex_error-report_include-items = + .label = Include item better-bibtex_error-report_include-notes = .label = notes +better-bibtex_error-report_include-cache = + .label = cache better-bibtex_error-report_include-attachments = .label = attachment metadata better-bibtex_error-report_items = @@ -42,18 +44,19 @@ better-bibtex_error-report_report-id = ID del log di debug: better-bibtex_error-report_restart-with-logging-enabled = .label = Riavvio con log abilitato… better-bibtex_error-report_review = - I dati di seguito stanno per essere inviati a Better BibTeX per il debug. È possibile controllare i data per vedere se sono presenti informazioni sensibili che non si desidera inviare. + The data below is about to submitted to Better BibTeX for debugging. You can preview the data here, or save a copy of the log to get the precise data about to be sent, to see whether there's sensitive information that you do not wish to send. Please think carefully about whether unchecking options below is necessary for your environment. We will generally needs more communication (= time) if you remove parts of the log this way. - Se si è d'accordo con l'invio di questi dati, si prega di procedere nella schermata successiva dove sarà indicato l'ID di debug da riportare nell'Issue tracker alla pagina + If you are OK with sending this data, please proceed to the next screen where you will be presented a red debug ID, and post this ID on the issue tracker at https://github.com/retorquere/zotero-better-bibtex/issue better-bibtex_error-report_save = - .label = Salva una copia del log + .label = Save copy of log for inspection better-bibtex_error-report_submission-in-progress = Si prega di attendere mentre il log viene inviato. better-bibtex_error-report_submitted = Il log di debug è stato inviato. better-bibtex_export-options_keep-updated = Mantieni aggiornato better-bibtex_export-options_reminder = Si è sicuri di non volere il formato '{ $translator }' ? better-bibtex_export-options_worker = Esportazione in background +better-bibtex_export-options_biblatexAPA = biblatex-apa unused_better-bibtex_first-run = .title = Ti presentiamo Better BibTeX per Zotero .label = Ti presentiamo Better BibTeX per Zotero @@ -162,6 +165,8 @@ better-bibtex_preferences_auto-export_fields_notes = .label = Esporta note better-bibtex_preferences_auto-export_fields_recursive = .label = Esporta tutte le collezioni figlie +better-bibtex_preferences_auto-export_fields_biblatexAPA = + .label = biblatex-apa better-bibtex_preferences_auto-export_git_message = { $type } aggiornato da Better BibTeX for Zotero better-bibtex_preferences_auto-export_idle = Quando inattivo .label = { better-bibtex_preferences_auto-export_idle } diff --git a/locale/pt-BR/better-bibtex.ftl b/locale/pt-BR/better-bibtex.ftl index 3af3b28877..375e19cb6d 100644 --- a/locale/pt-BR/better-bibtex.ftl +++ b/locale/pt-BR/better-bibtex.ftl @@ -28,10 +28,12 @@ better-bibtex_error-report_include-errors = .label = Include error messages better-bibtex_error-report_include-log = .label = Include debug log -better-bibtex_error-report_include-cache = - .label = Include items +better-bibtex_error-report_include-items = + .label = Include item better-bibtex_error-report_include-notes = .label = notes +better-bibtex_error-report_include-cache = + .label = cache better-bibtex_error-report_include-attachments = .label = attachment metadata better-bibtex_error-report_items = @@ -42,18 +44,19 @@ better-bibtex_error-report_report-id = Debug log ID: better-bibtex_error-report_restart-with-logging-enabled = .label = Reiniciar com registro ativado… better-bibtex_error-report_review = - The data below is about to submitted to Better BibTeX for debugging. You can review the data to see whether there's sensitive information that you do not wish to send. + The data below is about to submitted to Better BibTeX for debugging. You can preview the data here, or save a copy of the log to get the precise data about to be sent, to see whether there's sensitive information that you do not wish to send. Please think carefully about whether unchecking options below is necessary for your environment. We will generally needs more communication (= time) if you remove parts of the log this way. - If you are OK with sending this data, please proceed to the next screen and post the debug ID presented in the next screen in the issue tracker at + If you are OK with sending this data, please proceed to the next screen where you will be presented a red debug ID, and post this ID on the issue tracker at https://github.com/retorquere/zotero-better-bibtex/issue better-bibtex_error-report_save = - .label = Save copy of log + .label = Save copy of log for inspection better-bibtex_error-report_submission-in-progress = Please wait while the debug log is submitted. better-bibtex_error-report_submitted = Your debug log has been submitted. better-bibtex_export-options_keep-updated = Manter atualizado better-bibtex_export-options_reminder = Tem certeza que você não quer o formato ''{ $translator }''? better-bibtex_export-options_worker = Background export +better-bibtex_export-options_biblatexAPA = biblatex-apa unused_better-bibtex_first-run = .title = Welcome to Better BibTeX for Zotero .label = Welcome to Better BibTeX for Zotero @@ -162,6 +165,8 @@ better-bibtex_preferences_auto-export_fields_notes = .label = Exportar notas better-bibtex_preferences_auto-export_fields_recursive = .label = Export all child collections +better-bibtex_preferences_auto-export_fields_biblatexAPA = + .label = biblatex-apa better-bibtex_preferences_auto-export_git_message = { $type } atualizado por Better BibTeX for Zotero better-bibtex_preferences_auto-export_idle = Quando ocioso .label = { better-bibtex_preferences_auto-export_idle } diff --git a/locale/zh-CN/better-bibtex.ftl b/locale/zh-CN/better-bibtex.ftl index ac1045dcbf..f509203c6b 100644 --- a/locale/zh-CN/better-bibtex.ftl +++ b/locale/zh-CN/better-bibtex.ftl @@ -28,10 +28,12 @@ better-bibtex_error-report_include-errors = .label = 包括错误信息 better-bibtex_error-report_include-log = .label = 包括调试日志 -better-bibtex_error-report_include-cache = - .label = 包括条目 +better-bibtex_error-report_include-items = + .label = Include item better-bibtex_error-report_include-notes = .label = 备注 +better-bibtex_error-report_include-cache = + .label = cache better-bibtex_error-report_include-attachments = .label = 附件元数据 better-bibtex_error-report_items = @@ -42,18 +44,19 @@ better-bibtex_error-report_report-id = 调试日志 ID: better-bibtex_error-report_restart-with-logging-enabled = .label = 启用日志记录并重启… better-bibtex_error-report_review = - 下列数据将被提交至 Better BibTeX 以供调试。您可以检查其中是否有您不希望发送的敏感信息。 + The data below is about to submitted to Better BibTeX for debugging. You can preview the data here, or save a copy of the log to get the precise data about to be sent, to see whether there's sensitive information that you do not wish to send. Please think carefully about whether unchecking options below is necessary for your environment. We will generally needs more communication (= time) if you remove parts of the log this way. - 若您同意发送下列数据,请进行下一步,并将下一步中显示的调试日志 ID 提交至 GitHub Issues,网址为 + If you are OK with sending this data, please proceed to the next screen where you will be presented a red debug ID, and post this ID on the issue tracker at https://github.com/retorquere/zotero-better-bibtex/issue better-bibtex_error-report_save = - .label = 保存日志副本 + .label = Save copy of log for inspection better-bibtex_error-report_submission-in-progress = 正在提交调试日志,请稍候。 better-bibtex_error-report_submitted = 您的调试日志已被提交。 better-bibtex_export-options_keep-updated = 保持更新 better-bibtex_export-options_reminder = 您确定不使用“{ $translator }”吗? better-bibtex_export-options_worker = 后台导出 +better-bibtex_export-options_biblatexAPA = biblatex-apa unused_better-bibtex_first-run = .title = 欢迎使用 Better BibTeX for Zotero .label = 欢迎使用 Better BibTeX for Zotero @@ -163,6 +166,8 @@ better-bibtex_preferences_auto-export_fields_notes = .label = 导出笔记 better-bibtex_preferences_auto-export_fields_recursive = .label = 导出所有子分类 +better-bibtex_preferences_auto-export_fields_biblatexAPA = + .label = biblatex-apa better-bibtex_preferences_auto-export_git_message = { $type } updated by Better BibTeX for Zotero better-bibtex_preferences_auto-export_idle = 空闲时 .label = { better-bibtex_preferences_auto-export_idle } From c3e1e548e2c370210fc7d4f623ba1a051f257472 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Tue, 23 Apr 2024 21:53:26 +0200 Subject: [PATCH 088/177] 6.7.176 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 97bdbccb57..879e154ed5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "zotero-better-bibtex", - "version": "6.7.175", + "version": "6.7.176", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "zotero-better-bibtex", - "version": "6.7.175", + "version": "6.7.176", "license": "ISC", "dependencies": { "@artsy/to-title-case": "^1.1.0", diff --git a/package.json b/package.json index 29f1ed82ac..5325c892f7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "zotero-better-bibtex", - "version": "6.7.175", + "version": "6.7.176", "description": "Make Zotero useful for us LaTeX holdouts.", "homepage": "https://retorque.re/zotero-better-bibtex", "license": "ISC", From ad8717ffecfa7671c50dc25b470bc23a268e0b0b Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Tue, 23 Apr 2024 23:29:23 +0200 Subject: [PATCH 089/177] New Crowdin updates (#2847) * New translations better-bibtex.ftl (French) * New translations better-bibtex.ftl (Chinese Simplified) --- locale/fr-FR/better-bibtex.ftl | 8 ++++---- locale/zh-CN/better-bibtex.ftl | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/locale/fr-FR/better-bibtex.ftl b/locale/fr-FR/better-bibtex.ftl index 4016c75890..1b1c1b20be 100644 --- a/locale/fr-FR/better-bibtex.ftl +++ b/locale/fr-FR/better-bibtex.ftl @@ -29,7 +29,7 @@ better-bibtex_error-report_include-errors = better-bibtex_error-report_include-log = .label = Inclure le journal de débogage better-bibtex_error-report_include-items = - .label = Include item + .label = Inclure l'élément better-bibtex_error-report_include-notes = .label = notes better-bibtex_error-report_include-cache = @@ -44,13 +44,13 @@ better-bibtex_error-report_report-id = ID du journal de débogage : better-bibtex_error-report_restart-with-logging-enabled = .label = Redémarrer avec le journal activé… better-bibtex_error-report_review = - The data below is about to submitted to Better BibTeX for debugging. You can preview the data here, or save a copy of the log to get the precise data about to be sent, to see whether there's sensitive information that you do not wish to send. Please think carefully about whether unchecking options below is necessary for your environment. We will generally needs more communication (= time) if you remove parts of the log this way. + Les données ci-dessous sont sur le point d'être soumises à Better BibTeX pour le débogage. Vous pouvez prévisualiser les données ici, ou enregistrer une copie du journal pour obtenir les données précises sur le point d'être envoyées, pour voir s'il y a des informations sensibles que vous souhaitez ne pas envoyer. Réfléchissez bien à la nécessité de décocher les options ci-dessous dans votre environnement. Nous aurons généralement besoin de plus de communication (= de temps) si vous supprimez des parties du journal de cette manière. - If you are OK with sending this data, please proceed to the next screen where you will be presented a red debug ID, and post this ID on the issue tracker at + Si vous êtes d'accord avec l'envoi de ces données, passez à l'écran suivant, où vous obtiendrez un identifiant de débogage rouge, et publiez cet identifiant sur le système de suivi des problèmes à l'adresse suivante : https://github.com/retorquere/zotero-better-bibtex/issue better-bibtex_error-report_save = - .label = Save copy of log for inspection + .label = Sauvegarder une copie du log pour inspection better-bibtex_error-report_submission-in-progress = Veuillez patienter pendant que le journal de débogage est soumis. better-bibtex_error-report_submitted = Votre journal de débogage a été envoyé. better-bibtex_export-options_keep-updated = Garder à jour diff --git a/locale/zh-CN/better-bibtex.ftl b/locale/zh-CN/better-bibtex.ftl index f509203c6b..c14247c765 100644 --- a/locale/zh-CN/better-bibtex.ftl +++ b/locale/zh-CN/better-bibtex.ftl @@ -29,11 +29,11 @@ better-bibtex_error-report_include-errors = better-bibtex_error-report_include-log = .label = 包括调试日志 better-bibtex_error-report_include-items = - .label = Include item + .label = 包括条目 better-bibtex_error-report_include-notes = .label = 备注 better-bibtex_error-report_include-cache = - .label = cache + .label = 缓存 better-bibtex_error-report_include-attachments = .label = 附件元数据 better-bibtex_error-report_items = @@ -50,7 +50,7 @@ better-bibtex_error-report_review = https://github.com/retorquere/zotero-better-bibtex/issue better-bibtex_error-report_save = - .label = Save copy of log for inspection + .label = 保存日志副本以供检查 better-bibtex_error-report_submission-in-progress = 正在提交调试日志,请稍候。 better-bibtex_error-report_submitted = 您的调试日志已被提交。 better-bibtex_export-options_keep-updated = 保持更新 From dbee33a2a6ab3c5768cb07afaa44b068b585084f Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Tue, 23 Apr 2024 23:29:46 +0200 Subject: [PATCH 090/177] 6.7.177 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 879e154ed5..43c86d59ea 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "zotero-better-bibtex", - "version": "6.7.176", + "version": "6.7.177", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "zotero-better-bibtex", - "version": "6.7.176", + "version": "6.7.177", "license": "ISC", "dependencies": { "@artsy/to-title-case": "^1.1.0", diff --git a/package.json b/package.json index 5325c892f7..d0a2872ce3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "zotero-better-bibtex", - "version": "6.7.176", + "version": "6.7.177", "description": "Make Zotero useful for us LaTeX holdouts.", "homepage": "https://retorque.re/zotero-better-bibtex", "license": "ISC", From f5f3033936b471c357caee08a8ceee53f0dc0535 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Fri, 26 Apr 2024 11:47:55 +0200 Subject: [PATCH 091/177] cleanup --- .gitmodules | 4 + content/key-manager/formatter-zotero.js | 170 ------------------------ content/key-manager/formatter.ts | 2 +- setup/item.py | 16 +++ site/themes/relearn | 2 +- submodules/translators | 1 + submodules/zotero | 2 +- 7 files changed, 24 insertions(+), 173 deletions(-) delete mode 100644 content/key-manager/formatter-zotero.js create mode 160000 submodules/translators diff --git a/.gitmodules b/.gitmodules index 0f6d34f4d5..b2712e7fca 100644 --- a/.gitmodules +++ b/.gitmodules @@ -34,3 +34,7 @@ path = submodules/zotero url = https://github.com/zotero/zotero.git branch = main +[submodule "submodules/translators"] + path = submodules/translators + url = https://github.com/zotero/translators.git + branch = master diff --git a/content/key-manager/formatter-zotero.js b/content/key-manager/formatter-zotero.js deleted file mode 100644 index e4a6157149..0000000000 --- a/content/key-manager/formatter-zotero.js +++ /dev/null @@ -1,170 +0,0 @@ -const ZU = Zotero.Utilities; - -const Z = { - getHiddenPref(p) { - return Zotero.Prefs.get('translators.' + p); - } -}; - -//%a = first listed creator surname -//%y = year -//%t = first word of title -var citeKeyFormat = '%a_%t_%y'; - -// a little substitution function for BibTeX keys, where we don't want LaTeX -// escaping, but we do want to preserve the base characters - -function tidyAccents(s) { - var r = s.toLowerCase(); - - // XXX Remove conditional when we drop Zotero 2.1.x support - // This is supported in Zotero 3.0 and higher - if (ZU.removeDiacritics !== undefined) - r = ZU.removeDiacritics(r, true); - else { - // We fall back on the replacement list we used previously - r = r.replace(new RegExp('[ä]', 'g'), 'ae'); - - r = r.replace(new RegExp('[ö]', 'g'), 'oe'); - r = r.replace(new RegExp('[ü]', 'g'), 'ue'); - r = r.replace(new RegExp('[àáâãå]', 'g'), 'a'); - r = r.replace(new RegExp('æ', 'g'), 'ae'); - r = r.replace(new RegExp('ç', 'g'), 'c'); - r = r.replace(new RegExp('[èéêë]', 'g'), 'e'); - r = r.replace(new RegExp('[ìíîï]', 'g'), 'i'); - r = r.replace(new RegExp('ñ', 'g'), 'n'); - r = r.replace(new RegExp('[òóôõ]', 'g'), 'o'); - r = r.replace(new RegExp('œ', 'g'), 'oe'); - r = r.replace(new RegExp('[ùúû]', 'g'), 'u'); - r = r.replace(new RegExp('[ýÿ]', 'g'), 'y'); - } - - return r; -} - -var numberRe = /^[0-9]+/; - -// Below is a list of words that should not appear as part of the citation key -// it includes the indefinite articles of English, German, French and Spanish, as well as a small set of English prepositions whose -// force is more grammatical than lexical, i.e. which are likely to strike many as 'insignificant'. -// The assumption is that most who want a title word in their key would prefer the first word of significance. -// Also remove markup -var citeKeyTitleBannedRe = /\b(a|an|the|some|from|on|in|to|of|do|with|der|die|das|ein|eine|einer|eines|einem|einen|un|une|la|le|l\'|el|las|los|al|uno|una|unos|unas|de|des|del|d\')(\s+|\b)|(<\/?(i|b|sup|sub|sc|span style=\"small-caps\"|span)>)/g; - -var citeKeyConversionsRe = /%([a-zA-Z])/; - -var citeKeyConversions = { - 'a': function(flags, item) { - if (item.creators && item.creators[0] && item.creators[0].lastName) { - return item.creators[0].lastName.toLowerCase().replace(/ /g, '_').replace(/,/g, ''); - } - - return 'noauthor'; - }, - - 't': function(flags, item) { - if (item['title']) { - return item['title'].toLowerCase().replace(citeKeyTitleBannedRe, '').split(/\s+/g)[0]; - } - - return 'notitle'; - }, - - 'y': function(flags, item) { - if (item.date) { - var date = Zotero.Date.strToDate(item.date); - - if (date.year && numberRe.test(date.year)) { - return date.year; - } - } - - return 'nodate'; - } -}; - -function buildCiteKey(item, extraFields, citekeys) { - if (extraFields) { - const citationKey = extraFields.findIndex( - field => field.field && field.value && field.field.toLowerCase() === 'citation key' - ); - - if (citationKey >= 0) - return extraFields.splice(citationKey, 1)[0].value; - } - - if (item.citationKey) - return item.citationKey; - - var basekey = ''; - var counter = 0; - var citeKeyFormatRemaining = citeKeyFormat; - - while (citeKeyConversionsRe.test(citeKeyFormatRemaining)) { - if (counter > 100) { - Zotero.debug('Pathological BibTeX format: ' + citeKeyFormat); - break; - } - - var m = citeKeyFormatRemaining.match(citeKeyConversionsRe); - - if (m.index > 0) { - //add data before the conversion match to basekey - basekey = basekey + citeKeyFormatRemaining.substr(0, m.index); - } - - var flags = ''; // for now - var f = citeKeyConversions[m[1]]; - - if (typeof f == 'function') { - var value = f(flags, item); - Zotero.debug('Got value ' + value + ' for %' + m[1]); - - //add conversion to basekey - basekey = basekey + value; - } - - citeKeyFormatRemaining = citeKeyFormatRemaining.substr(m.index + m.length); - counter++; - } - - if (citeKeyFormatRemaining.length > 0) { - basekey = basekey + citeKeyFormatRemaining; - } - - // for now, remove any characters not explicitly known to be allowed; - // we might want to allow UTF-8 citation keys in the future, depending - // on implementation support. - // - // no matter what, we want to make sure we exclude - // " # % ' ( ) , = { } ~ and backslash - // however, we want to keep the base characters - - basekey = tidyAccents(basekey); - - // use legacy pattern for all old items to not break existing usages - var citeKeyCleanRe = /[^a-z0-9\!\$\&\*\+\-\.\/\:\;\<\>\?\[\]\^\_\`\|]+/g; - - // but use the simple pattern for all newly added items - // or always if the hiddenPref is set - // extensions.zotero.translators.BibTeX.export.simpleCitekey - if (Z.getHiddenPref && Z.getHiddenPref('BibTeX.export.simpleCitekey') || item.dateAdded && parseInt(item.dateAdded.substr(0, 4)) >= 2020) { - citeKeyCleanRe = /[^a-z0-9_-]/g; - } - - basekey = basekey.replace(citeKeyCleanRe, ''); - var citekey = basekey; - var i = 0; - - while (citekeys[citekey]) { - i++; - citekey = basekey + '-' + i; - } - - citekeys[citekey] = true; - return citekey; -} - -module.exports = { - buildCiteKey: buildCiteKey -}; \ No newline at end of file diff --git a/content/key-manager/formatter.ts b/content/key-manager/formatter.ts index e90efc7b3c..c73493c9a2 100644 --- a/content/key-manager/formatter.ts +++ b/content/key-manager/formatter.ts @@ -16,7 +16,7 @@ import ucs2decode = require('punycode2/ucs2/decode') import { Preference } from '../prefs' import { JournalAbbrev } from '../journal-abbrev' import * as Extra from '../extra' -import { buildCiteKey as zotero_buildCiteKey } from './formatter-zotero' +import { buildCiteKey as zotero_buildCiteKey } from '../../gen/ZoteroBibTeX.mjs' import { babelLanguage, CJK } from '../text' import { fetchSync as fetchInspireHEP } from '../inspire-hep' diff --git a/setup/item.py b/setup/item.py index 568d083bcf..06b20b7089 100755 --- a/setup/item.py +++ b/setup/item.py @@ -760,3 +760,19 @@ def template(tmpl): if 'type' in m and type(m.type) == list: m.type = sorted(m.type) json.dump(schema, f, indent=' ') + +print(' writing zotero citation key formatter') +with open('submodules/translators/BibTeX.js') as fin, open('gen/ZoteroBibTeX.mjs', 'w') as fout: + fout.write(''' + const ZU = Zotero.Utilities; + const Z = { + getHiddenPref(p) { + return Zotero.Prefs.get('translators.' + p); + } + }; + ''') + fout.write('const ZOTERO_TRANSLATOR_INFO = ') + fout.write(fin.read() + .replace('Zotero.Utilities.strToDate', 'Zotero.Date.strToDate') + ) + fout.write('\nexport { buildCiteKey }\n') diff --git a/site/themes/relearn b/site/themes/relearn index e326a8e85f..f9dc695a57 160000 --- a/site/themes/relearn +++ b/site/themes/relearn @@ -1 +1 @@ -Subproject commit e326a8e85fd99919539443fb5018f32c791ff541 +Subproject commit f9dc695a5783291a40f422c94c1ca04fb8163b04 diff --git a/submodules/translators b/submodules/translators new file mode 160000 index 0000000000..ffb252e58b --- /dev/null +++ b/submodules/translators @@ -0,0 +1 @@ +Subproject commit ffb252e58b2ff0a6344e06d2f8928828ef9c0e7f diff --git a/submodules/zotero b/submodules/zotero index 0077c3f07a..a5393ca0e5 160000 --- a/submodules/zotero +++ b/submodules/zotero @@ -1 +1 @@ -Subproject commit 0077c3f07a2f0fa1fb0e2568f25aa8b598b9074a +Subproject commit a5393ca0e525e53acd5e419dff586b8ae3da1379 From 7c4a223403edeac58ed9ef9e5fb23d7e6a678173 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Fri, 26 Apr 2024 12:48:58 +0200 Subject: [PATCH 092/177] cleanup --- setup/item.py | 2 +- submodules/zotero | 2 +- translators/Better BibTeX.ts | 39 ++---------------------------------- 3 files changed, 4 insertions(+), 39 deletions(-) diff --git a/setup/item.py b/setup/item.py index 06b20b7089..2e4d9f81b9 100755 --- a/setup/item.py +++ b/setup/item.py @@ -775,4 +775,4 @@ def template(tmpl): fout.write(fin.read() .replace('Zotero.Utilities.strToDate', 'Zotero.Date.strToDate') ) - fout.write('\nexport { buildCiteKey }\n') + fout.write('\nexport { buildCiteKey, detectImport }\n') diff --git a/submodules/zotero b/submodules/zotero index a5393ca0e5..7afbdd2150 160000 --- a/submodules/zotero +++ b/submodules/zotero @@ -1 +1 @@ -Subproject commit a5393ca0e525e53acd5e419dff586b8ae3da1379 +Subproject commit 7afbdd21501b6ab48ddc0c73fd72643760accd71 diff --git a/translators/Better BibTeX.ts b/translators/Better BibTeX.ts index 85a66f6f70..182f85a02c 100644 --- a/translators/Better BibTeX.ts +++ b/translators/Better BibTeX.ts @@ -1,6 +1,7 @@ import { Translation, collect } from './lib/translator' import type { Translators } from '../typings/translators.d.ts' import type { ParseError } from '@retorquere/bibtex-parser' +import { detectImport as zotero_detectImport } from '../gen/ZoteroBibTeX.mjs' declare const Zotero: any declare var ZOTERO_TRANSLATOR_INFO: Translators.Header // eslint-disable-line no-var @@ -16,43 +17,7 @@ export function doExport(): void { import * as escape from '../content/escape' export function detectImport(): boolean { - if (!Zotero.BetterBibTeX || !Zotero.getHiddenPref('better-bibtex.import')) return false - - const maxChars = 1048576 // 1MB - const chunk = 4096 - - let inComment = false - let block = '' - let buffer = '' - let chr = '' - let charsRead = 0 - - const re = /^\s*@[a-zA-Z]+[({]/ - while ((buffer = Zotero.read(chunk)) && charsRead < maxChars) { - Zotero.debug(`Scanning ${buffer.length} characters for BibTeX`) - charsRead += buffer.length - for (let i=0; i Date: Sat, 27 Apr 2024 18:55:09 +0200 Subject: [PATCH 093/177] testcase for #2849 --- test/features/export.feature | 1 + ... markdown files from bibtex #2849.biblatex | 11 ++++ ...ting markdown files from bibtex #2849.json | 54 +++++++++++++++++++ translators/bibtex/entry.ts | 25 +++++++-- typings/translators.d.ts | 2 +- 5 files changed, 88 insertions(+), 5 deletions(-) create mode 100644 test/fixtures/export/Three dashes in extra field for generating markdown files from bibtex #2849.biblatex create mode 100644 test/fixtures/export/Three dashes in extra field for generating markdown files from bibtex #2849.json diff --git a/test/features/export.feature b/test/features/export.feature index 54ce289aa9..6d48453543 100644 --- a/test/features/export.feature +++ b/test/features/export.feature @@ -13,6 +13,7 @@ Feature: Export Examples: | file | references | + | Three dashes in extra field for generating markdown files from bibtex #2849 | 1 | | Export of Contributor to WITH #2837 | 1 | | Better BibTeX export from Zotero missing Extra fields eg issued #2816 | 1 | | Support for Chinese Quotation Marks When Exporting with Export unicode as plaintext latex commands #2810 | 1 | diff --git a/test/fixtures/export/Three dashes in extra field for generating markdown files from bibtex #2849.biblatex b/test/fixtures/export/Three dashes in extra field for generating markdown files from bibtex #2849.biblatex new file mode 100644 index 0000000000..9305fdb390 --- /dev/null +++ b/test/fixtures/export/Three dashes in extra field for generating markdown files from bibtex #2849.biblatex @@ -0,0 +1,11 @@ +@inproceedings{castillo_authoritarianism_2011, + title = {Authoritarianism, social dominance, and trust in public institutions.}, + author = {Castillo, J. and Miranda, D. and Torres, P.}, + date = {2011-07}, + location = {Bilgi University, Istambul}, + eventtitle = {Annual Scientific Meeting of the International Society of Political Psychology ISPP}, + keywords = {legitimacy ideology Chile}, + annotation = {url\_slides: "lisa-coes.github.io/"\\ +---\\ +This is a presentation funded by ANID} +} diff --git a/test/fixtures/export/Three dashes in extra field for generating markdown files from bibtex #2849.json b/test/fixtures/export/Three dashes in extra field for generating markdown files from bibtex #2849.json new file mode 100644 index 0000000000..dd31773394 --- /dev/null +++ b/test/fixtures/export/Three dashes in extra field for generating markdown files from bibtex #2849.json @@ -0,0 +1,54 @@ +{ + "config": { + "id": "36a3b0b5-bad0-4a04-b79b-441c7cef77db", + "label": "BetterBibTeX JSON", + "preferences": { + "asciiBibTeX": false, + "bibtexParticleNoOp": true, + "bibtexURL": "url", + "citekeyFormat": "auth(n=0,m=1,creator=\"*\",initials=false).fold.lower + \"_\" + shorttitle(1).lower + \"_\" + year", + "exportBraceProtection": false, + "exportTitleCase": false, + "importSentenceCase": "off", + "keyScope": "global" + } + }, + "items": [ + { + "citationKey": "castillo_authoritarianism_2011a", + "conferenceName": "Annual Scientific Meeting of the International Society of Political Psychology ISPP", + "creators": [ + { + "creatorType": "author", + "firstName": "J.", + "lastName": "Castillo" + }, + { + "creatorType": "author", + "firstName": "D.", + "lastName": "Miranda" + }, + { + "creatorType": "author", + "firstName": "P.", + "lastName": "Torres" + } + ], + "date": "July, 2011", + "extra": [ + "url_slides: \"lisa-coes.github.io/\"", + "---", + "This is a presentation funded by ANID" + ], + "itemID": 1, + "itemType": "conferencePaper", + "place": "Bilgi University, Istambul", + "tags": [ + { + "tag": "legitimacy ideology Chile" + } + ], + "title": "Authoritarianism, social dominance, and trust in public institutions." + } + ] +} \ No newline at end of file diff --git a/translators/bibtex/entry.ts b/translators/bibtex/entry.ts index 104a43e6a3..a03c684e7d 100644 --- a/translators/bibtex/entry.ts +++ b/translators/bibtex/entry.ts @@ -115,7 +115,7 @@ const enc_creators_marker = { const isBibString = /^[a-z][-a-z0-9_]*$/i export type Config = { - fieldEncoding: Record + fieldEncoding: Record caseConversion: Record typeMap: { csl: Record @@ -515,6 +515,10 @@ export class Entry { else { let value switch (field.enc) { + case 'extra': + value = this.enc_extra(field) + break + case 'literal_list': value = this.enc_literal_list(field, { raw: this.item.raw }) break @@ -776,7 +780,7 @@ export class Entry { } } - this.add({ name: 'annotation', value: this.item.extra?.replace(/\n+/g, newlines => (newlines.length > 1 ? '\n\n' : ' ')).trim() }) + this.add({ name: 'annotation', value: this.item.extra, enc: 'extra' }) if (this.translation.options.exportNotes) { // if bibtexURL === 'note' is active, the note field will have been filled with an URL. In all other cases, if this is attempting to overwrite the 'note' field, I want the test suite to throw an error @@ -1033,12 +1037,25 @@ export class Entry { } /* - * Encode text to LaTeX + * Encode extra field to LaTeX + * + * This encoding supports plaintext with newlines + * + * @param {field} field to encode. + * @return {String} field.value encoded as latex + */ + protected enc_extra(f) { + return f.value.split(/(\n+)/).map((value: string, i: number) => ((i % 2) === 0) ? this.enc_literal({ value }) : value.length === 1 ? '\\\\\n' : '\n\n').join('') + } + + /* + /* + * Encode list to LaTeX * * This encoding supports simple HTML markup. * * @param {field} field to encode. - * @return {String} field.value encoded as author-style value + * @return {String} field.value encoded as list of literals */ protected enc_literal_list(f, options: { raw?: boolean } = {}) { const list = Array.isArray(f.value) ? f.value : [ f.value ] diff --git a/typings/translators.d.ts b/typings/translators.d.ts index 74f241ee17..62af60d27f 100644 --- a/typings/translators.d.ts +++ b/typings/translators.d.ts @@ -45,7 +45,7 @@ export namespace Translators { name: string verbatim?: string value: string | string[] | number | null | Attachment[] | Tag[] - enc?: 'raw' | 'url' | 'verbatim' | 'creators' | 'literal' | 'literal_list' | 'latex' | 'tags' | 'attachments' | 'date' | 'minimal' | 'bibtex' | 'biblatex' + enc?: 'raw' | 'url' | 'verbatim' | 'creators' | 'literal' | 'literal_list' | 'latex' | 'tags' | 'attachments' | 'date' | 'minimal' | 'bibtex' | 'biblatex' | 'extra' orig?: { name?: string, verbatim?: string, inherit?: boolean } bibtexStrings?: boolean bare?: boolean From be0d8f666935545030b38c4f7d36fa5ebf3afb73 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Sat, 27 Apr 2024 19:27:08 +0200 Subject: [PATCH 094/177] compromises all around --- .../Error exporting with custom Extra field #1118.bibtex | 7 ++++++- translators/bibtex/entry.ts | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/test/fixtures/export/Error exporting with custom Extra field #1118.bibtex b/test/fixtures/export/Error exporting with custom Extra field #1118.bibtex index 25988f1250..d71c20b90d 100644 --- a/test/fixtures/export/Error exporting with custom Extra field #1118.bibtex +++ b/test/fixtures/export/Error exporting with custom Extra field #1118.bibtex @@ -6,6 +6,11 @@ journal = {Pacific Journal of Mathematics}, volume = {41}, pages = {247--261}, - annotation = {\{biblatex\{ editortype: "translated and edited under the supervision of", referencetype: mvlexicon \}\}\{\}}, + annotation = {\{biblatex\{\\ + editortype: "translated and edited under the supervision of",\\ + referencetype: mvlexicon\\ +\}\}\\ +\\ +\{\}}, note = {MR 46:7018} } diff --git a/translators/bibtex/entry.ts b/translators/bibtex/entry.ts index a03c684e7d..b543755916 100644 --- a/translators/bibtex/entry.ts +++ b/translators/bibtex/entry.ts @@ -1045,7 +1045,7 @@ export class Entry { * @return {String} field.value encoded as latex */ protected enc_extra(f) { - return f.value.split(/(\n+)/).map((value: string, i: number) => ((i % 2) === 0) ? this.enc_literal({ value }) : value.length === 1 ? '\\\\\n' : '\n\n').join('') + return this.enc_literal({ value: f.value.replace(/\n/g, '\x0E') }).replace(/\x0E/g, newlines => newlines.length === 1 ? '\\\\\n' : '\n\n') // eslint-disable-line no-control-regex } /* From 96ea9fb0958993396495216c14d2910be5942ec8 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Sat, 27 Apr 2024 19:41:43 +0200 Subject: [PATCH 095/177] New translations better-bibtex.ftl (Chinese Simplified) (#2848) --- locale/zh-CN/better-bibtex.ftl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/locale/zh-CN/better-bibtex.ftl b/locale/zh-CN/better-bibtex.ftl index c14247c765..8af368a029 100644 --- a/locale/zh-CN/better-bibtex.ftl +++ b/locale/zh-CN/better-bibtex.ftl @@ -44,9 +44,9 @@ better-bibtex_error-report_report-id = 调试日志 ID: better-bibtex_error-report_restart-with-logging-enabled = .label = 启用日志记录并重启… better-bibtex_error-report_review = - The data below is about to submitted to Better BibTeX for debugging. You can preview the data here, or save a copy of the log to get the precise data about to be sent, to see whether there's sensitive information that you do not wish to send. Please think carefully about whether unchecking options below is necessary for your environment. We will generally needs more communication (= time) if you remove parts of the log this way. + 以下数据将被提交至 Better BibTeX 以供调试。您可以现在预览数据,或保存日志副本以获取将被发送的准确数据,以检查是否有您不希望发送的敏感信息。请仔细考虑在您的环境下是否有必要取消下面的选项。如果您以这种方式移除了部分日志,那么我们一般需要更多交流(=更多时间)。 - If you are OK with sending this data, please proceed to the next screen where you will be presented a red debug ID, and post this ID on the issue tracker at + 如果您允许发送数据,请进行下一步,并将以红色字体显示的调试 ID 提交至问题追踪器(issue tracker): https://github.com/retorquere/zotero-better-bibtex/issue better-bibtex_error-report_save = From 1b139c3f2a3344d215c03bc7b79b9b165145f8f4 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Sun, 28 Apr 2024 00:47:36 +0200 Subject: [PATCH 096/177] so done with this shit --- .github/workflows/label-gun.yml | 32 ++++++++++++-------------------- 1 file changed, 12 insertions(+), 20 deletions(-) diff --git a/.github/workflows/label-gun.yml b/.github/workflows/label-gun.yml index d56b043f33..cd549905e8 100644 --- a/.github/workflows/label-gun.yml +++ b/.github/workflows/label-gun.yml @@ -19,31 +19,23 @@ jobs: label.reopened: reopened log-id: "([A-Z0-9]{8}(-refs)?-(apse|euc))|([A-Z0-9]{8}-[^-]+)" message.log-required: | - Hello there @{{username}}, + Hello @{{username}}, - Hope you're doing well! `@retorquere` is here to help you get the most out of your experience with Better BibTeX. To make sure he can assist you effectively, he kindly asks for your cooperation in providing a debug log – it's like giving him the key to understanding and solving the puzzle! + `@retorquere` is ready to assist you with Better BibTeX. In order to do so efficiently, a debug log is generally required. The information it containst is key to him understanding, replicating, and resolving your issue. - Getting your debug log is a breeze and will save us both time in getting your problem resolved or the new feature you'd like implemented. Trust me, it's way quicker than discussing why it's important. :smiley: + **Here’s how you can share your debug log:** - **How to Share Your Debug Log:** + 1. If your issue involves specific references, citekey generation, or exports, right-click on the relevant item(s) and select "Better BibTeX -> Submit Better BibTeX debug log" from the menu. + 2. For issues where items do not play a role, follow these steps: + * Restart Zotero with debugging enabled (Help -> Debug Output Logging -> Restart with logging enabled). + * Reproduce the problem. + * Choose "Send Better BibTeX debug report..." from the help menu. - 1. If the issue involves specific references, citekey generation, or exports, just right-click on the relevant item(s) and choose "Better BibTeX -> Submit Better BibTeX debug log" from the menu. + After these steps, you will receive debug ID displayed in red. Please share this ID with `@retorquere` in this issue thread. If your query is about an export, include both the actually exported result and your expected/desired outcome. - 2. For other issues, follow these simple steps: - * Restart Zotero with debugging enabled (Help -> Debug Output Logging -> Restart with logging enabled). - * Reproduce the problem. - * Select "Send Better BibTeX debug report..." from the help menu. + Sharing your debug log gives `@retorquere` a view of your Better BibTeX configuration and the elements contributing to the issue. This helps him address your concerns more efficiently. - Once you hit that submit button, you'll get a special red debug ID. Just share that with `@retorquere` in this issue thread. If the question is regarding an export, don't forget to include what you see exported and what you expected. - - By sharing your debug log, you're giving `@retorquere` a clearer picture of your setup and the items causing the issue. It's like a superhero cape for him – he can swoop in and tackle the problem much faster. - - We totally get that your time is valuable, and we appreciate your effort in helping `@retorquere` help you. You might be surprised at how much this simple step speeds up the whole process. - - Thanks a bunch! - - **PS: If the Debug Log menu does not appear, or it does not send the debug log** - - A fallback option is available under "Help" > "Send debug log to file.io". + Thank you. + **PS: If the Debug Log menu is not available, or if it fails to send the debug log**, you can use the option under “Help” > “Send debug log to file.io”. message.no-close: Thanks for the feedback! Just so you know, GitHub doesn't let me control who can close issues, and @retorquere likes to leave bug reports and enhancements open as a nudge to merge them into the next release. From 46282e1dd878a321cb06d8fff7dd5adbecb08ce8 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Mon, 29 Apr 2024 10:27:27 +0200 Subject: [PATCH 097/177] os.path.split provided by zotero --- content/os.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/content/os.ts b/content/os.ts index 95c1bd1e20..d827dc7172 100644 --- a/content/os.ts +++ b/content/os.ts @@ -3,6 +3,7 @@ import { is7 } from './client' import { OS as $OS } from '../gen/osfile' export const Shim: any = is7 ? $OS : undefined +/* if (is7 && !Shim.Path.split) { Shim.Path.split = (path: string) => { path = Shim.Path.normalize(path) @@ -20,3 +21,4 @@ if (is7 && !Shim.Path.split) { } } } +*/ From ee4bb0eddd15eecd0351b14c898491f54ec86564 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Mon, 29 Apr 2024 13:04:44 +0200 Subject: [PATCH 098/177] citekey display -- of sorts --- content/ZoteroItemPane.ts | 29 +++++++++++++++++------------ content/bootstrap.ts | 3 +++ site/themes/relearn | 2 +- submodules/babel | 2 +- submodules/biber | 2 +- submodules/biblatex | 2 +- submodules/zotero | 2 +- typings/global.d.ts | 8 +++++--- 8 files changed, 30 insertions(+), 20 deletions(-) diff --git a/content/ZoteroItemPane.ts b/content/ZoteroItemPane.ts index fb24d24adb..dcc7b9aa28 100644 --- a/content/ZoteroItemPane.ts +++ b/content/ZoteroItemPane.ts @@ -46,18 +46,23 @@ export class ZoteroItemPane { if (!this.document.getElementById('better-bibtex-editpane-item-box')) { if (is7) { - /* - itemBox.parentNode.parentNode.parentNode.appendChild(elements.create('html:div', { style: 'display: flex; flex-direction: column;' , $: [ - - elements.create('html:div', { id: 'better-bibtex-editpane-item-box', style: 'display: flex; flex-direction: row', $: [ - elements.create('label', { id: 'better-bibtex-citekey-label', style: 'flex: 0 0 auto; width: 9em; text-align: right; color: #7F7F7F', value: '' }), - elements.create('html:input', { id: 'better-bibtex-citekey-display', type: 'text', style: 'flex: 0 0 auto', readonly: 'true', value: '' }), - ]}), - - itemBox.parentNode.parentNode, - ]})) - */ - log.debug('waiting for API to insert citekey in itempane') + Zotero.ItemPaneManager.registerSection({ + paneID: 'betterbibtex-section-citationkey', + pluginID: 'better-bibtex@iris-advies.com', + header: { + l10nID: 'example-item-pane-header', + icon: `${rootURI}content/skin/citation-key.png`, + }, + sidenav: { + l10nID: 'example-item-pane-header', + icon: `${rootURI}content/skin/citation-key.png`, + }, + bodyXHTML: 'Citation Key ', + // onRender: ({ body, item, editable, tabType }) => { + onRender: ({ body, item }) => { + body.ownerDocument.getElementById('better-bibtex-citation-key').value = item.getField('citationKey') || '\u274C' + }, + }) } else { itemBox.parentNode.appendChild(elements.create('vbox', { flex: 1, style: 'margin: 0; padding: 0', $: [ diff --git a/content/bootstrap.ts b/content/bootstrap.ts index 45eb2fa761..7ee4899b46 100644 --- a/content/bootstrap.ts +++ b/content/bootstrap.ts @@ -79,6 +79,9 @@ export async function startup({ resourceURI, rootURI = resourceURI.spec }, reaso target: { Zotero, + // because the Zotero sample code assumes you're doing everything in bootstrap.js + rootURI, + // to pacify libraries that do env-detection window: Zotero.getMainWindow(), document: Zotero.getMainWindow().document, diff --git a/site/themes/relearn b/site/themes/relearn index f9dc695a57..0480d11c33 160000 --- a/site/themes/relearn +++ b/site/themes/relearn @@ -1 +1 @@ -Subproject commit f9dc695a5783291a40f422c94c1ca04fb8163b04 +Subproject commit 0480d11c33cc08dd578cc76b39b1921c65b45f3b diff --git a/submodules/babel b/submodules/babel index 5d3a398da0..d4d55826cd 160000 --- a/submodules/babel +++ b/submodules/babel @@ -1 +1 @@ -Subproject commit 5d3a398da0459785c13b350ea92d9e29c54462c7 +Subproject commit d4d55826cd264220b7a8d92b453748564affea54 diff --git a/submodules/biber b/submodules/biber index c517652a0a..48314c0d33 160000 --- a/submodules/biber +++ b/submodules/biber @@ -1 +1 @@ -Subproject commit c517652a0a9df27f209a593932bc48f27679af4a +Subproject commit 48314c0d336a3e883d701fe9a41ff5a99179b71c diff --git a/submodules/biblatex b/submodules/biblatex index b73fa2f17e..237c4d415d 160000 --- a/submodules/biblatex +++ b/submodules/biblatex @@ -1 +1 @@ -Subproject commit b73fa2f17ee97b03a23a5a2c320f10d080856110 +Subproject commit 237c4d415d1254e314037688a33531535d1cc34d diff --git a/submodules/zotero b/submodules/zotero index 7afbdd2150..54382475be 160000 --- a/submodules/zotero +++ b/submodules/zotero @@ -1 +1 @@ -Subproject commit 7afbdd21501b6ab48ddc0c73fd72643760accd71 +Subproject commit 54382475be7f53434308218eb9c97a1a62794d4f diff --git a/typings/global.d.ts b/typings/global.d.ts index f828be159a..f963ba9f5e 100644 --- a/typings/global.d.ts +++ b/typings/global.d.ts @@ -70,11 +70,13 @@ interface ZoteroItem { toJSON: () => import('../gen/typings/serialized-item').Item } -// https://stackoverflow.com/questions/39040108/import-class-in-definition-file-d-ts -declare const Zotero: { - [attr: string]: any +type GlobalBBT = { + // https://stackoverflow.com/questions/39040108/import-class-in-definition-file-d-ts BetterBibTeX: import('../content/better-bibtex').BetterBibTeX } +type ZoteroObject = GlobalBBT & Omit, keyof GlobalBBT> +declare const Zotero: ZoteroObject declare const Components: any declare const Services: any +declare const rootURI: string From cdfc99e05aa18df61caefd83195279117fd56590 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Mon, 29 Apr 2024 13:04:57 +0200 Subject: [PATCH 099/177] 6.7.178 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 43c86d59ea..e377346189 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "zotero-better-bibtex", - "version": "6.7.177", + "version": "6.7.178", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "zotero-better-bibtex", - "version": "6.7.177", + "version": "6.7.178", "license": "ISC", "dependencies": { "@artsy/to-title-case": "^1.1.0", diff --git a/package.json b/package.json index d0a2872ce3..ee0321610a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "zotero-better-bibtex", - "version": "6.7.177", + "version": "6.7.178", "description": "Make Zotero useful for us LaTeX holdouts.", "homepage": "https://retorque.re/zotero-better-bibtex", "license": "ISC", From 0aa2dab25a79c8ece83b0deda295182787518686 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Mon, 29 Apr 2024 16:05:54 +0200 Subject: [PATCH 100/177] biblatex option --- content/ExportOptions.ts | 17 +++- content/Preferences.ts | 11 ++- content/Preferences/autoexport.pug | 6 ++ content/auto-export.ts | 2 + content/better-bibtex.ts | 1 + content/db/cache.ts | 9 ++- locale/en-US/better-bibtex.ftl | 1 + schema/BetterBibTeX JSON.json | 3 + .../templates/auto-export-displayOptions.json | 2 +- ...twriter with other contributors #2802.json | 3 +- translators/Better BibLaTeX.json | 1 + translators/bibtex/biblatex.ts | 79 ++++++++++++------- translators/lib/translator.ts | 1 + typings/translators.d.ts | 1 + 14 files changed, 100 insertions(+), 37 deletions(-) diff --git a/content/ExportOptions.ts b/content/ExportOptions.ts index 417de4fe50..b4a36708cc 100644 --- a/content/ExportOptions.ts +++ b/content/ExportOptions.ts @@ -95,7 +95,8 @@ export class ExportOptions { break } - for (const node of [...doc.querySelectorAll('#export-option-exportFileData, #export-option-worker, #export-option-keepUpdated')] as HTMLInputElement[]) { + const ids = ['exportFileData', 'worker', 'keepUpdated', 'biblatexAPA', 'biblatexChicago'].map(id => `#export-option-${id}`).join(', ') + for (const node of [...doc.querySelectorAll(ids)] as HTMLInputElement[]) { if (node.classList.contains('better-bibex-export-options')) continue node.classList.add('better-bibex-export-options') node.addEventListener('command', this.mutex.bind(this)) @@ -108,6 +109,12 @@ export class ExportOptions { case 'export-option-worker': node.setAttribute('label', l10n.localize('better-bibtex_export-options_worker')) break + case 'export-option-biblatexAPA': + node.setAttribute('label', l10n.localize('better-bibtex_export-options_biblatexAPA')) + break + case 'export-option-biblatexChicago': + node.setAttribute('label', l10n.localize('better-bibtex_export-options_biblatexChicago')) + break } } @@ -126,6 +133,8 @@ export class ExportOptions { const exportFileData = doc.getElementById('export-option-exportFileData') as XUL.Checkbox const keepUpdated = doc.getElementById('export-option-keepUpdated') as XUL.Checkbox const worker = doc.getElementById('export-option-worker') as XUL.Checkbox + const biblatexAPA = doc.getElementById('export-option-biblatexAPA') as XUL.Checkbox + const biblatexChicago = doc.getElementById('export-option-biblatexChicago') as XUL.Checkbox if (!exportFileData || !keepUpdated) return null @@ -148,6 +157,12 @@ export class ExportOptions { worker.checked = true } break + case biblatexAPA.id: + if (biblatexAPA.checked) biblatexChicago.checked = false + break + case biblatexChicago.id: + if (biblatexChicago.checked) biblatexAPA.checked = false + break } worker.disabled = keepUpdated.checked diff --git a/content/Preferences.ts b/content/Preferences.ts index e122edae66..0ecb583e70 100644 --- a/content/Preferences.ts +++ b/content/Preferences.ts @@ -205,6 +205,7 @@ class AutoExportPane { case 'biblatexExtendedNameFormat': case 'recursive': case 'biblatexAPA': + case 'biblatexChicago': (node as unknown as XUL.Checkbox).checked = selected[field] break @@ -280,6 +281,7 @@ class AutoExportPane { Cache.getCollection(Translators.byId[ae.translatorID].label).removeDataOnly() let value: number | boolean | string + let disable: 'biblatexChicago' | 'biblatexAPA' = null switch (field) { case 'exportNotes': @@ -290,8 +292,14 @@ class AutoExportPane { case 'biblatexExtendedNameFormat': case 'recursive': case 'biblatexAPA': - log.debug('edit autoexport:', field, node.checked) + case 'biblatexChicago': value = node.checked + if (node.checked && field === 'biblatexAPA') { + disable = 'biblatexChicago' + } + else if (node.checked && field === 'biblatexChicago') { + disable = 'biblatexAPA' + } break case 'DOIandURL': @@ -304,6 +312,7 @@ class AutoExportPane { log.error('edit autoexport: unexpected field', field) } await AutoExport.edit(path, field, value) + if (disable) await AutoExport.edit(path, disable, false) log.debug('edit autoexport: after', await AutoExport.get(path)) await this.refresh() } diff --git a/content/Preferences/autoexport.pug b/content/Preferences/autoexport.pug index f7021f618e..2813e54bb9 100644 --- a/content/Preferences/autoexport.pug +++ b/content/Preferences/autoexport.pug @@ -86,6 +86,12 @@ html:div#bbt-prefs-auto-exports(class='bbt-prefs-2col') label='&better-bibtex_preferences_auto-export_fields_biblatexAPA.label;' oncommand='Zotero.BetterBibTeX.PrefPane.autoexport.edit(this)' ) + checkbox.bbt-autoexport-options.bbt-autoexport-BetterBibLaTeX( + class='bbt-prefs-2col-span' + data-ae-field='biblatexChicago' + label='&better-bibtex_preferences_auto-export_fields_biblatexChicago.label;' + oncommand='Zotero.BetterBibTeX.PrefPane.autoexport.edit(this)' + ) // all checkbox( diff --git a/content/auto-export.ts b/content/auto-export.ts index 54a4358bd8..a1dc0fda35 100644 --- a/content/auto-export.ts +++ b/content/auto-export.ts @@ -326,6 +326,7 @@ const queue = new class TaskQueue { exportNotes: ae.exportNotes, useJournalAbbreviation: ae.useJournalAbbreviation, biblatexAPA: ae.biblatexAPA || false, + biblatexChicago: ae.biblatexChicago || false, } const jobs: ExportJob[] = [{ @@ -414,6 +415,7 @@ type Job = { DOIandURL?: boolean bibtexURL?: boolean biblatexAPA?: boolean + biblatexChicago?: boolean } type JobSetting = keyof Job diff --git a/content/better-bibtex.ts b/content/better-bibtex.ts index de541e56ff..c6879272f8 100644 --- a/content/better-bibtex.ts +++ b/content/better-bibtex.ts @@ -494,6 +494,7 @@ $patch$(Zotero.Translate.Export.prototype, 'translate', original => function Zot translatorID, exportNotes: displayOptions.exportNotes, biblatexAPA: displayOptions.biblatexAPA, + biblatexChicago: displayOptions.biblatexChicago, useJournalAbbreviation: displayOptions.useJournalAbbreviation, }) } diff --git a/content/db/cache.ts b/content/db/cache.ts index 6988bd1206..85473eaba8 100644 --- a/content/db/cache.ts +++ b/content/db/cache.ts @@ -92,7 +92,7 @@ class Cache extends Loki { coll = this.schemaCollection(header.label, { logging: false, - indices: [ 'itemID', 'exportNotes', 'biblatexAPA', 'useJournalAbbreviation', ...Object.keys(cachedPrefs) ], + indices: [ 'itemID', 'exportNotes', 'biblatexAPA', 'biblatexChicago', 'useJournalAbbreviation', ...Object.keys(cachedPrefs) ], schema: { type: 'object', additionalProperties: false, @@ -104,6 +104,7 @@ class Cache extends Loki { exportNotes: { type: 'boolean' }, useJournalAbbreviation: { type: 'boolean' }, biblatexAPA: { type: 'boolean' }, + biblatexChicago: { type: 'boolean' }, // preferences ...cachedPrefs, @@ -115,7 +116,7 @@ class Cache extends Loki { meta: { type: 'object' }, $loki: { type: 'integer' }, }, - required: [ 'itemID', 'entry', 'biblatexAPA', 'exportNotes', 'useJournalAbbreviation', ...Object.keys(cachedPrefs) ], + required: [ 'itemID', 'entry', 'biblatexAPA', 'biblatexChicago', 'exportNotes', 'useJournalAbbreviation', ...Object.keys(cachedPrefs) ], }, ttl, ttlInterval, @@ -189,6 +190,7 @@ class Cache extends Loki { exportNotes: !!options.exportNotes, useJournalAbbreviation: !!options.useJournalAbbreviation, biblatexAPA: !!options.biblatexAPA, + biblatexChicago: !!options.biblatexChicago, // itemID: Array.isArray(itemID) ? {$in: itemID} : itemID, } const translatorID = byLabel[translatorLabel].translatorID @@ -229,7 +231,7 @@ class Cache extends Loki { return clone(cached) } - store(translator: string, itemID: number, options: { exportNotes?: boolean, useJournalAbbreviation?: boolean, biblatexAPA?: boolean }, prefs: any, entry: any, metadata: any) { + store(translator: string, itemID: number, options: { exportNotes?: boolean, useJournalAbbreviation?: boolean, biblatexAPA?: boolean, biblatexChicago?: boolean }, prefs: any, entry: any, metadata: any) { if (!Preference.cache) return false if (!metadata) metadata = {} @@ -238,6 +240,7 @@ class Cache extends Loki { exportNotes: false, useJournalAbbreviation: false, biblatexAPA: false, + biblatexChicago: false, ...options, } diff --git a/locale/en-US/better-bibtex.ftl b/locale/en-US/better-bibtex.ftl index 10304a5ee8..a704fddfba 100644 --- a/locale/en-US/better-bibtex.ftl +++ b/locale/en-US/better-bibtex.ftl @@ -70,6 +70,7 @@ better-bibtex_export-options_keep-updated = Keep updated better-bibtex_export-options_reminder = Are you sure you don't want the '{ $translator }' format? better-bibtex_export-options_worker = Background export better-bibtex_export-options_biblatexAPA = biblatex-apa +better-bibtex_export-options_biblatexChicago = biblatex-chicago unused_better-bibtex_first-run = .title = Welcome to Better BibTeX for Zotero .label = Welcome to Better BibTeX for Zotero diff --git a/schema/BetterBibTeX JSON.json b/schema/BetterBibTeX JSON.json index 5d0e67bb3c..15bdd9f653 100644 --- a/schema/BetterBibTeX JSON.json +++ b/schema/BetterBibTeX JSON.json @@ -78,6 +78,9 @@ "biblatexAPA": { "type": "boolean" }, + "biblatexChicago": { + "type": "boolean" + }, "exportFileData": { "type": "boolean" }, diff --git a/setup/templates/auto-export-displayOptions.json b/setup/templates/auto-export-displayOptions.json index 6258241368..32b5bffbd6 100644 --- a/setup/templates/auto-export-displayOptions.json +++ b/setup/templates/auto-export-displayOptions.json @@ -1 +1 @@ -["exportNotes", "useJournalAbbreviation", "biblatexAPA"] +["exportNotes", "useJournalAbbreviation", "biblatexAPA", "biblatexChicago"] diff --git a/test/fixtures/export/Exporting item type film merges scriptwriter with other contributors #2802.json b/test/fixtures/export/Exporting item type film merges scriptwriter with other contributors #2802.json index 10d24f0546..1c4ea7893d 100644 --- a/test/fixtures/export/Exporting item type film merges scriptwriter with other contributors #2802.json +++ b/test/fixtures/export/Exporting item type film merges scriptwriter with other contributors #2802.json @@ -6,6 +6,7 @@ "Items": true, "Preferences": true, "exportNotes": true, + "biblatexChicago": true, "worker": true }, "preferences": { @@ -72,4 +73,4 @@ "type": "Drama" } ] -} \ No newline at end of file +} diff --git a/translators/Better BibLaTeX.json b/translators/Better BibLaTeX.json index 97c4a496dd..6272ab9108 100644 --- a/translators/Better BibLaTeX.json +++ b/translators/Better BibLaTeX.json @@ -17,6 +17,7 @@ "exportFileData": false, "useJournalAbbreviation": false, "biblatexAPA": false, + "biblatexChicago": false, "keepUpdated": false, "worker": true }, diff --git a/translators/bibtex/biblatex.ts b/translators/bibtex/biblatex.ts index 467093cfcf..8334cf6831 100644 --- a/translators/bibtex/biblatex.ts +++ b/translators/bibtex/biblatex.ts @@ -4,8 +4,7 @@ import { strToISO } from '../../content/dateparser' import { qualityReport } from '../../gen/biber-tool' import { Entry as BaseEntry, Config } from './entry' - -type CreatorArray = any[] & { type?: string } +import { print } from '../../content/logger' const config: Config = { fieldEncoding: { @@ -127,11 +126,43 @@ const config: Config = { }, } +class CreatorTypeMap { + public type: Record = {} + private registered: Record = {} + private static extension = { + editor: ['', 'a', 'b', 'c'], + name: ['a', 'b', 'c'], + } + + constructor(private hasEditor: boolean) { + } + + register(base: 'editor' | 'name', type: string) { + type = type.toLowerCase() + if (!this.registered[type]) { + for (const postfix of CreatorTypeMap.extension[base]) { + const candidate = `${base}${postfix}` + if (this.hasEditor && candidate === 'editor' && type !== 'editor') continue + if (this.type[candidate]) { + if (postfix !== 'c') continue + print(`squashing ${type} into ${candidate}`) + } + this.type[candidate] = type + this.registered[type] = candidate + break + } + } + + print(`::register(${JSON.stringify({ base, type })} = ${JSON.stringify(this.type)}`) + return this.registered[type] + } +} + class Entry extends BaseEntry { public addCreators() { if (!this.item.creators || !this.item.creators.length) return - const creators: Record = { + const creators: Record = { author: [], with: [], bookauthor: [], @@ -139,25 +170,25 @@ class Entry extends BaseEntry { editor: [], editora: [], editorb: [], + editorc: [], + namea: [], + nameb: [], + namec: [], holder: [], translator: [], // scriptwriter: [], // director: [], } - creators.editora.type = 'collaborator' - creators.editorb.type = 'redactor' + + const creatorType = new CreatorTypeMap(!!this.item.creators.find(cr => cr.creatorType === 'editor')) + const video = ['video', 'movie'].includes(this.entrytype) + if (video) creatorType.register('editor', 'director') for (const creator of this.item.creators) { switch (creator.creatorType) { case 'director': // 365.something - if (['video', 'movie'].includes(this.entrytype)) { - creators.editor.push(creator) - creators.editor.type = 'director' - } - else { - creators.author.push(creator) - } + creators[video ? 'editor' : 'author'].push(creator) break case 'contributor': @@ -165,7 +196,7 @@ class Entry extends BaseEntry { creators.with.push(creator) } else { - creators.editora.push(creator) + creators[creatorType.register('editor', video && this.translation.options.biblatexChicago ? 'none' : 'collaborator')].push(creator) } break @@ -200,32 +231,20 @@ class Entry extends BaseEntry { break case 'seriesEditor': - creators.editorb.push(creator) + creators[creatorType.register('editor', 'redactor')].push(creator) break case 'scriptwriter': // 365.something - creators.editora.push(creator) - if (['video', 'movie'].includes(this.entrytype)) { - creators.editora.type = 'scriptwriter' - } - break - - case 'contributor': - if (['video', 'movie'].includes(this.entrytype)) { - creators.editorb.push(creator) - creators.editorb.type = 'none' - } - else { - creators.editora.push(creator) - } + creators[creatorType.register('editor', video ? 'scriptwriter' : 'collaborator')].push(creator) break default: - creators.editora.push(creator) + creators[creatorType.register('name', creator.creatorType)].push(creator) } } + print(`::types=${JSON.stringify(creatorType.type)}`) for (const [field, value] of Object.entries(creators)) { this.remove(field) this.remove(`${field}type`) @@ -233,7 +252,7 @@ class Entry extends BaseEntry { if (!value.length) continue this.add({ name: field, value, enc: 'creators' }) - if (value.type) this.add({ name: `${field}type`, value: value.type }) + this.add({ name: `${field}type`, value: creatorType.type[field] }) } } } diff --git a/translators/lib/translator.ts b/translators/lib/translator.ts index 293081ab5b..f700a0890d 100644 --- a/translators/lib/translator.ts +++ b/translators/lib/translator.ts @@ -280,6 +280,7 @@ export class Translation { // eslint-disable-line @typescript-eslint/naming-conv dropAttachments?: boolean exportNotes?: boolean biblatexAPA?: boolean + biblatexChicago?: boolean markdown?: boolean exportFileData?: boolean useJournalAbbreviation?: boolean diff --git a/typings/translators.d.ts b/typings/translators.d.ts index 62af60d27f..a754eefed2 100644 --- a/typings/translators.d.ts +++ b/typings/translators.d.ts @@ -85,6 +85,7 @@ export namespace Translators { exportFileData?: boolean useJournalAbbreviation?: boolean biblatexAPA?: boolean + biblatexChicago?: boolean keepUpdated?: boolean worker?: boolean markdown?: boolean From 6af233487c349fb2ebd5616ec49bba7ee781a986 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Mon, 29 Apr 2024 16:17:23 +0200 Subject: [PATCH 101/177] section header --- content/ZoteroItemPane.ts | 4 ++-- locale/en-US/better-bibtex.ftl | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/content/ZoteroItemPane.ts b/content/ZoteroItemPane.ts index dcc7b9aa28..af298b416e 100644 --- a/content/ZoteroItemPane.ts +++ b/content/ZoteroItemPane.ts @@ -50,11 +50,11 @@ export class ZoteroItemPane { paneID: 'betterbibtex-section-citationkey', pluginID: 'better-bibtex@iris-advies.com', header: { - l10nID: 'example-item-pane-header', + l10nID: 'betterbibtex-item-pane-header', icon: `${rootURI}content/skin/citation-key.png`, }, sidenav: { - l10nID: 'example-item-pane-header', + l10nID: 'betterbibtex-item-pane-header', icon: `${rootURI}content/skin/citation-key.png`, }, bodyXHTML: 'Citation Key ', diff --git a/locale/en-US/better-bibtex.ftl b/locale/en-US/better-bibtex.ftl index 10304a5ee8..053b1f8d35 100644 --- a/locale/en-US/better-bibtex.ftl +++ b/locale/en-US/better-bibtex.ftl @@ -70,6 +70,8 @@ better-bibtex_export-options_keep-updated = Keep updated better-bibtex_export-options_reminder = Are you sure you don't want the '{ $translator }' format? better-bibtex_export-options_worker = Background export better-bibtex_export-options_biblatexAPA = biblatex-apa + + unused_better-bibtex_first-run = .title = Welcome to Better BibTeX for Zotero .label = Welcome to Better BibTeX for Zotero @@ -457,6 +459,8 @@ better-bibtex_zotero-pane_show_collection-key = Download Better BibTeX export... better-bibtex_zotero-pane_tag_duplicates = Tag duplicate citation keys better-bibtex_zotero-pane_tex-studio = Push entries to TeXstudio +betterbibtex-item-pane-header = Citation key + unused_better-bibtex_auto-export_too-long_body-eabled = Your { $translator } auto-export to { $path } took { $seconds } seconds. During exports of any kind, the Zotero user interface locks up. unused_better-bibtex_auto-export_too-long_prime-enabled = To minimize the effects of long-running auto-exports, cache priming has been turned on. This will make auto-exports slower, but will shorten the time that Zotero freezes to a minimum. From f0c1a1ae9f90ff6edb3139245f446ec3b122f9ae Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Mon, 29 Apr 2024 16:31:10 +0200 Subject: [PATCH 102/177] update tests --- .../BibLaTeX Patent author handling, type #1060.biblatex | 8 ++------ ...Direct access to Zotero Creators fields #2787.biblatex | 4 ++-- ...f Contributor to WITH #2837-autoexport.before.biblatex | 4 ++-- ...es scriptwriter with other contributors #2802.biblatex | 3 ++- test/fixtures/export/map csl-json variables #293.biblatex | 5 ++--- translators/bibtex/biblatex.ts | 2 +- translators/bibtex/entry.ts | 8 ++++++++ 7 files changed, 19 insertions(+), 15 deletions(-) diff --git a/test/fixtures/export/BibLaTeX Patent author handling, type #1060.biblatex b/test/fixtures/export/BibLaTeX Patent author handling, type #1060.biblatex index b67da5f1b6..7012e86929 100644 --- a/test/fixtures/export/BibLaTeX Patent author handling, type #1060.biblatex +++ b/test/fixtures/export/BibLaTeX Patent author handling, type #1060.biblatex @@ -1,11 +1,10 @@ - @patent{inventorCombinatorialProblemStabilityIssueDate, type = {patent}, title = {A Combinatorial Problem; Stability and Order for Models and Theories in Infinitary Languages}, author = {Inventor, Some}, - editora = {Attorney/Agent, Some and Contributer, Some}, - editoratype = {collaborator}, holder = {{Assignee}}, + namea = {Attorney/Agent, Some and Contributer, Some}, + nameatype = {collaborator}, year = {Issue Date}, number = {Patent Number}, pages = {247--261}, @@ -13,8 +12,6 @@ pubstate = {Legal Status} } % == BibLateX quality report for inventorCombinatorialProblemStabilityIssueDate: -% Unexpected field 'editora' -% Unexpected field 'editoratype' % Unexpected field 'pages' % ? unused Application number ("Application Number") % ? unused Assignee ("Assignee") @@ -40,4 +37,3 @@ % ? unused Assignee ("DaimlerChrysler AG (Stuttgart, 70567, DE) Bayerische Motoren Werke AG (München, 80809, DE) Robert Bosch GmbH (Stuttgart, 70469, DE)") % ? unused Filing date ("2003-12-24") % ? unused Number ("DE10361215") - diff --git a/test/fixtures/export/Direct access to Zotero Creators fields #2787.biblatex b/test/fixtures/export/Direct access to Zotero Creators fields #2787.biblatex index 7692b362fa..a619bf38e4 100644 --- a/test/fixtures/export/Direct access to Zotero Creators fields #2787.biblatex +++ b/test/fixtures/export/Direct access to Zotero Creators fields #2787.biblatex @@ -2,8 +2,8 @@ title = {Theodor W. Adorno: Negative Dialektik}, shorttitle = {Klassiker Auslegen: Negative Dialektik}, editor = {Honneth, Axel and Menke, Christoph}, - editorb = {Höffe, Otfried}, - editorbtype = {redactor}, + editora = {Höffe, Otfried}, + editoratype = {redactor}, date = {2006}, series = {Klassiker Auslegen}, number = {28}, diff --git a/test/fixtures/export/Export of Contributor to WITH #2837-autoexport.before.biblatex b/test/fixtures/export/Export of Contributor to WITH #2837-autoexport.before.biblatex index 1e117492f7..50c519de9d 100644 --- a/test/fixtures/export/Export of Contributor to WITH #2837-autoexport.before.biblatex +++ b/test/fixtures/export/Export of Contributor to WITH #2837-autoexport.before.biblatex @@ -1,7 +1,7 @@ @book{meyersWitheringWorrying2014, title = {Withering Worrying}, author = {Meyers, K.}, - editora = {Long, W. T.}, - editoratype = {collaborator}, + editor = {Long, W. T.}, + editortype = {collaborator}, date = {2014} } diff --git a/test/fixtures/export/Exporting item type film merges scriptwriter with other contributors #2802.biblatex b/test/fixtures/export/Exporting item type film merges scriptwriter with other contributors #2802.biblatex index b0a2168557..2da4cf228d 100644 --- a/test/fixtures/export/Exporting item type film merges scriptwriter with other contributors #2802.biblatex +++ b/test/fixtures/export/Exporting item type film merges scriptwriter with other contributors #2802.biblatex @@ -12,5 +12,6 @@ publisher = {Sixteen Films, Why Not Productions, Wild Bunch}, abstract = {After surviving a heart-attack, a 59-year-old carpenter must fight bureaucratic forces to receive Employment and Support Allowance.}, keywords = {bureaucracy,psychological violence,United Kingdom}, - annotation = {IMDb ID: tt5168192 event-location: United Kingdom, France, Belgium} + annotation = {IMDb ID: tt5168192\\ +event-location: United Kingdom, France, Belgium} } diff --git a/test/fixtures/export/map csl-json variables #293.biblatex b/test/fixtures/export/map csl-json variables #293.biblatex index 9d9e882ff7..f7c7984306 100644 --- a/test/fixtures/export/map csl-json variables #293.biblatex +++ b/test/fixtures/export/map csl-json variables #293.biblatex @@ -1,7 +1,8 @@ - @book{kelsen_democratie_2004, title = {La démocratie. Sa nature, sa valeur}, author = {Kelsen, Hans}, + editor = {Raynaud, Philippe}, + editortype = {collaborator}, translator = {Eisenmann, Charles}, date = {2004}, origdate = {1929}, @@ -31,5 +32,3 @@ origpublisher = {origpublisher}, origtitle = {origtitle} } - - diff --git a/translators/bibtex/biblatex.ts b/translators/bibtex/biblatex.ts index 8334cf6831..7f4daf91b9 100644 --- a/translators/bibtex/biblatex.ts +++ b/translators/bibtex/biblatex.ts @@ -240,7 +240,7 @@ class Entry extends BaseEntry { break default: - creators[creatorType.register('name', creator.creatorType)].push(creator) + creators[creatorType.register('name', 'collaborator')].push(creator) } } diff --git a/translators/bibtex/entry.ts b/translators/bibtex/entry.ts index b543755916..8dddca1dbb 100644 --- a/translators/bibtex/entry.ts +++ b/translators/bibtex/entry.ts @@ -56,11 +56,19 @@ const fieldOrder = [ 'editoratype', 'editorb', 'editorbtype', + 'editorc', + 'editorctype', 'translator', 'translatortype', 'holder', 'holdertype', 'with', + 'namea', + 'nameatype', + 'nameb', + 'namebtype', + 'namec', + 'namectype', 'options', 'date', 'origdate', From 985feffec61b41e7b5c3184b8848d7d98af5c244 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Mon, 29 Apr 2024 16:40:51 +0200 Subject: [PATCH 103/177] test updates --- test/behave | 1 + ...latex @incollection reference type #1691.biblatex | 9 ++------- ...se name to Pinyin in citation key. #2361.biblatex | 4 ++-- ...he item type via the cheater syntax #587.biblatex | 11 ++++------- ... types with no dedicated DOI field #1331.biblatex | 4 ++-- ...up small-caps, superscript, italics #301.biblatex | 5 ++--- translators/bibtex/biblatex.ts | 12 ++++++++++-- 7 files changed, 23 insertions(+), 23 deletions(-) diff --git a/test/behave b/test/behave index f1121726f9..60e479b3e4 100755 --- a/test/behave +++ b/test/behave @@ -120,6 +120,7 @@ if args.this or args.test_this: if args.test_this: args.test = BRANCH.replace('gh-', '') if args.test or args.this or args.nightly or args.tagged: args.slow = True +if args.test: args.stop = False if args.client == 'jurism': print(f"********* JURISM NO LONGER SUPPORTED ***********") diff --git a/test/fixtures/export/Book Title exports to Journaltitle for Biblatex @incollection reference type #1691.biblatex b/test/fixtures/export/Book Title exports to Journaltitle for Biblatex @incollection reference type #1691.biblatex index 9bc6e9f49f..1efd146bf8 100644 --- a/test/fixtures/export/Book Title exports to Journaltitle for Biblatex @incollection reference type #1691.biblatex +++ b/test/fixtures/export/Book Title exports to Journaltitle for Biblatex @incollection reference type #1691.biblatex @@ -1,11 +1,10 @@ - @online{NagyHistorians2008, type = {Billet}, title = {Historians and {{Emotions}}: {{New Theories}}, {{New Questions}}}, shorttitle = {Historians and {{Emotions}}}, author = {Nagy, Piroska}, - editora = {Boquet, Damien}, - editoratype = {collaborator}, + editor = {Boquet, Damien}, + editortype = {collaborator}, date = {2008-10-24}, url = {http://emma.hypotheses.org/147}, urldate = {2017-12-12}, @@ -13,8 +12,6 @@ } % == BibLateX quality report for NagyHistorians2008: % Unexpected field 'type' -% Unexpected field 'editora' -% Unexpected field 'editoratype' % ? Title looks like it was stored in title-case in Zotero @incollection{胡適哲學史1917, @@ -31,5 +28,3 @@ origpublisher = {萬有文庫}, origtitle = {中國哲學史大綱卷上[1919],商務} } - - diff --git a/test/fixtures/export/Convert Chinese name to Pinyin in citation key. #2361.biblatex b/test/fixtures/export/Convert Chinese name to Pinyin in citation key. #2361.biblatex index a52478c1cd..25cb7034f1 100644 --- a/test/fixtures/export/Convert Chinese name to Pinyin in citation key. #2361.biblatex +++ b/test/fixtures/export/Convert Chinese name to Pinyin in citation key. #2361.biblatex @@ -1,8 +1,8 @@ @thesis{weixiao2016, title = {黄土高原同纬度大气降水稳定同位素分析}, author = {魏笑}, - editora = {赵英 and 西北农林科技大学}, - editoratype = {collaborator}, + editor = {赵英 and 西北农林科技大学}, + editortype = {collaborator}, date = {2016-01-01T00:00:00}, abstract = {大气降水中氢氧稳定同位素的含量不高,其变化过程与纬度、海拔、季节变化、温度和降水量等因素都有关系。本次研究以黄土高原为背景,主要选取了甘肃省庆阳市西峰区、甘肃省庆阳市环县、陕西省延安市安塞县、陕西省延安市延长县、宁夏回族自治区中卫市海原县、山西省大同市、山西省介休市7个试验点,对各试验点2015年的大气降水进行采集,分析、测定各试验点大气降水稳定同位素的月平均值,进而得出研究区域大气降水氢氧稳定同位素含量的时空变化特征及其与温度、降水量的响应关系,初步建立了研究区域的局地大气降水线方程,为分析陆地水循环水汽的来源,水汽的转移、运动方式以及后续黄土高原地区地下水补给来源等相关试验提供基础数据和理论依据。研究结果表明:与全球大气降水线方程相比,研究区域大气降水线方程斜率和截距均较低。斜率和截距越小,说明降水时存在的蒸发作用越强烈,表明雨滴在降水过程中受云下二次蒸发而发生强烈的同位素动力分馏效应,使降水线的斜率和截距变小。7个试验点具有不同的时空变化特征:从时间变化上看,海原县和大同市大气降水δ\textasciitilde O的值夏季富集,冬季贫化,环县、西峰大气降水δ\textasciitilde (18)O的值季节变化不明显,安塞县、延长县、介休市大气降水δ\textasciitilde (18)O的值则基本表现为冬季富集,夏季贫化;在空间变化上,则基本表现为各试验点δ\textasciitilde (18)O值自西向东呈减小趋势。本次研究各试验点大气降水δ\textasciitilde (18)O主要受温度和降水量的影响,各试验点具有不同的特点:海原县主要受温度效应影响,降水中δ\textasciitilde (18)O值较高,而其余各点由于受较强的季风活动所引起的降水量效应的影响,导致其大气降水中δ\textasciitilde (18)O的值相对较低,尤其是山西省大同市试验点,季风活动引起的降水量效应以及较寒冷的气候使得其δ\textasciitilde (18)O的值明显低于其它试验点。}, keywords = {同纬度,大气降水,稳定同位素} diff --git a/test/fixtures/export/Setting the item type via the cheater syntax #587.biblatex b/test/fixtures/export/Setting the item type via the cheater syntax #587.biblatex index 973452d59d..3ec13227f4 100644 --- a/test/fixtures/export/Setting the item type via the cheater syntax #587.biblatex +++ b/test/fixtures/export/Setting the item type via the cheater syntax #587.biblatex @@ -1,4 +1,3 @@ - @booklet{clark_mesopotamia_1957, title = {Mesopotamia: Between Two Rivers}, author = {Clark, Hazel V.}, @@ -11,8 +10,8 @@ @review{kamp_deconstructing_2006, title = {Deconstructing Dinner}, author = {Kamp, David}, - editora = {Pollan, Michael}, - editoratype = {collaborator}, + namea = {Pollan, Michael}, + nameatype = {collaborator}, date = {2006-04-23}, url = {http://www.nytimes.com/2006/04/23/books/review/23kamp.html.}, abstract = {Example from CMoS, 16e, 14.125}, @@ -41,8 +40,8 @@ @review{ratliff_mystery_1999, title = {The Mystery of Samba: {{Popular}} Music and National Identity in {{Brazil}}}, author = {Ratliff, Ben}, - editora = {{Hermano Vianna}}, - editoratype = {collaborator}, + namea = {{Hermano Vianna}}, + nameatype = {collaborator}, date = {1999-04}, journaltitle = {Lingua Franca}, volume = {9}, @@ -57,5 +56,3 @@ Original annotation: \par Example from CMoS, 16e, 14.125} } - - diff --git a/test/fixtures/export/URL-DOI exclusive export broken for item types with no dedicated DOI field #1331.biblatex b/test/fixtures/export/URL-DOI exclusive export broken for item types with no dedicated DOI field #1331.biblatex index 7782f7cd1e..4be3587baa 100644 --- a/test/fixtures/export/URL-DOI exclusive export broken for item types with no dedicated DOI field #1331.biblatex +++ b/test/fixtures/export/URL-DOI exclusive export broken for item types with no dedicated DOI field #1331.biblatex @@ -1,8 +1,8 @@ @book{Gentleman2005, title = {Bioinformatics and {{Computational Biology Solutions Using R}} and {{Bioconductor}}}, editor = {Gentleman, Robert and Carey, Vincent J. and Huber, Wolfgang and Irizarry, Rafael A. and Dudoit, Sandrine}, - editorb = {Wong, Wing and Gail, M. and Krickeberg, K. and Tsiatis, A. and Samet, J.}, - editorbtype = {redactor}, + editora = {Wong, Wing and Gail, M. and Krickeberg, K. and Tsiatis, A. and Samet, J.}, + editoratype = {redactor}, date = {2005}, series = {Statistics for {{Biology}} and {{Health}}}, publisher = {Springer New York}, diff --git a/test/fixtures/export/markup small-caps, superscript, italics #301.biblatex b/test/fixtures/export/markup small-caps, superscript, italics #301.biblatex index 43007f57e7..31a2470632 100644 --- a/test/fixtures/export/markup small-caps, superscript, italics #301.biblatex +++ b/test/fixtures/export/markup small-caps, superscript, italics #301.biblatex @@ -1,8 +1,9 @@ - @incollection{burgorgue-larsen_interventions_2011, title = {Les interventions \emph{éclairées} devant la Cour européenne des droits de l'homme ou le rôle stratégique des \emph{amici curiae}}, booktitle = {La conscience des droits. Mélanges en l'honneur de Jean-Paul Costa}, author = {Burgorgue-Larsen, Laurence}, + namea = {Titiun, Patrick and Dumaine, Patricia}, + nameatype = {collaborator}, date = {2011}, pages = {68--82}, publisher = {Dalloz}, @@ -26,5 +27,3 @@ langid = {french}, volumes = {355 p.} } - - diff --git a/translators/bibtex/biblatex.ts b/translators/bibtex/biblatex.ts index 7f4daf91b9..5666da2551 100644 --- a/translators/bibtex/biblatex.ts +++ b/translators/bibtex/biblatex.ts @@ -195,8 +195,11 @@ class Entry extends BaseEntry { if (this.translation.options.biblatexAPA) { creators.with.push(creator) } + else if (video && this.translation.options.biblatexChicago) { + creators[creatorType.register('editor', 'none')].push(creator) + } else { - creators[creatorType.register('editor', video && this.translation.options.biblatexChicago ? 'none' : 'collaborator')].push(creator) + creators[creatorType.register('name', 'collaborator')].push(creator) } break @@ -236,7 +239,12 @@ class Entry extends BaseEntry { case 'scriptwriter': // 365.something - creators[creatorType.register('editor', video ? 'scriptwriter' : 'collaborator')].push(creator) + if (video) { + creators[creatorType.register('editor', 'scriptwriter')].push(creator) + } + else { + creators[creatorType.register('name', 'collaborator')].push(creator) + } break default: From edc5e5ddd625d395a15f6811b5d8038055a93f53 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Mon, 29 Apr 2024 16:42:55 +0200 Subject: [PATCH 104/177] New Crowdin updates (#2850) * New translations better-bibtex.ftl (French) * New translations better-bibtex.ftl (German) * New translations better-bibtex.ftl (Italian) * New translations better-bibtex.ftl (Chinese Simplified) * New translations better-bibtex.ftl (Portuguese, Brazilian) --- locale/de-DE/better-bibtex.ftl | 1 + locale/fr-FR/better-bibtex.ftl | 1 + locale/it-IT/better-bibtex.ftl | 1 + locale/pt-BR/better-bibtex.ftl | 1 + locale/zh-CN/better-bibtex.ftl | 1 + 5 files changed, 5 insertions(+) diff --git a/locale/de-DE/better-bibtex.ftl b/locale/de-DE/better-bibtex.ftl index ca988cfb97..1067ae1bf7 100644 --- a/locale/de-DE/better-bibtex.ftl +++ b/locale/de-DE/better-bibtex.ftl @@ -362,6 +362,7 @@ better-bibtex_zotero-pane_sentence-case = BBT Sentence-case better-bibtex_zotero-pane_show_collection-key = Download Better-BibTeX-Export... better-bibtex_zotero-pane_tag_duplicates = Markiere doppelte Zitierschlüssel better-bibtex_zotero-pane_tex-studio = Einträge an TeXstudio senden +betterbibtex-item-pane-header = Citation key unused_better-bibtex_auto-export_too-long_body-eabled = Ihr { $translator }-Auto-Export nach { $path } dauerte { $seconds } Sekunden. Während Exporten jeglicher Art wird die Zotero-Benutzeroberfläche gesperrt. unused_better-bibtex_auto-export_too-long_prime-enabled = Um die Auswirkungen von lang laufenden Auto-Exporten zu minimieren, wurde das Cache-Priming aktiviert. Dies macht den Auto-Export langsamer, verkürzt aber die Zeit, die Zotero einfriert, auf ein Minimum. unused_better-bibtex_auto-export_too-long_sorry = Sie haben bereits Cache-Priming eingeschaltet und den Auto-Export auf "Wenn unbeschäftigt" gesetzt. Ohne Änderungen in der Architektur von Zotero (https://u.nu/27e9) kann nichts mehr getan werden. diff --git a/locale/fr-FR/better-bibtex.ftl b/locale/fr-FR/better-bibtex.ftl index 1b1c1b20be..1e68e421d4 100644 --- a/locale/fr-FR/better-bibtex.ftl +++ b/locale/fr-FR/better-bibtex.ftl @@ -363,6 +363,7 @@ better-bibtex_zotero-pane_sentence-case = BBT Casse de la phrase better-bibtex_zotero-pane_show_collection-key = Télécharger l'export de Better BibTeX... better-bibtex_zotero-pane_tag_duplicates = Tagguer les clés de citation doublons better-bibtex_zotero-pane_tex-studio = Envoyer les citations vers TeXstudio +betterbibtex-item-pane-header = Citation key unused_better-bibtex_auto-export_too-long_body-eabled = Votre exportation automatique { $translator } à { $path } a pris { $seconds } secondes. Pendant les exportations de quelque type que ce soit, l''interface utilisateur de Zotero est verrouillée. unused_better-bibtex_auto-export_too-long_prime-enabled = Pour minimiser les effets des exportations automatiques durant (trop) longtemps, la mise en place du cache a été activée. Cela rendra les exportations automatiques plus lentes, mais réduira au maximum le temps pendant lequel Zotero est inutilisable. unused_better-bibtex_auto-export_too-long_sorry = Vous avez déjà activé la mise en place du cache, et l'exportation automatique est activée. Rien de plus ne peut être fait sans un changement de l'architecture de Zotero (https://u.nu/27e9). diff --git a/locale/it-IT/better-bibtex.ftl b/locale/it-IT/better-bibtex.ftl index ca1d2e2339..f3136d34fc 100644 --- a/locale/it-IT/better-bibtex.ftl +++ b/locale/it-IT/better-bibtex.ftl @@ -362,6 +362,7 @@ better-bibtex_zotero-pane_sentence-case = BBT Tutte le Iniziali Maiuscole better-bibtex_zotero-pane_show_collection-key = Scarica esportazione di Better BibTeX... better-bibtex_zotero-pane_tag_duplicates = Tagga chiavi di citazione duplicate better-bibtex_zotero-pane_tex-studio = Invia voci a TeXstudio +betterbibtex-item-pane-header = Citation key unused_better-bibtex_auto-export_too-long_body-eabled = La tua esportazione automatica di { $translator } in { $path } ha impiegato { $seconds } secondi. Durante le esportazioni, l'interfaccia di Zotero non risponde. unused_better-bibtex_auto-export_too-long_prime-enabled = Per ridurre al minimo i disagi dovuti a esportazioni automatiche di lunga durata, è stato attivato il pre-caricamento della cache. Ciò renderà le esportazioni più lente, ma ridurrà al minimo il blocco di Zotero. unused_better-bibtex_auto-export_too-long_sorry = Il pre-caricamento della cache è già attivo, e le esportazioni automatiche impostate durante i periodi di inattività. Ulteriori miglioramenti non sono possibili senza un cambio di architettura in Zotero (https://u.nu/27e9). diff --git a/locale/pt-BR/better-bibtex.ftl b/locale/pt-BR/better-bibtex.ftl index 375e19cb6d..e3f2d30b17 100644 --- a/locale/pt-BR/better-bibtex.ftl +++ b/locale/pt-BR/better-bibtex.ftl @@ -362,6 +362,7 @@ better-bibtex_zotero-pane_sentence-case = BBT Sentence-case better-bibtex_zotero-pane_show_collection-key = Download Better BibTeX export... better-bibtex_zotero-pane_tag_duplicates = Etiquetar chaves de citação duplicadas better-bibtex_zotero-pane_tex-studio = Push entries to TeXstudio +betterbibtex-item-pane-header = Citation key unused_better-bibtex_auto-export_too-long_body-eabled = A exportação automática { $translator } para { $path } demorou { $seconds } segundos. Durante qualquer tipo de exportação, a interface de usuário do Zotero permanece travada. unused_better-bibtex_auto-export_too-long_prime-enabled = Para minimizar os efeitos de exportações automáticas demoradas, o pré-processamento do cache foi ativado. Isso faz a exportação automática mais lenta, mas reduz o tempo que Zotero fica congelado ao mínimo. unused_better-bibtex_auto-export_too-long_sorry = Você já ativou o pré-processamento de cache e definiu as exportações automáticas como ociosas. Nada mais pode ser feito sem mudanças estruturais no Zotero (https://u.nu/27e9). diff --git a/locale/zh-CN/better-bibtex.ftl b/locale/zh-CN/better-bibtex.ftl index 8af368a029..eb05e9fe9a 100644 --- a/locale/zh-CN/better-bibtex.ftl +++ b/locale/zh-CN/better-bibtex.ftl @@ -363,6 +363,7 @@ better-bibtex_zotero-pane_sentence-case = BBT 句首大写 better-bibtex_zotero-pane_show_collection-key = 下载 Better BibTeX 导出… better-bibtex_zotero-pane_tag_duplicates = 标记重复的引用 better-bibtex_zotero-pane_tex-studio = 推送条目至 TeXstudio +betterbibtex-item-pane-header = Citation key unused_better-bibtex_auto-export_too-long_body-eabled = 您的 { $translator } 自动导出至 { $path } 用时 { $seconds } 秒。在任何导出过程中,Zotero 用户界面均将无响应。 unused_better-bibtex_auto-export_too-long_prime-enabled = 为了最大程度地减少高耗时自动导出的影响,缓存预处理已启用。 这将使自动导出减慢,但也将缩减 Zotero 无响应的时间至最短。 unused_better-bibtex_auto-export_too-long_sorry = 您已经启用了缓存预处理,并将自动导出设置为空闲时运行。进一步的优化要求重构 Zotero 架构(https://u.nu/27e9)。 From 9ee8d0905ea0a2857d8bb740a1546ec2cad1eaf8 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Mon, 29 Apr 2024 16:47:44 +0200 Subject: [PATCH 105/177] fix for #2802 --- submodules/zotero | 2 +- test/features/export.feature | 1 + ...ter with other contributors #2802.biblatex | 16 ++++ ...twriter with other contributors #2802.json | 75 +++++++++++++++++++ translators/bibtex/biblatex.ts | 10 +++ 5 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 test/fixtures/export/Exporting item type film merges scriptwriter with other contributors #2802.biblatex create mode 100644 test/fixtures/export/Exporting item type film merges scriptwriter with other contributors #2802.json diff --git a/submodules/zotero b/submodules/zotero index 54382475be..1626ecf48e 160000 --- a/submodules/zotero +++ b/submodules/zotero @@ -1 +1 @@ -Subproject commit 54382475be7f53434308218eb9c97a1a62794d4f +Subproject commit 1626ecf48e160503c58eae074f589470800171b0 diff --git a/test/features/export.feature b/test/features/export.feature index 6d48453543..43de5ef510 100644 --- a/test/features/export.feature +++ b/test/features/export.feature @@ -17,6 +17,7 @@ Feature: Export | Export of Contributor to WITH #2837 | 1 | | Better BibTeX export from Zotero missing Extra fields eg issued #2816 | 1 | | Support for Chinese Quotation Marks When Exporting with Export unicode as plaintext latex commands #2810 | 1 | + | Exporting item type film merges scriptwriter with other contributors #2802 | 1 | | en-dash and i-circumflex translation error #2796 | 3 | | Exporting # in hashtags. #2795 | 1 | | My citation key formula suddenly includes editors for book sections even when there is a declared author #2794 | 2 | diff --git a/test/fixtures/export/Exporting item type film merges scriptwriter with other contributors #2802.biblatex b/test/fixtures/export/Exporting item type film merges scriptwriter with other contributors #2802.biblatex new file mode 100644 index 0000000000..b0a2168557 --- /dev/null +++ b/test/fixtures/export/Exporting item type film merges scriptwriter with other contributors #2802.biblatex @@ -0,0 +1,16 @@ +@video{Loach:DanielBlake2017, + type = {Drama}, + entrysubtype = {film}, + title = {I, {{Daniel Blake}}}, + editor = {Loach, Ken}, + editortype = {director}, + editora = {Laverty, Paul}, + editoratype = {scriptwriter}, + editorb = {Johns, Dave and Squires, Hayley and Percy, Sharon}, + editorbtype = {none}, + date = {2017-06-09}, + publisher = {Sixteen Films, Why Not Productions, Wild Bunch}, + abstract = {After surviving a heart-attack, a 59-year-old carpenter must fight bureaucratic forces to receive Employment and Support Allowance.}, + keywords = {bureaucracy,psychological violence,United Kingdom}, + annotation = {IMDb ID: tt5168192 event-location: United Kingdom, France, Belgium} +} diff --git a/test/fixtures/export/Exporting item type film merges scriptwriter with other contributors #2802.json b/test/fixtures/export/Exporting item type film merges scriptwriter with other contributors #2802.json new file mode 100644 index 0000000000..10d24f0546 --- /dev/null +++ b/test/fixtures/export/Exporting item type film merges scriptwriter with other contributors #2802.json @@ -0,0 +1,75 @@ +{ + "config": { + "id": "36a3b0b5-bad0-4a04-b79b-441c7cef77db", + "label": "BetterBibTeX JSON", + "options": { + "Items": true, + "Preferences": true, + "exportNotes": true, + "worker": true + }, + "preferences": { + "autoExport": "idle", + "citeCommand": "autocite", + "citekeyFormat": "auth + ':' + shorttitle(3,3) + year" + } + }, + "items": [ + { + "abstractNote": "After surviving a heart-attack, a 59-year-old carpenter must fight bureaucratic forces to receive Employment and Support Allowance.", + "citationKey": "Loach:DanielBlake2017", + "creators": [ + { + "creatorType": "director", + "firstName": "Ken", + "lastName": "Loach" + }, + { + "creatorType": "scriptwriter", + "firstName": "Paul", + "lastName": "Laverty" + }, + { + "creatorType": "contributor", + "firstName": "Dave", + "lastName": "Johns" + }, + { + "creatorType": "contributor", + "firstName": "Hayley", + "lastName": "Squires" + }, + { + "creatorType": "contributor", + "firstName": "Sharon", + "lastName": "Percy" + } + ], + "date": "2017-06-09", + "extra": [ + "IMDb ID: tt5168192", + "event-location: United Kingdom, France, Belgium" + ], + "itemID": 1, + "itemType": "film", + "libraryCatalog": "IMDb", + "publisher": "Sixteen Films, Why Not Productions, Wild Bunch", + "runningTime": "1h40m", + "tags": [ + { + "tag": "bureaucracy", + "type": 1 + }, + { + "tag": "psychological violence", + "type": 1 + }, + { + "tag": "United Kingdom" + } + ], + "title": "I, Daniel Blake", + "type": "Drama" + } + ] +} \ No newline at end of file diff --git a/translators/bibtex/biblatex.ts b/translators/bibtex/biblatex.ts index ac57021cb0..467093cfcf 100644 --- a/translators/bibtex/biblatex.ts +++ b/translators/bibtex/biblatex.ts @@ -211,6 +211,16 @@ class Entry extends BaseEntry { } break + case 'contributor': + if (['video', 'movie'].includes(this.entrytype)) { + creators.editorb.push(creator) + creators.editorb.type = 'none' + } + else { + creators.editora.push(creator) + } + break + default: creators.editora.push(creator) } From 3c45b39597ed16deda964075bdc90917ac8b882d Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Mon, 29 Apr 2024 16:48:21 +0200 Subject: [PATCH 106/177] biblatex option --- content/ExportOptions.ts | 17 +++- content/Preferences.ts | 11 ++- content/Preferences/autoexport.pug | 6 ++ content/auto-export.ts | 2 + content/better-bibtex.ts | 1 + content/db/cache.ts | 9 ++- locale/en-US/better-bibtex.ftl | 2 +- schema/BetterBibTeX JSON.json | 3 + .../templates/auto-export-displayOptions.json | 2 +- ...twriter with other contributors #2802.json | 3 +- translators/Better BibLaTeX.json | 1 + translators/bibtex/biblatex.ts | 79 ++++++++++++------- translators/lib/translator.ts | 1 + typings/translators.d.ts | 1 + 14 files changed, 100 insertions(+), 38 deletions(-) diff --git a/content/ExportOptions.ts b/content/ExportOptions.ts index 417de4fe50..b4a36708cc 100644 --- a/content/ExportOptions.ts +++ b/content/ExportOptions.ts @@ -95,7 +95,8 @@ export class ExportOptions { break } - for (const node of [...doc.querySelectorAll('#export-option-exportFileData, #export-option-worker, #export-option-keepUpdated')] as HTMLInputElement[]) { + const ids = ['exportFileData', 'worker', 'keepUpdated', 'biblatexAPA', 'biblatexChicago'].map(id => `#export-option-${id}`).join(', ') + for (const node of [...doc.querySelectorAll(ids)] as HTMLInputElement[]) { if (node.classList.contains('better-bibex-export-options')) continue node.classList.add('better-bibex-export-options') node.addEventListener('command', this.mutex.bind(this)) @@ -108,6 +109,12 @@ export class ExportOptions { case 'export-option-worker': node.setAttribute('label', l10n.localize('better-bibtex_export-options_worker')) break + case 'export-option-biblatexAPA': + node.setAttribute('label', l10n.localize('better-bibtex_export-options_biblatexAPA')) + break + case 'export-option-biblatexChicago': + node.setAttribute('label', l10n.localize('better-bibtex_export-options_biblatexChicago')) + break } } @@ -126,6 +133,8 @@ export class ExportOptions { const exportFileData = doc.getElementById('export-option-exportFileData') as XUL.Checkbox const keepUpdated = doc.getElementById('export-option-keepUpdated') as XUL.Checkbox const worker = doc.getElementById('export-option-worker') as XUL.Checkbox + const biblatexAPA = doc.getElementById('export-option-biblatexAPA') as XUL.Checkbox + const biblatexChicago = doc.getElementById('export-option-biblatexChicago') as XUL.Checkbox if (!exportFileData || !keepUpdated) return null @@ -148,6 +157,12 @@ export class ExportOptions { worker.checked = true } break + case biblatexAPA.id: + if (biblatexAPA.checked) biblatexChicago.checked = false + break + case biblatexChicago.id: + if (biblatexChicago.checked) biblatexAPA.checked = false + break } worker.disabled = keepUpdated.checked diff --git a/content/Preferences.ts b/content/Preferences.ts index e122edae66..0ecb583e70 100644 --- a/content/Preferences.ts +++ b/content/Preferences.ts @@ -205,6 +205,7 @@ class AutoExportPane { case 'biblatexExtendedNameFormat': case 'recursive': case 'biblatexAPA': + case 'biblatexChicago': (node as unknown as XUL.Checkbox).checked = selected[field] break @@ -280,6 +281,7 @@ class AutoExportPane { Cache.getCollection(Translators.byId[ae.translatorID].label).removeDataOnly() let value: number | boolean | string + let disable: 'biblatexChicago' | 'biblatexAPA' = null switch (field) { case 'exportNotes': @@ -290,8 +292,14 @@ class AutoExportPane { case 'biblatexExtendedNameFormat': case 'recursive': case 'biblatexAPA': - log.debug('edit autoexport:', field, node.checked) + case 'biblatexChicago': value = node.checked + if (node.checked && field === 'biblatexAPA') { + disable = 'biblatexChicago' + } + else if (node.checked && field === 'biblatexChicago') { + disable = 'biblatexAPA' + } break case 'DOIandURL': @@ -304,6 +312,7 @@ class AutoExportPane { log.error('edit autoexport: unexpected field', field) } await AutoExport.edit(path, field, value) + if (disable) await AutoExport.edit(path, disable, false) log.debug('edit autoexport: after', await AutoExport.get(path)) await this.refresh() } diff --git a/content/Preferences/autoexport.pug b/content/Preferences/autoexport.pug index f7021f618e..2813e54bb9 100644 --- a/content/Preferences/autoexport.pug +++ b/content/Preferences/autoexport.pug @@ -86,6 +86,12 @@ html:div#bbt-prefs-auto-exports(class='bbt-prefs-2col') label='&better-bibtex_preferences_auto-export_fields_biblatexAPA.label;' oncommand='Zotero.BetterBibTeX.PrefPane.autoexport.edit(this)' ) + checkbox.bbt-autoexport-options.bbt-autoexport-BetterBibLaTeX( + class='bbt-prefs-2col-span' + data-ae-field='biblatexChicago' + label='&better-bibtex_preferences_auto-export_fields_biblatexChicago.label;' + oncommand='Zotero.BetterBibTeX.PrefPane.autoexport.edit(this)' + ) // all checkbox( diff --git a/content/auto-export.ts b/content/auto-export.ts index 54a4358bd8..a1dc0fda35 100644 --- a/content/auto-export.ts +++ b/content/auto-export.ts @@ -326,6 +326,7 @@ const queue = new class TaskQueue { exportNotes: ae.exportNotes, useJournalAbbreviation: ae.useJournalAbbreviation, biblatexAPA: ae.biblatexAPA || false, + biblatexChicago: ae.biblatexChicago || false, } const jobs: ExportJob[] = [{ @@ -414,6 +415,7 @@ type Job = { DOIandURL?: boolean bibtexURL?: boolean biblatexAPA?: boolean + biblatexChicago?: boolean } type JobSetting = keyof Job diff --git a/content/better-bibtex.ts b/content/better-bibtex.ts index de541e56ff..c6879272f8 100644 --- a/content/better-bibtex.ts +++ b/content/better-bibtex.ts @@ -494,6 +494,7 @@ $patch$(Zotero.Translate.Export.prototype, 'translate', original => function Zot translatorID, exportNotes: displayOptions.exportNotes, biblatexAPA: displayOptions.biblatexAPA, + biblatexChicago: displayOptions.biblatexChicago, useJournalAbbreviation: displayOptions.useJournalAbbreviation, }) } diff --git a/content/db/cache.ts b/content/db/cache.ts index 6988bd1206..85473eaba8 100644 --- a/content/db/cache.ts +++ b/content/db/cache.ts @@ -92,7 +92,7 @@ class Cache extends Loki { coll = this.schemaCollection(header.label, { logging: false, - indices: [ 'itemID', 'exportNotes', 'biblatexAPA', 'useJournalAbbreviation', ...Object.keys(cachedPrefs) ], + indices: [ 'itemID', 'exportNotes', 'biblatexAPA', 'biblatexChicago', 'useJournalAbbreviation', ...Object.keys(cachedPrefs) ], schema: { type: 'object', additionalProperties: false, @@ -104,6 +104,7 @@ class Cache extends Loki { exportNotes: { type: 'boolean' }, useJournalAbbreviation: { type: 'boolean' }, biblatexAPA: { type: 'boolean' }, + biblatexChicago: { type: 'boolean' }, // preferences ...cachedPrefs, @@ -115,7 +116,7 @@ class Cache extends Loki { meta: { type: 'object' }, $loki: { type: 'integer' }, }, - required: [ 'itemID', 'entry', 'biblatexAPA', 'exportNotes', 'useJournalAbbreviation', ...Object.keys(cachedPrefs) ], + required: [ 'itemID', 'entry', 'biblatexAPA', 'biblatexChicago', 'exportNotes', 'useJournalAbbreviation', ...Object.keys(cachedPrefs) ], }, ttl, ttlInterval, @@ -189,6 +190,7 @@ class Cache extends Loki { exportNotes: !!options.exportNotes, useJournalAbbreviation: !!options.useJournalAbbreviation, biblatexAPA: !!options.biblatexAPA, + biblatexChicago: !!options.biblatexChicago, // itemID: Array.isArray(itemID) ? {$in: itemID} : itemID, } const translatorID = byLabel[translatorLabel].translatorID @@ -229,7 +231,7 @@ class Cache extends Loki { return clone(cached) } - store(translator: string, itemID: number, options: { exportNotes?: boolean, useJournalAbbreviation?: boolean, biblatexAPA?: boolean }, prefs: any, entry: any, metadata: any) { + store(translator: string, itemID: number, options: { exportNotes?: boolean, useJournalAbbreviation?: boolean, biblatexAPA?: boolean, biblatexChicago?: boolean }, prefs: any, entry: any, metadata: any) { if (!Preference.cache) return false if (!metadata) metadata = {} @@ -238,6 +240,7 @@ class Cache extends Loki { exportNotes: false, useJournalAbbreviation: false, biblatexAPA: false, + biblatexChicago: false, ...options, } diff --git a/locale/en-US/better-bibtex.ftl b/locale/en-US/better-bibtex.ftl index 053b1f8d35..fd88083c66 100644 --- a/locale/en-US/better-bibtex.ftl +++ b/locale/en-US/better-bibtex.ftl @@ -70,7 +70,7 @@ better-bibtex_export-options_keep-updated = Keep updated better-bibtex_export-options_reminder = Are you sure you don't want the '{ $translator }' format? better-bibtex_export-options_worker = Background export better-bibtex_export-options_biblatexAPA = biblatex-apa - +better-bibtex_export-options_biblatexChicago = biblatex-chicago unused_better-bibtex_first-run = .title = Welcome to Better BibTeX for Zotero diff --git a/schema/BetterBibTeX JSON.json b/schema/BetterBibTeX JSON.json index 5d0e67bb3c..15bdd9f653 100644 --- a/schema/BetterBibTeX JSON.json +++ b/schema/BetterBibTeX JSON.json @@ -78,6 +78,9 @@ "biblatexAPA": { "type": "boolean" }, + "biblatexChicago": { + "type": "boolean" + }, "exportFileData": { "type": "boolean" }, diff --git a/setup/templates/auto-export-displayOptions.json b/setup/templates/auto-export-displayOptions.json index 6258241368..32b5bffbd6 100644 --- a/setup/templates/auto-export-displayOptions.json +++ b/setup/templates/auto-export-displayOptions.json @@ -1 +1 @@ -["exportNotes", "useJournalAbbreviation", "biblatexAPA"] +["exportNotes", "useJournalAbbreviation", "biblatexAPA", "biblatexChicago"] diff --git a/test/fixtures/export/Exporting item type film merges scriptwriter with other contributors #2802.json b/test/fixtures/export/Exporting item type film merges scriptwriter with other contributors #2802.json index 10d24f0546..1c4ea7893d 100644 --- a/test/fixtures/export/Exporting item type film merges scriptwriter with other contributors #2802.json +++ b/test/fixtures/export/Exporting item type film merges scriptwriter with other contributors #2802.json @@ -6,6 +6,7 @@ "Items": true, "Preferences": true, "exportNotes": true, + "biblatexChicago": true, "worker": true }, "preferences": { @@ -72,4 +73,4 @@ "type": "Drama" } ] -} \ No newline at end of file +} diff --git a/translators/Better BibLaTeX.json b/translators/Better BibLaTeX.json index 97c4a496dd..6272ab9108 100644 --- a/translators/Better BibLaTeX.json +++ b/translators/Better BibLaTeX.json @@ -17,6 +17,7 @@ "exportFileData": false, "useJournalAbbreviation": false, "biblatexAPA": false, + "biblatexChicago": false, "keepUpdated": false, "worker": true }, diff --git a/translators/bibtex/biblatex.ts b/translators/bibtex/biblatex.ts index 467093cfcf..8334cf6831 100644 --- a/translators/bibtex/biblatex.ts +++ b/translators/bibtex/biblatex.ts @@ -4,8 +4,7 @@ import { strToISO } from '../../content/dateparser' import { qualityReport } from '../../gen/biber-tool' import { Entry as BaseEntry, Config } from './entry' - -type CreatorArray = any[] & { type?: string } +import { print } from '../../content/logger' const config: Config = { fieldEncoding: { @@ -127,11 +126,43 @@ const config: Config = { }, } +class CreatorTypeMap { + public type: Record = {} + private registered: Record = {} + private static extension = { + editor: ['', 'a', 'b', 'c'], + name: ['a', 'b', 'c'], + } + + constructor(private hasEditor: boolean) { + } + + register(base: 'editor' | 'name', type: string) { + type = type.toLowerCase() + if (!this.registered[type]) { + for (const postfix of CreatorTypeMap.extension[base]) { + const candidate = `${base}${postfix}` + if (this.hasEditor && candidate === 'editor' && type !== 'editor') continue + if (this.type[candidate]) { + if (postfix !== 'c') continue + print(`squashing ${type} into ${candidate}`) + } + this.type[candidate] = type + this.registered[type] = candidate + break + } + } + + print(`::register(${JSON.stringify({ base, type })} = ${JSON.stringify(this.type)}`) + return this.registered[type] + } +} + class Entry extends BaseEntry { public addCreators() { if (!this.item.creators || !this.item.creators.length) return - const creators: Record = { + const creators: Record = { author: [], with: [], bookauthor: [], @@ -139,25 +170,25 @@ class Entry extends BaseEntry { editor: [], editora: [], editorb: [], + editorc: [], + namea: [], + nameb: [], + namec: [], holder: [], translator: [], // scriptwriter: [], // director: [], } - creators.editora.type = 'collaborator' - creators.editorb.type = 'redactor' + + const creatorType = new CreatorTypeMap(!!this.item.creators.find(cr => cr.creatorType === 'editor')) + const video = ['video', 'movie'].includes(this.entrytype) + if (video) creatorType.register('editor', 'director') for (const creator of this.item.creators) { switch (creator.creatorType) { case 'director': // 365.something - if (['video', 'movie'].includes(this.entrytype)) { - creators.editor.push(creator) - creators.editor.type = 'director' - } - else { - creators.author.push(creator) - } + creators[video ? 'editor' : 'author'].push(creator) break case 'contributor': @@ -165,7 +196,7 @@ class Entry extends BaseEntry { creators.with.push(creator) } else { - creators.editora.push(creator) + creators[creatorType.register('editor', video && this.translation.options.biblatexChicago ? 'none' : 'collaborator')].push(creator) } break @@ -200,32 +231,20 @@ class Entry extends BaseEntry { break case 'seriesEditor': - creators.editorb.push(creator) + creators[creatorType.register('editor', 'redactor')].push(creator) break case 'scriptwriter': // 365.something - creators.editora.push(creator) - if (['video', 'movie'].includes(this.entrytype)) { - creators.editora.type = 'scriptwriter' - } - break - - case 'contributor': - if (['video', 'movie'].includes(this.entrytype)) { - creators.editorb.push(creator) - creators.editorb.type = 'none' - } - else { - creators.editora.push(creator) - } + creators[creatorType.register('editor', video ? 'scriptwriter' : 'collaborator')].push(creator) break default: - creators.editora.push(creator) + creators[creatorType.register('name', creator.creatorType)].push(creator) } } + print(`::types=${JSON.stringify(creatorType.type)}`) for (const [field, value] of Object.entries(creators)) { this.remove(field) this.remove(`${field}type`) @@ -233,7 +252,7 @@ class Entry extends BaseEntry { if (!value.length) continue this.add({ name: field, value, enc: 'creators' }) - if (value.type) this.add({ name: `${field}type`, value: value.type }) + this.add({ name: `${field}type`, value: creatorType.type[field] }) } } } diff --git a/translators/lib/translator.ts b/translators/lib/translator.ts index 293081ab5b..f700a0890d 100644 --- a/translators/lib/translator.ts +++ b/translators/lib/translator.ts @@ -280,6 +280,7 @@ export class Translation { // eslint-disable-line @typescript-eslint/naming-conv dropAttachments?: boolean exportNotes?: boolean biblatexAPA?: boolean + biblatexChicago?: boolean markdown?: boolean exportFileData?: boolean useJournalAbbreviation?: boolean diff --git a/typings/translators.d.ts b/typings/translators.d.ts index 62af60d27f..a754eefed2 100644 --- a/typings/translators.d.ts +++ b/typings/translators.d.ts @@ -85,6 +85,7 @@ export namespace Translators { exportFileData?: boolean useJournalAbbreviation?: boolean biblatexAPA?: boolean + biblatexChicago?: boolean keepUpdated?: boolean worker?: boolean markdown?: boolean From f8c87b83d98ae9e05be06c3296f685bed9eb2131 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Mon, 29 Apr 2024 16:31:10 +0200 Subject: [PATCH 107/177] update tests --- .../BibLaTeX Patent author handling, type #1060.biblatex | 8 ++------ ...Direct access to Zotero Creators fields #2787.biblatex | 4 ++-- ...f Contributor to WITH #2837-autoexport.before.biblatex | 4 ++-- ...es scriptwriter with other contributors #2802.biblatex | 3 ++- test/fixtures/export/map csl-json variables #293.biblatex | 5 ++--- translators/bibtex/biblatex.ts | 2 +- translators/bibtex/entry.ts | 8 ++++++++ 7 files changed, 19 insertions(+), 15 deletions(-) diff --git a/test/fixtures/export/BibLaTeX Patent author handling, type #1060.biblatex b/test/fixtures/export/BibLaTeX Patent author handling, type #1060.biblatex index b67da5f1b6..7012e86929 100644 --- a/test/fixtures/export/BibLaTeX Patent author handling, type #1060.biblatex +++ b/test/fixtures/export/BibLaTeX Patent author handling, type #1060.biblatex @@ -1,11 +1,10 @@ - @patent{inventorCombinatorialProblemStabilityIssueDate, type = {patent}, title = {A Combinatorial Problem; Stability and Order for Models and Theories in Infinitary Languages}, author = {Inventor, Some}, - editora = {Attorney/Agent, Some and Contributer, Some}, - editoratype = {collaborator}, holder = {{Assignee}}, + namea = {Attorney/Agent, Some and Contributer, Some}, + nameatype = {collaborator}, year = {Issue Date}, number = {Patent Number}, pages = {247--261}, @@ -13,8 +12,6 @@ pubstate = {Legal Status} } % == BibLateX quality report for inventorCombinatorialProblemStabilityIssueDate: -% Unexpected field 'editora' -% Unexpected field 'editoratype' % Unexpected field 'pages' % ? unused Application number ("Application Number") % ? unused Assignee ("Assignee") @@ -40,4 +37,3 @@ % ? unused Assignee ("DaimlerChrysler AG (Stuttgart, 70567, DE) Bayerische Motoren Werke AG (München, 80809, DE) Robert Bosch GmbH (Stuttgart, 70469, DE)") % ? unused Filing date ("2003-12-24") % ? unused Number ("DE10361215") - diff --git a/test/fixtures/export/Direct access to Zotero Creators fields #2787.biblatex b/test/fixtures/export/Direct access to Zotero Creators fields #2787.biblatex index 7692b362fa..a619bf38e4 100644 --- a/test/fixtures/export/Direct access to Zotero Creators fields #2787.biblatex +++ b/test/fixtures/export/Direct access to Zotero Creators fields #2787.biblatex @@ -2,8 +2,8 @@ title = {Theodor W. Adorno: Negative Dialektik}, shorttitle = {Klassiker Auslegen: Negative Dialektik}, editor = {Honneth, Axel and Menke, Christoph}, - editorb = {Höffe, Otfried}, - editorbtype = {redactor}, + editora = {Höffe, Otfried}, + editoratype = {redactor}, date = {2006}, series = {Klassiker Auslegen}, number = {28}, diff --git a/test/fixtures/export/Export of Contributor to WITH #2837-autoexport.before.biblatex b/test/fixtures/export/Export of Contributor to WITH #2837-autoexport.before.biblatex index 1e117492f7..50c519de9d 100644 --- a/test/fixtures/export/Export of Contributor to WITH #2837-autoexport.before.biblatex +++ b/test/fixtures/export/Export of Contributor to WITH #2837-autoexport.before.biblatex @@ -1,7 +1,7 @@ @book{meyersWitheringWorrying2014, title = {Withering Worrying}, author = {Meyers, K.}, - editora = {Long, W. T.}, - editoratype = {collaborator}, + editor = {Long, W. T.}, + editortype = {collaborator}, date = {2014} } diff --git a/test/fixtures/export/Exporting item type film merges scriptwriter with other contributors #2802.biblatex b/test/fixtures/export/Exporting item type film merges scriptwriter with other contributors #2802.biblatex index b0a2168557..2da4cf228d 100644 --- a/test/fixtures/export/Exporting item type film merges scriptwriter with other contributors #2802.biblatex +++ b/test/fixtures/export/Exporting item type film merges scriptwriter with other contributors #2802.biblatex @@ -12,5 +12,6 @@ publisher = {Sixteen Films, Why Not Productions, Wild Bunch}, abstract = {After surviving a heart-attack, a 59-year-old carpenter must fight bureaucratic forces to receive Employment and Support Allowance.}, keywords = {bureaucracy,psychological violence,United Kingdom}, - annotation = {IMDb ID: tt5168192 event-location: United Kingdom, France, Belgium} + annotation = {IMDb ID: tt5168192\\ +event-location: United Kingdom, France, Belgium} } diff --git a/test/fixtures/export/map csl-json variables #293.biblatex b/test/fixtures/export/map csl-json variables #293.biblatex index 9d9e882ff7..f7c7984306 100644 --- a/test/fixtures/export/map csl-json variables #293.biblatex +++ b/test/fixtures/export/map csl-json variables #293.biblatex @@ -1,7 +1,8 @@ - @book{kelsen_democratie_2004, title = {La démocratie. Sa nature, sa valeur}, author = {Kelsen, Hans}, + editor = {Raynaud, Philippe}, + editortype = {collaborator}, translator = {Eisenmann, Charles}, date = {2004}, origdate = {1929}, @@ -31,5 +32,3 @@ origpublisher = {origpublisher}, origtitle = {origtitle} } - - diff --git a/translators/bibtex/biblatex.ts b/translators/bibtex/biblatex.ts index 8334cf6831..7f4daf91b9 100644 --- a/translators/bibtex/biblatex.ts +++ b/translators/bibtex/biblatex.ts @@ -240,7 +240,7 @@ class Entry extends BaseEntry { break default: - creators[creatorType.register('name', creator.creatorType)].push(creator) + creators[creatorType.register('name', 'collaborator')].push(creator) } } diff --git a/translators/bibtex/entry.ts b/translators/bibtex/entry.ts index b543755916..8dddca1dbb 100644 --- a/translators/bibtex/entry.ts +++ b/translators/bibtex/entry.ts @@ -56,11 +56,19 @@ const fieldOrder = [ 'editoratype', 'editorb', 'editorbtype', + 'editorc', + 'editorctype', 'translator', 'translatortype', 'holder', 'holdertype', 'with', + 'namea', + 'nameatype', + 'nameb', + 'namebtype', + 'namec', + 'namectype', 'options', 'date', 'origdate', From 2b95f86374a02a8b72c6a01ad9bbc41ba5570b6d Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Mon, 29 Apr 2024 16:40:51 +0200 Subject: [PATCH 108/177] test updates --- test/behave | 1 + ...latex @incollection reference type #1691.biblatex | 9 ++------- ...se name to Pinyin in citation key. #2361.biblatex | 4 ++-- ...he item type via the cheater syntax #587.biblatex | 11 ++++------- ... types with no dedicated DOI field #1331.biblatex | 4 ++-- ...up small-caps, superscript, italics #301.biblatex | 5 ++--- translators/bibtex/biblatex.ts | 12 ++++++++++-- 7 files changed, 23 insertions(+), 23 deletions(-) diff --git a/test/behave b/test/behave index f1121726f9..60e479b3e4 100755 --- a/test/behave +++ b/test/behave @@ -120,6 +120,7 @@ if args.this or args.test_this: if args.test_this: args.test = BRANCH.replace('gh-', '') if args.test or args.this or args.nightly or args.tagged: args.slow = True +if args.test: args.stop = False if args.client == 'jurism': print(f"********* JURISM NO LONGER SUPPORTED ***********") diff --git a/test/fixtures/export/Book Title exports to Journaltitle for Biblatex @incollection reference type #1691.biblatex b/test/fixtures/export/Book Title exports to Journaltitle for Biblatex @incollection reference type #1691.biblatex index 9bc6e9f49f..1efd146bf8 100644 --- a/test/fixtures/export/Book Title exports to Journaltitle for Biblatex @incollection reference type #1691.biblatex +++ b/test/fixtures/export/Book Title exports to Journaltitle for Biblatex @incollection reference type #1691.biblatex @@ -1,11 +1,10 @@ - @online{NagyHistorians2008, type = {Billet}, title = {Historians and {{Emotions}}: {{New Theories}}, {{New Questions}}}, shorttitle = {Historians and {{Emotions}}}, author = {Nagy, Piroska}, - editora = {Boquet, Damien}, - editoratype = {collaborator}, + editor = {Boquet, Damien}, + editortype = {collaborator}, date = {2008-10-24}, url = {http://emma.hypotheses.org/147}, urldate = {2017-12-12}, @@ -13,8 +12,6 @@ } % == BibLateX quality report for NagyHistorians2008: % Unexpected field 'type' -% Unexpected field 'editora' -% Unexpected field 'editoratype' % ? Title looks like it was stored in title-case in Zotero @incollection{胡適哲學史1917, @@ -31,5 +28,3 @@ origpublisher = {萬有文庫}, origtitle = {中國哲學史大綱卷上[1919],商務} } - - diff --git a/test/fixtures/export/Convert Chinese name to Pinyin in citation key. #2361.biblatex b/test/fixtures/export/Convert Chinese name to Pinyin in citation key. #2361.biblatex index a52478c1cd..25cb7034f1 100644 --- a/test/fixtures/export/Convert Chinese name to Pinyin in citation key. #2361.biblatex +++ b/test/fixtures/export/Convert Chinese name to Pinyin in citation key. #2361.biblatex @@ -1,8 +1,8 @@ @thesis{weixiao2016, title = {黄土高原同纬度大气降水稳定同位素分析}, author = {魏笑}, - editora = {赵英 and 西北农林科技大学}, - editoratype = {collaborator}, + editor = {赵英 and 西北农林科技大学}, + editortype = {collaborator}, date = {2016-01-01T00:00:00}, abstract = {大气降水中氢氧稳定同位素的含量不高,其变化过程与纬度、海拔、季节变化、温度和降水量等因素都有关系。本次研究以黄土高原为背景,主要选取了甘肃省庆阳市西峰区、甘肃省庆阳市环县、陕西省延安市安塞县、陕西省延安市延长县、宁夏回族自治区中卫市海原县、山西省大同市、山西省介休市7个试验点,对各试验点2015年的大气降水进行采集,分析、测定各试验点大气降水稳定同位素的月平均值,进而得出研究区域大气降水氢氧稳定同位素含量的时空变化特征及其与温度、降水量的响应关系,初步建立了研究区域的局地大气降水线方程,为分析陆地水循环水汽的来源,水汽的转移、运动方式以及后续黄土高原地区地下水补给来源等相关试验提供基础数据和理论依据。研究结果表明:与全球大气降水线方程相比,研究区域大气降水线方程斜率和截距均较低。斜率和截距越小,说明降水时存在的蒸发作用越强烈,表明雨滴在降水过程中受云下二次蒸发而发生强烈的同位素动力分馏效应,使降水线的斜率和截距变小。7个试验点具有不同的时空变化特征:从时间变化上看,海原县和大同市大气降水δ\textasciitilde O的值夏季富集,冬季贫化,环县、西峰大气降水δ\textasciitilde (18)O的值季节变化不明显,安塞县、延长县、介休市大气降水δ\textasciitilde (18)O的值则基本表现为冬季富集,夏季贫化;在空间变化上,则基本表现为各试验点δ\textasciitilde (18)O值自西向东呈减小趋势。本次研究各试验点大气降水δ\textasciitilde (18)O主要受温度和降水量的影响,各试验点具有不同的特点:海原县主要受温度效应影响,降水中δ\textasciitilde (18)O值较高,而其余各点由于受较强的季风活动所引起的降水量效应的影响,导致其大气降水中δ\textasciitilde (18)O的值相对较低,尤其是山西省大同市试验点,季风活动引起的降水量效应以及较寒冷的气候使得其δ\textasciitilde (18)O的值明显低于其它试验点。}, keywords = {同纬度,大气降水,稳定同位素} diff --git a/test/fixtures/export/Setting the item type via the cheater syntax #587.biblatex b/test/fixtures/export/Setting the item type via the cheater syntax #587.biblatex index 973452d59d..3ec13227f4 100644 --- a/test/fixtures/export/Setting the item type via the cheater syntax #587.biblatex +++ b/test/fixtures/export/Setting the item type via the cheater syntax #587.biblatex @@ -1,4 +1,3 @@ - @booklet{clark_mesopotamia_1957, title = {Mesopotamia: Between Two Rivers}, author = {Clark, Hazel V.}, @@ -11,8 +10,8 @@ @review{kamp_deconstructing_2006, title = {Deconstructing Dinner}, author = {Kamp, David}, - editora = {Pollan, Michael}, - editoratype = {collaborator}, + namea = {Pollan, Michael}, + nameatype = {collaborator}, date = {2006-04-23}, url = {http://www.nytimes.com/2006/04/23/books/review/23kamp.html.}, abstract = {Example from CMoS, 16e, 14.125}, @@ -41,8 +40,8 @@ @review{ratliff_mystery_1999, title = {The Mystery of Samba: {{Popular}} Music and National Identity in {{Brazil}}}, author = {Ratliff, Ben}, - editora = {{Hermano Vianna}}, - editoratype = {collaborator}, + namea = {{Hermano Vianna}}, + nameatype = {collaborator}, date = {1999-04}, journaltitle = {Lingua Franca}, volume = {9}, @@ -57,5 +56,3 @@ Original annotation: \par Example from CMoS, 16e, 14.125} } - - diff --git a/test/fixtures/export/URL-DOI exclusive export broken for item types with no dedicated DOI field #1331.biblatex b/test/fixtures/export/URL-DOI exclusive export broken for item types with no dedicated DOI field #1331.biblatex index 7782f7cd1e..4be3587baa 100644 --- a/test/fixtures/export/URL-DOI exclusive export broken for item types with no dedicated DOI field #1331.biblatex +++ b/test/fixtures/export/URL-DOI exclusive export broken for item types with no dedicated DOI field #1331.biblatex @@ -1,8 +1,8 @@ @book{Gentleman2005, title = {Bioinformatics and {{Computational Biology Solutions Using R}} and {{Bioconductor}}}, editor = {Gentleman, Robert and Carey, Vincent J. and Huber, Wolfgang and Irizarry, Rafael A. and Dudoit, Sandrine}, - editorb = {Wong, Wing and Gail, M. and Krickeberg, K. and Tsiatis, A. and Samet, J.}, - editorbtype = {redactor}, + editora = {Wong, Wing and Gail, M. and Krickeberg, K. and Tsiatis, A. and Samet, J.}, + editoratype = {redactor}, date = {2005}, series = {Statistics for {{Biology}} and {{Health}}}, publisher = {Springer New York}, diff --git a/test/fixtures/export/markup small-caps, superscript, italics #301.biblatex b/test/fixtures/export/markup small-caps, superscript, italics #301.biblatex index 43007f57e7..31a2470632 100644 --- a/test/fixtures/export/markup small-caps, superscript, italics #301.biblatex +++ b/test/fixtures/export/markup small-caps, superscript, italics #301.biblatex @@ -1,8 +1,9 @@ - @incollection{burgorgue-larsen_interventions_2011, title = {Les interventions \emph{éclairées} devant la Cour européenne des droits de l'homme ou le rôle stratégique des \emph{amici curiae}}, booktitle = {La conscience des droits. Mélanges en l'honneur de Jean-Paul Costa}, author = {Burgorgue-Larsen, Laurence}, + namea = {Titiun, Patrick and Dumaine, Patricia}, + nameatype = {collaborator}, date = {2011}, pages = {68--82}, publisher = {Dalloz}, @@ -26,5 +27,3 @@ langid = {french}, volumes = {355 p.} } - - diff --git a/translators/bibtex/biblatex.ts b/translators/bibtex/biblatex.ts index 7f4daf91b9..5666da2551 100644 --- a/translators/bibtex/biblatex.ts +++ b/translators/bibtex/biblatex.ts @@ -195,8 +195,11 @@ class Entry extends BaseEntry { if (this.translation.options.biblatexAPA) { creators.with.push(creator) } + else if (video && this.translation.options.biblatexChicago) { + creators[creatorType.register('editor', 'none')].push(creator) + } else { - creators[creatorType.register('editor', video && this.translation.options.biblatexChicago ? 'none' : 'collaborator')].push(creator) + creators[creatorType.register('name', 'collaborator')].push(creator) } break @@ -236,7 +239,12 @@ class Entry extends BaseEntry { case 'scriptwriter': // 365.something - creators[creatorType.register('editor', video ? 'scriptwriter' : 'collaborator')].push(creator) + if (video) { + creators[creatorType.register('editor', 'scriptwriter')].push(creator) + } + else { + creators[creatorType.register('name', 'collaborator')].push(creator) + } break default: From 8305e6f37a1b691e52ba7bc0411257f62c0c060b Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Mon, 29 Apr 2024 16:43:50 +0200 Subject: [PATCH 109/177] ncu --- package-lock.json | 24 ++++++++++++++++++++---- package.json | 2 +- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index e377346189..ced436d023 100644 --- a/package-lock.json +++ b/package-lock.json @@ -116,7 +116,7 @@ "process": "^0.11.10", "properties-reader": "^2.3.0", "pug": "^3.0.2", - "putout": "^35.16.0", + "putout": "^35.18.0", "recast": "^0.23.6", "regenerate": "^1.4.2", "rimraf": "^5.0.5", @@ -2958,6 +2958,21 @@ "integrity": "sha512-p2BdO7o4BI+pMun3J+dhaOfYan5JsZrw9wjshRjkWY9+p+u+kKSMhNWYnot2yHDR9CSahZ9iT3dcqJ+V72qHMw==", "dev": true }, + "node_modules/@putout/quick-lint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@putout/quick-lint/-/quick-lint-1.1.0.tgz", + "integrity": "sha512-5zKi03SPGSQiEllctAvaFg+EHNrxCCOdU/wvpQEuUD5DAbxZncrbIuvD+reMxg67pO+ZdzL46uHhPgJ3PussPQ==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + }, + "bin": { + "quick-lint": "bin/quick-lint.mjs" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/@putout/recast": { "version": "1.14.0", "resolved": "https://registry.npmjs.org/@putout/recast/-/recast-1.14.0.tgz", @@ -14691,9 +14706,9 @@ "integrity": "sha512-EkCRMV2w15w+9wylcpabacKK9VvTRX3TvhVQJBwIk4ThvllI2M6RlvdEZvJLhxsxy4x8IEDZneQhlGU0Pk5keg==" }, "node_modules/putout": { - "version": "35.16.0", - "resolved": "https://registry.npmjs.org/putout/-/putout-35.16.0.tgz", - "integrity": "sha512-BUox495zAHFwZT2AvZcZTRWg6hpV5xgDWXu7XAfUV8vl9SW7ZzMfH4ETvESHOKhHqOZV2ThIf6hD8yOzxaQGwg==", + "version": "35.18.0", + "resolved": "https://registry.npmjs.org/putout/-/putout-35.18.0.tgz", + "integrity": "sha512-vRSxHkQrqGzArWdvAuNVStlZtQndB3st+Hci0R0BaiSucZnZ4BTDQ6lTjbKJSnZazLove2nUdqOX5UCT6A7gGg==", "dev": true, "dependencies": { "@putout/babel": "^2.0.0", @@ -14831,6 +14846,7 @@ "@putout/processor-json": "^9.0.0", "@putout/processor-markdown": "^12.0.0", "@putout/processor-yaml": "^8.0.0", + "@putout/quick-lint": "^1.0.0", "@putout/traverse": "^10.0.0", "ajv": "^8.8.2", "chalk": "^5.3.0", diff --git a/package.json b/package.json index ee0321610a..0aa5aaaa20 100644 --- a/package.json +++ b/package.json @@ -170,7 +170,7 @@ "process": "^0.11.10", "properties-reader": "^2.3.0", "pug": "^3.0.2", - "putout": "^35.16.0", + "putout": "^35.18.0", "recast": "^0.23.6", "regenerate": "^1.4.2", "rimraf": "^5.0.5", From 9e579338213bf10f07a03316d642c1735bb95a48 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Mon, 29 Apr 2024 16:50:23 +0200 Subject: [PATCH 110/177] cleanup --- content/ZoteroItemPane.ts | 21 +-------------------- content/better-bibtex.ts | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/content/ZoteroItemPane.ts b/content/ZoteroItemPane.ts index af298b416e..92e2a44f0c 100644 --- a/content/ZoteroItemPane.ts +++ b/content/ZoteroItemPane.ts @@ -45,26 +45,7 @@ export class ZoteroItemPane { // itemPane.BetterBibTeX = this if (!this.document.getElementById('better-bibtex-editpane-item-box')) { - if (is7) { - Zotero.ItemPaneManager.registerSection({ - paneID: 'betterbibtex-section-citationkey', - pluginID: 'better-bibtex@iris-advies.com', - header: { - l10nID: 'betterbibtex-item-pane-header', - icon: `${rootURI}content/skin/citation-key.png`, - }, - sidenav: { - l10nID: 'betterbibtex-item-pane-header', - icon: `${rootURI}content/skin/citation-key.png`, - }, - bodyXHTML: 'Citation Key ', - // onRender: ({ body, item, editable, tabType }) => { - onRender: ({ body, item }) => { - body.ownerDocument.getElementById('better-bibtex-citation-key').value = item.getField('citationKey') || '\u274C' - }, - }) - } - else { + if (!is7) { itemBox.parentNode.appendChild(elements.create('vbox', { flex: 1, style: 'margin: 0; padding: 0', $: [ elements.create('grid', { id: 'better-bibtex-editpane-item-box', $: [ diff --git a/content/better-bibtex.ts b/content/better-bibtex.ts index c6879272f8..333308e48e 100644 --- a/content/better-bibtex.ts +++ b/content/better-bibtex.ts @@ -847,6 +847,26 @@ export class BetterBibTeX { } async loadUI(win: Window): Promise { + if (is7) { + Zotero.ItemPaneManager.registerSection({ + paneID: 'betterbibtex-section-citationkey', + pluginID: 'better-bibtex@iris-advies.com', + header: { + l10nID: 'betterbibtex-item-pane-header', + icon: `${rootURI}content/skin/citation-key.png`, + }, + sidenav: { + l10nID: 'betterbibtex-item-pane-header', + icon: `${rootURI}content/skin/citation-key.png`, + }, + bodyXHTML: 'Citation Key ', + // onRender: ({ body, item, editable, tabType }) => { + onRender: ({ body, item }) => { + body.ownerDocument.getElementById('better-bibtex-citation-key').value = item.getField('citationKey') || '\u274C' + }, + }) + } + try { log.debug('loading main UI') await newZoteroPane(win) From 5cb6de0bc252891664a38cceff7d7916ecdb0000 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Mon, 29 Apr 2024 16:55:15 +0200 Subject: [PATCH 111/177] update tests --- ...e for Biblatex @incollection reference type #1691.biblatex | 4 ++-- ...ert Chinese name to Pinyin in citation key. #2361.biblatex | 4 ++-- ...rt of Contributor to WITH #2837-autoexport.before.biblatex | 4 ++-- test/fixtures/export/map csl-json variables #293.biblatex | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/test/fixtures/export/Book Title exports to Journaltitle for Biblatex @incollection reference type #1691.biblatex b/test/fixtures/export/Book Title exports to Journaltitle for Biblatex @incollection reference type #1691.biblatex index 1efd146bf8..4528563a92 100644 --- a/test/fixtures/export/Book Title exports to Journaltitle for Biblatex @incollection reference type #1691.biblatex +++ b/test/fixtures/export/Book Title exports to Journaltitle for Biblatex @incollection reference type #1691.biblatex @@ -3,8 +3,8 @@ title = {Historians and {{Emotions}}: {{New Theories}}, {{New Questions}}}, shorttitle = {Historians and {{Emotions}}}, author = {Nagy, Piroska}, - editor = {Boquet, Damien}, - editortype = {collaborator}, + namea = {Boquet, Damien}, + nameatype = {collaborator}, date = {2008-10-24}, url = {http://emma.hypotheses.org/147}, urldate = {2017-12-12}, diff --git a/test/fixtures/export/Convert Chinese name to Pinyin in citation key. #2361.biblatex b/test/fixtures/export/Convert Chinese name to Pinyin in citation key. #2361.biblatex index 25cb7034f1..cbbc3671c3 100644 --- a/test/fixtures/export/Convert Chinese name to Pinyin in citation key. #2361.biblatex +++ b/test/fixtures/export/Convert Chinese name to Pinyin in citation key. #2361.biblatex @@ -1,8 +1,8 @@ @thesis{weixiao2016, title = {黄土高原同纬度大气降水稳定同位素分析}, author = {魏笑}, - editor = {赵英 and 西北农林科技大学}, - editortype = {collaborator}, + namea = {赵英 and 西北农林科技大学}, + nameatype = {collaborator}, date = {2016-01-01T00:00:00}, abstract = {大气降水中氢氧稳定同位素的含量不高,其变化过程与纬度、海拔、季节变化、温度和降水量等因素都有关系。本次研究以黄土高原为背景,主要选取了甘肃省庆阳市西峰区、甘肃省庆阳市环县、陕西省延安市安塞县、陕西省延安市延长县、宁夏回族自治区中卫市海原县、山西省大同市、山西省介休市7个试验点,对各试验点2015年的大气降水进行采集,分析、测定各试验点大气降水稳定同位素的月平均值,进而得出研究区域大气降水氢氧稳定同位素含量的时空变化特征及其与温度、降水量的响应关系,初步建立了研究区域的局地大气降水线方程,为分析陆地水循环水汽的来源,水汽的转移、运动方式以及后续黄土高原地区地下水补给来源等相关试验提供基础数据和理论依据。研究结果表明:与全球大气降水线方程相比,研究区域大气降水线方程斜率和截距均较低。斜率和截距越小,说明降水时存在的蒸发作用越强烈,表明雨滴在降水过程中受云下二次蒸发而发生强烈的同位素动力分馏效应,使降水线的斜率和截距变小。7个试验点具有不同的时空变化特征:从时间变化上看,海原县和大同市大气降水δ\textasciitilde O的值夏季富集,冬季贫化,环县、西峰大气降水δ\textasciitilde (18)O的值季节变化不明显,安塞县、延长县、介休市大气降水δ\textasciitilde (18)O的值则基本表现为冬季富集,夏季贫化;在空间变化上,则基本表现为各试验点δ\textasciitilde (18)O值自西向东呈减小趋势。本次研究各试验点大气降水δ\textasciitilde (18)O主要受温度和降水量的影响,各试验点具有不同的特点:海原县主要受温度效应影响,降水中δ\textasciitilde (18)O值较高,而其余各点由于受较强的季风活动所引起的降水量效应的影响,导致其大气降水中δ\textasciitilde (18)O的值相对较低,尤其是山西省大同市试验点,季风活动引起的降水量效应以及较寒冷的气候使得其δ\textasciitilde (18)O的值明显低于其它试验点。}, keywords = {同纬度,大气降水,稳定同位素} diff --git a/test/fixtures/export/Export of Contributor to WITH #2837-autoexport.before.biblatex b/test/fixtures/export/Export of Contributor to WITH #2837-autoexport.before.biblatex index 50c519de9d..636e2c20c8 100644 --- a/test/fixtures/export/Export of Contributor to WITH #2837-autoexport.before.biblatex +++ b/test/fixtures/export/Export of Contributor to WITH #2837-autoexport.before.biblatex @@ -1,7 +1,7 @@ @book{meyersWitheringWorrying2014, title = {Withering Worrying}, author = {Meyers, K.}, - editor = {Long, W. T.}, - editortype = {collaborator}, + namea = {Long, W. T.}, + nameatype = {collaborator}, date = {2014} } diff --git a/test/fixtures/export/map csl-json variables #293.biblatex b/test/fixtures/export/map csl-json variables #293.biblatex index f7c7984306..0d40af3100 100644 --- a/test/fixtures/export/map csl-json variables #293.biblatex +++ b/test/fixtures/export/map csl-json variables #293.biblatex @@ -1,9 +1,9 @@ @book{kelsen_democratie_2004, title = {La démocratie. Sa nature, sa valeur}, author = {Kelsen, Hans}, - editor = {Raynaud, Philippe}, - editortype = {collaborator}, translator = {Eisenmann, Charles}, + namea = {Raynaud, Philippe}, + nameatype = {collaborator}, date = {2004}, origdate = {1929}, series = {Bibliothèque Dalloz}, From d264cb75a0df55d723179bde27c0494ce956bdec Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Mon, 29 Apr 2024 18:09:57 +0200 Subject: [PATCH 112/177] New Crowdin updates (#2851) * New translations better-bibtex.ftl (French) * New translations better-bibtex.ftl (German) * New translations better-bibtex.ftl (Italian) * New translations better-bibtex.ftl (Chinese Simplified) * New translations better-bibtex.ftl (Portuguese, Brazilian) --- locale/de-DE/better-bibtex.ftl | 1 + locale/fr-FR/better-bibtex.ftl | 1 + locale/it-IT/better-bibtex.ftl | 1 + locale/pt-BR/better-bibtex.ftl | 1 + locale/zh-CN/better-bibtex.ftl | 1 + 5 files changed, 5 insertions(+) diff --git a/locale/de-DE/better-bibtex.ftl b/locale/de-DE/better-bibtex.ftl index 1067ae1bf7..fed1c640a2 100644 --- a/locale/de-DE/better-bibtex.ftl +++ b/locale/de-DE/better-bibtex.ftl @@ -57,6 +57,7 @@ better-bibtex_export-options_keep-updated = Halte aktuell better-bibtex_export-options_reminder = Sind Sie sicher, dass Sie nicht das ''{ $translator }''-Format wollen? better-bibtex_export-options_worker = Hintergrund-Export better-bibtex_export-options_biblatexAPA = biblatex-apa +better-bibtex_export-options_biblatexChicago = biblatex-chicago unused_better-bibtex_first-run = .title = Welcome to Better BibTeX for Zotero .label = Welcome to Better BibTeX for Zotero diff --git a/locale/fr-FR/better-bibtex.ftl b/locale/fr-FR/better-bibtex.ftl index 1e68e421d4..948ad9e9eb 100644 --- a/locale/fr-FR/better-bibtex.ftl +++ b/locale/fr-FR/better-bibtex.ftl @@ -57,6 +57,7 @@ better-bibtex_export-options_keep-updated = Garder à jour better-bibtex_export-options_reminder = Êtes-vous sûr de ne pas vouloir du format ''{ $translator }''? better-bibtex_export-options_worker = Exportation en arrière-plan better-bibtex_export-options_biblatexAPA = biblatex-apa +better-bibtex_export-options_biblatexChicago = biblatex-chicago unused_better-bibtex_first-run = .title = Bienvenue sur Better BibTeX pour Zotero .label = Bienvenue sur Better BibTeX pour Zotero diff --git a/locale/it-IT/better-bibtex.ftl b/locale/it-IT/better-bibtex.ftl index f3136d34fc..0221e7915e 100644 --- a/locale/it-IT/better-bibtex.ftl +++ b/locale/it-IT/better-bibtex.ftl @@ -57,6 +57,7 @@ better-bibtex_export-options_keep-updated = Mantieni aggiornato better-bibtex_export-options_reminder = Si è sicuri di non volere il formato '{ $translator }' ? better-bibtex_export-options_worker = Esportazione in background better-bibtex_export-options_biblatexAPA = biblatex-apa +better-bibtex_export-options_biblatexChicago = biblatex-chicago unused_better-bibtex_first-run = .title = Ti presentiamo Better BibTeX per Zotero .label = Ti presentiamo Better BibTeX per Zotero diff --git a/locale/pt-BR/better-bibtex.ftl b/locale/pt-BR/better-bibtex.ftl index e3f2d30b17..6b76545b11 100644 --- a/locale/pt-BR/better-bibtex.ftl +++ b/locale/pt-BR/better-bibtex.ftl @@ -57,6 +57,7 @@ better-bibtex_export-options_keep-updated = Manter atualizado better-bibtex_export-options_reminder = Tem certeza que você não quer o formato ''{ $translator }''? better-bibtex_export-options_worker = Background export better-bibtex_export-options_biblatexAPA = biblatex-apa +better-bibtex_export-options_biblatexChicago = biblatex-chicago unused_better-bibtex_first-run = .title = Welcome to Better BibTeX for Zotero .label = Welcome to Better BibTeX for Zotero diff --git a/locale/zh-CN/better-bibtex.ftl b/locale/zh-CN/better-bibtex.ftl index eb05e9fe9a..1666cf5c8a 100644 --- a/locale/zh-CN/better-bibtex.ftl +++ b/locale/zh-CN/better-bibtex.ftl @@ -57,6 +57,7 @@ better-bibtex_export-options_keep-updated = 保持更新 better-bibtex_export-options_reminder = 您确定不使用“{ $translator }”吗? better-bibtex_export-options_worker = 后台导出 better-bibtex_export-options_biblatexAPA = biblatex-apa +better-bibtex_export-options_biblatexChicago = biblatex-chicago unused_better-bibtex_first-run = .title = 欢迎使用 Better BibTeX for Zotero .label = 欢迎使用 Better BibTeX for Zotero From fa82aca8aa1b59502a9b58aaedd91a37d62fffdb Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Mon, 29 Apr 2024 20:02:20 +0200 Subject: [PATCH 113/177] New translations better-bibtex.ftl (Chinese Simplified) (#2852) --- locale/zh-CN/better-bibtex.ftl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/locale/zh-CN/better-bibtex.ftl b/locale/zh-CN/better-bibtex.ftl index 1666cf5c8a..8e69836c71 100644 --- a/locale/zh-CN/better-bibtex.ftl +++ b/locale/zh-CN/better-bibtex.ftl @@ -364,7 +364,7 @@ better-bibtex_zotero-pane_sentence-case = BBT 句首大写 better-bibtex_zotero-pane_show_collection-key = 下载 Better BibTeX 导出… better-bibtex_zotero-pane_tag_duplicates = 标记重复的引用 better-bibtex_zotero-pane_tex-studio = 推送条目至 TeXstudio -betterbibtex-item-pane-header = Citation key +betterbibtex-item-pane-header = 引用 unused_better-bibtex_auto-export_too-long_body-eabled = 您的 { $translator } 自动导出至 { $path } 用时 { $seconds } 秒。在任何导出过程中,Zotero 用户界面均将无响应。 unused_better-bibtex_auto-export_too-long_prime-enabled = 为了最大程度地减少高耗时自动导出的影响,缓存预处理已启用。 这将使自动导出减慢,但也将缩减 Zotero 无响应的时间至最短。 unused_better-bibtex_auto-export_too-long_sorry = 您已经启用了缓存预处理,并将自动导出设置为空闲时运行。进一步的优化要求重构 Zotero 架构(https://u.nu/27e9)。 From 009a90eeb22189921c436a98bde7c51219bad7f2 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Mon, 29 Apr 2024 20:21:04 +0200 Subject: [PATCH 114/177] New translations better-bibtex.ftl (French) (#2853) --- locale/fr-FR/better-bibtex.ftl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/locale/fr-FR/better-bibtex.ftl b/locale/fr-FR/better-bibtex.ftl index 948ad9e9eb..b7f281cd52 100644 --- a/locale/fr-FR/better-bibtex.ftl +++ b/locale/fr-FR/better-bibtex.ftl @@ -364,7 +364,7 @@ better-bibtex_zotero-pane_sentence-case = BBT Casse de la phrase better-bibtex_zotero-pane_show_collection-key = Télécharger l'export de Better BibTeX... better-bibtex_zotero-pane_tag_duplicates = Tagguer les clés de citation doublons better-bibtex_zotero-pane_tex-studio = Envoyer les citations vers TeXstudio -betterbibtex-item-pane-header = Citation key +betterbibtex-item-pane-header = Clé de citation unused_better-bibtex_auto-export_too-long_body-eabled = Votre exportation automatique { $translator } à { $path } a pris { $seconds } secondes. Pendant les exportations de quelque type que ce soit, l''interface utilisateur de Zotero est verrouillée. unused_better-bibtex_auto-export_too-long_prime-enabled = Pour minimiser les effets des exportations automatiques durant (trop) longtemps, la mise en place du cache a été activée. Cela rendra les exportations automatiques plus lentes, mais réduira au maximum le temps pendant lequel Zotero est inutilisable. unused_better-bibtex_auto-export_too-long_sorry = Vous avez déjà activé la mise en place du cache, et l'exportation automatique est activée. Rien de plus ne peut être fait sans un changement de l'architecture de Zotero (https://u.nu/27e9). From 7442f6c6bb3764e6e24164d8c410e8cde8fb11ce Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Mon, 29 Apr 2024 21:39:11 +0200 Subject: [PATCH 115/177] upgrades --- content/skin/citation-key.png | Bin 0 -> 967 bytes submodules/zotero | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 content/skin/citation-key.png diff --git a/content/skin/citation-key.png b/content/skin/citation-key.png new file mode 100644 index 0000000000000000000000000000000000000000..30ce52241c2be5b9475f719fb1450e79253cd4a3 GIT binary patch literal 967 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|T2doC(|mmy zw18|523AHP24;{FAY@>aVqgWc85q16rQz%#Mh&PMCI*J~Oa>OHnkXO*0v4nJa0`PlBg3pY5xV%QuQiw3qZOUY$~jP%-qzHM1_jnoV;SI3R@+x3M(KRB&@Hb09I0xZL1XF8=&Bv zUzDm~re~mMpk&9TprBw=l#*r@P?Wt5Z@Sn2DRmzV368|&p4rRy77T3YHG z80i}s=>k>g7FXt#Bv$C=6)QswftllyTAW;zSx}OhpQivaH!&%{w8U0P31kr*K-^i9 znTD__uNdkrpa=CqGWv#k2KsQbfm&@qqE`MznW;dVLFU^T+JIG}h(YbK(Fa+M zU2c#0JdW6QIIS$;UNNOZ`hs^%ql<`3$N&4!XXc+v+t@nU=6?0FGjl9Ar>AMVX6l|$ z?>WR%azH#})2rRjSp6Q@^qe*rEijSK2 W+oZR>mb85cO3j|GelF{r5}E+tRzx2F literal 0 HcmV?d00001 diff --git a/submodules/zotero b/submodules/zotero index 1626ecf48e..b9a93faabb 160000 --- a/submodules/zotero +++ b/submodules/zotero @@ -1 +1 @@ -Subproject commit 1626ecf48e160503c58eae074f589470800171b0 +Subproject commit b9a93faabb2001c5e565a1c3092d8dc4becb4d7e From 62585702cd7c77b025a358b5242829f72c13aa7d Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Tue, 30 Apr 2024 08:30:55 +0200 Subject: [PATCH 116/177] section header --- content/better-bibtex.ts | 4 +- locale/en-US/better-bibtex.ftl | 109 +-------------------------------- submodules/zotero | 2 +- 3 files changed, 6 insertions(+), 109 deletions(-) diff --git a/content/better-bibtex.ts b/content/better-bibtex.ts index 333308e48e..4ec30feed2 100644 --- a/content/better-bibtex.ts +++ b/content/better-bibtex.ts @@ -852,11 +852,11 @@ export class BetterBibTeX { paneID: 'betterbibtex-section-citationkey', pluginID: 'better-bibtex@iris-advies.com', header: { - l10nID: 'betterbibtex-item-pane-header', + l10nID: 'better-bibtex_item-pane_section', icon: `${rootURI}content/skin/citation-key.png`, }, sidenav: { - l10nID: 'betterbibtex-item-pane-header', + l10nID: 'better-bibtex_item-pane_section', icon: `${rootURI}content/skin/citation-key.png`, }, bodyXHTML: 'Citation Key ', diff --git a/locale/en-US/better-bibtex.ftl b/locale/en-US/better-bibtex.ftl index fd88083c66..a1fde9edaa 100644 --- a/locale/en-US/better-bibtex.ftl +++ b/locale/en-US/better-bibtex.ftl @@ -72,50 +72,10 @@ better-bibtex_export-options_worker = Background export better-bibtex_export-options_biblatexAPA = biblatex-apa better-bibtex_export-options_biblatexChicago = biblatex-chicago -unused_better-bibtex_first-run = - .title = Welcome to Better BibTeX for Zotero - .label = Welcome to Better BibTeX for Zotero +better-bibtex_item-pane_section = + .label = Citation key + .tooltip = Citation key -unused_better-bibtex_first-run_citekey-format = Your citation keys -unused_better-bibtex_first-run_citekey-format_bbt = - .label = Use the BBT default citekey format - - -unused_better-bibtex_first-run_citekey-format_explanation = BBT will generate citation keys for your items. The citekey generation is highly configurable, and you can choose to override the generation, but you will need to select the default now. You can always go into the preferences and change this at any time. - -unused_better-bibtex_first-run_citekey-format_explanation_bbt = New keys will be generated using the default BBT format. If you want a different format, change it in the preferences, then select all items, right-click, and select Refresh -unused_better-bibtex_first-run_citekey-format_explanation_example = your citation keys will look like - -unused_better-bibtex_first-run_citekey-format_explanation_zotero = Choose this option if you have existing documents that refer to keys generated by Zotero without the help of BBT. This will replicate the Zotero-generated keys faithfully, including known limitations in the Zotero key generator. Only use this if you need the keys to be exactly as Zotero generates them. -unused_better-bibtex_first-run_citekey-format_zotero = - .label = Use the Zotero default citekey format - -unused_better-bibtex_first-run_done = All Done! - -unused_better-bibtex_first-run_done_explanation = BBT is now set up for use. You can still change any of these settings by going into the Zotero preferences and opening the BBT tab. -unused_better-bibtex_first-run_drag-and-drop = Drag-and-drop citations -unused_better-bibtex_first-run_drag-and-drop_enable = - .label = Enable drag-and-drop citations - - -unused_better-bibtex_first-run_drag-and-drop_explanation = With BBT, you can drag-and-drop citations into your LaTeX editor of choice. Do you want to enable this now? -unused_better-bibtex_first-run_exporting = Exporting using BBT - -unused_better-bibtex_first-run_exporting_explanation = Exporting using BBT works as usual in Zotero, but make sure you have the right format selected; in the list of formats, instead of 'BibTeX', select -unused_better-bibtex_first-run_import-strings_enable = - .label = Expand @string journal names on import - - -unused_better-bibtex_first-run_import-strings_explanation = Some bibtex files use @string variables for journal names. If you enable this, BBT will use a list of common journal IDs to replace these variables with the full journal name -unused_better-bibtex_first-run_import_unabbreviate = Expand bibtex strings and journal abbreviations during import -unused_better-bibtex_first-run_import_unabbreviate_enable = - .label = Unabbreviate journal names on import - - -unused_better-bibtex_first-run_import_unabbreviate_explanation = Some bibtex files have journal abbreviations in the 'journal' field. If you enable this, BBT will attempt to replace those abbreviations with the full journal name during import of bibtex files - -unused_better-bibtex_first-run_welcome = Better BibTeX for Zotero (or BBT as it is commonly named) aims to make Zotero more useful for LaTeX and Markdown holdouts. There's a lot to configure about BBT -- take a look in the preferences if you're curious -- but let's start you off with a few simple choices. -better-bibtex_item-pane_citekey = Citation Key better-bibtex_preferences_advanced_export_brace-protection = .label = Apply case-protection to capitalized words by enclosing them in braces @@ -364,14 +324,10 @@ better-bibtex_preferences_export_quick-copy = Quick-Copy .label = { better-bibtex_preferences_export_quick-copy } better-bibtex_preferences_export_quick-copy_explanation = Quick-Copy/drag-and-drop citations better-bibtex_preferences_export_quick-copy_format = Quick-Copy format -unused_better-bibtex_preferences_export_quick-copy_atom = Atom - .label = { unused_better-bibtex_preferences_export_quick-copy_atom } better-bibtex_preferences_export_quick-copy_citekeys = Cite Keys .label = { better-bibtex_preferences_export_quick-copy_citekeys } better-bibtex_preferences_export_quick-copy_eta-template = Eta template .label = { better-bibtex_preferences_export_quick-copy_eta-template } -unused_better-bibtex_preferences_export_quick-copy_gitbook = GitBook - .label = { unused_better-bibtex_preferences_export_quick-copy_gitbook } better-bibtex_preferences_export_quick-copy_latex = LaTeX citation .label = { better-bibtex_preferences_export_quick-copy_latex } better-bibtex_preferences_export_quick-copy_latex_command = LaTeX command @@ -461,62 +417,3 @@ better-bibtex_zotero-pane_tex-studio = Push entries to TeXstudio betterbibtex-item-pane-header = Citation key -unused_better-bibtex_auto-export_too-long_body-eabled = Your { $translator } auto-export to { $path } took { $seconds } seconds. During exports of any kind, the Zotero user interface locks up. - -unused_better-bibtex_auto-export_too-long_prime-enabled = To minimize the effects of long-running auto-exports, cache priming has been turned on. This will make auto-exports slower, but will shorten the time that Zotero freezes to a minimum. - -unused_better-bibtex_auto-export_too-long_sorry = You already have cache priming on, and auto-export set to idle. Nothing more can be done without an architectural change in Zotero (https://u.nu/27e9). - -unused_better-bibtex_auto-export_too-long_suggest-idle = To minimize the effects of long-running auto-exports, you may want to set auto-export to "idle" instead of "immediate". -unused_better-bibtex_auto-export_too-long_title = Long-running auto-export -unused_better-bibtex_db_corrupt = There was an error opening your database - -unused_better-bibtex_db_corrupt_explanation = There was en error opening your database. This could mean your database is corrupt. The error reported by Zotero is: { $error }. - - To proceed, choose whether you want to: - - 1. have Zotero attempt to roll back to a previous backup by restarting now - 2. reset the Better BibTeX database and proceed - 3. quit Zotero and seek support to attempt to restore the database. - - Resetting will allow you to proceed, but your citation keys will be regenerated, and auto-exports will have to be set up anew. A backup of the corrupt database will be retained in case. - -unused_better-bibtex_db_corrupt_quit = Quit Zotero now -unused_better-bibtex_db_corrupt_reset = Reset and proceed -unused_better-bibtex_db_corrupt_restore = Restart Zotero and attempt restore - -unused_better-bibtex_error-report_out-of-memory = Your system likely ran out of memory assembling the log file. Please set '{ $preference }' to a value lower than the current { $limit }, restart, and try again. -unused_better-bibtex_key-manager_regenerate = (re)generating citation keys -unused_better-bibtex_key-manager_regenerate_confirm = (re)generating { $n } citekeys, proceed? -unused_better-bibtex_preferences_advanced = Advanced -unused_better-bibtex_preferences_advanced_export_workers = Parallel background exports: -unused_better-bibtex_preferences_advanced_import_unabbreviate = Expand abbreviated journal titles on import using list: -unused_better-bibtex_preferences_advanced_import_unabbreviate_off = None -unused_better-bibtex_preferences_advanced_tab_citekeys = Citation keys -unused_better-bibtex_preferences_advanced_tab_export = Export - -unused_better-bibtex_preferences_advanced_warning = Settings here will impact performance, and can cause breakage of exports. Proceed with care. -unused_better-bibtex_preferences_auto-export_collection = Collection -unused_better-bibtex_preferences_auto-export_library = Library -unused_better-bibtex_preferences_auto-export_warn_long-running = Warn me when auto-exports take longer than (seconds) -unused_better-bibtex_preferences_citekey_aux-scanner = BibTeX AUX/Markdown scanner -unused_better-bibtex_preferences_citekey_citekeys = Citation keys -unused_better-bibtex_startup_db-upgrade = Database cleanup { $n }/{ $total }... -unused_better-bibtex_startup_db-upgrade_not-editable = { $n } items not upgraded because they are read-only -unused_better-bibtex_startup_db-upgrade_saving = Database cleanup, saving... -unused_better-bibtex_startup_installing_translators_new = Better BibTeX: new translators installed -unused_better-bibtex_startup_installing_translators_new_dont-ask-again = Don't ask again - -unused_better-bibtex_startup_installing_translators_new_drag-and-drop = New Better BibTeX translators have been installed. If you want to use these for drag-and-drop (e.g. to drag and drop citekeys or citations), you will need to restart once to activate them. -unused_better-bibtex_startup_loading-keys = Loading citation keys -unused_better-bibtex_startup_loading_databases = Loading databases -unused_better-bibtex_startup_waiting_for_translators = Waiting for Zotero translators -unused_better-bibtex_texstudio_not_found = TeXstudio not found in { $path } -unused_better-bibtex_zotero-pane_server_disabled = Export by HTTP disabled -unused_preferences_auto-export_status_running = running -unused_preferences_auto-export_status_scheduled = scheduled - -unused_zotero_better-bibtex_csquotes = Replace left/right guillemets/double quotes with \\enquote{"{"}...{"}"} (requires csquotes) -xpi = - .description = Make Zotero useful for us LaTeX holdouts. - diff --git a/submodules/zotero b/submodules/zotero index b9a93faabb..da1eb6fda9 160000 --- a/submodules/zotero +++ b/submodules/zotero @@ -1 +1 @@ -Subproject commit b9a93faabb2001c5e565a1c3092d8dc4becb4d7e +Subproject commit da1eb6fda9626190702870959ca9f47df8d92521 From 4bac4fe3cb05583de06f7b40c95f08ce9ce88169 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Tue, 30 Apr 2024 08:37:17 +0200 Subject: [PATCH 117/177] sectionSummary --- content/better-bibtex.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/content/better-bibtex.ts b/content/better-bibtex.ts index 4ec30feed2..02987f6d1f 100644 --- a/content/better-bibtex.ts +++ b/content/better-bibtex.ts @@ -861,8 +861,10 @@ export class BetterBibTeX { }, bodyXHTML: 'Citation Key ', // onRender: ({ body, item, editable, tabType }) => { - onRender: ({ body, item }) => { - body.ownerDocument.getElementById('better-bibtex-citation-key').value = item.getField('citationKey') || '\u274C' + onRender: ({ body, item, setSectionSummary }) => { + const citekey = item.getField('citationKey') + body.ownerDocument.getElementById('better-bibtex-citation-key').value = citekey || '\u274C' + setSectionSummary(citekey || '') }, }) } From fca4267364222dc00be389f0f6f65bd58a56870c Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Tue, 30 Apr 2024 09:00:16 +0200 Subject: [PATCH 118/177] New Crowdin updates (#2854) * New translations better-bibtex.ftl (French) * New translations better-bibtex.ftl (German) * New translations better-bibtex.ftl (Italian) * New translations better-bibtex.ftl (Chinese Simplified) * New translations better-bibtex.ftl (Portuguese, Brazilian) --- locale/de-DE/better-bibtex.ftl | 86 ++-------------------------------- locale/fr-FR/better-bibtex.ftl | 86 ++-------------------------------- locale/it-IT/better-bibtex.ftl | 86 ++-------------------------------- locale/pt-BR/better-bibtex.ftl | 86 ++-------------------------------- locale/zh-CN/better-bibtex.ftl | 86 ++-------------------------------- 5 files changed, 15 insertions(+), 415 deletions(-) diff --git a/locale/de-DE/better-bibtex.ftl b/locale/de-DE/better-bibtex.ftl index fed1c640a2..878326b8a3 100644 --- a/locale/de-DE/better-bibtex.ftl +++ b/locale/de-DE/better-bibtex.ftl @@ -58,35 +58,9 @@ better-bibtex_export-options_reminder = Sind Sie sicher, dass Sie nicht das ''{ better-bibtex_export-options_worker = Hintergrund-Export better-bibtex_export-options_biblatexAPA = biblatex-apa better-bibtex_export-options_biblatexChicago = biblatex-chicago -unused_better-bibtex_first-run = - .title = Welcome to Better BibTeX for Zotero - .label = Welcome to Better BibTeX for Zotero -unused_better-bibtex_first-run_citekey-format = Your citation keys -unused_better-bibtex_first-run_citekey-format_bbt = - .label = Use the BBT default citekey format -unused_better-bibtex_first-run_citekey-format_explanation = BBT will generate citation keys for your items. The citekey generation is highly configurable, and you can choose to override the generation, but you will need to select the default now. You can always go into the preferences and change this at any time. -unused_better-bibtex_first-run_citekey-format_explanation_bbt = New keys will be generated using the default BBT format. If you want a different format, change it in the preferences, then select all items, right-click, and select Refresh -unused_better-bibtex_first-run_citekey-format_explanation_example = your citation keys will look like -unused_better-bibtex_first-run_citekey-format_explanation_zotero = Choose this option if you have existing documents that refer to keys generated by Zotero without the help of BBT. This will replicate the Zotero-generated keys faithfully, including known limitations in the Zotero key generator. Only use this if you need the keys to be exactly as Zotero generates them. -unused_better-bibtex_first-run_citekey-format_zotero = - .label = Use the Zotero default citekey format -unused_better-bibtex_first-run_done = All Done! -unused_better-bibtex_first-run_done_explanation = BBT is now set up for use. You can still change any of these settings by going into the Zotero preferences and opening the BBT tab. -unused_better-bibtex_first-run_drag-and-drop = Drag-and-drop citations -unused_better-bibtex_first-run_drag-and-drop_enable = - .label = Enable drag-and-drop citations -unused_better-bibtex_first-run_drag-and-drop_explanation = With BBT, you can drag-and-drop citations into your LaTeX editor of choice. Do you want to enable this now? -unused_better-bibtex_first-run_exporting = Exporting using BBT -unused_better-bibtex_first-run_exporting_explanation = Exporting using BBT works as usual in Zotero, but make sure you have the right format selected; in the list of formats, instead of 'BibTeX', select -unused_better-bibtex_first-run_import-strings_enable = - .label = Expand @string journal names on import -unused_better-bibtex_first-run_import-strings_explanation = Some bibtex files use @string variables for journal names. If you enable this, BBT will use a list of common journal IDs to replace these variables with the full journal name -unused_better-bibtex_first-run_import_unabbreviate = Expand bibtex strings and journal abbreviations during import -unused_better-bibtex_first-run_import_unabbreviate_enable = - .label = Unabbreviate journal names on import -unused_better-bibtex_first-run_import_unabbreviate_explanation = Some bibtex files have journal abbreviations in the 'journal' field. If you enable this, BBT will attempt to replace those abbreviations with the full journal name during import of bibtex files -unused_better-bibtex_first-run_welcome = Better BibTeX for Zotero (or BBT as it is commonly named) aims to make Zotero more useful for LaTeX and Markdown holdouts. There's a lot to configure about BBT -- take a look in the preferences if you're curious -- but let's start you off with a few simple choices. -better-bibtex_item-pane_citekey = Zitierschlüssel +better-bibtex_item-pane_section = + .label = Citation key + .tooltip = Citation key better-bibtex_preferences_advanced_export_brace-protection = .label = Groß-/Kleinschreibung auf Groß- und Kleinschreibung anwenden, indem sie Klammern beigefügt wird better-bibtex_preferences_advanced_export_brace-protection_warning = Wenn Sie sowohl BibTeX/BibLaTeX Best Practice (siehe BBT FAQ) als auch die Zotero-Empfehlungen zum Titel-/Satz-Casing ignorieren möchten, können Sie dies ausschalten, um das Titel-Casing für englische Referenzen zu unterdrücken @@ -280,14 +254,10 @@ better-bibtex_preferences_export_quick-copy = Schnellkopie .label = { better-bibtex_preferences_export_quick-copy } better-bibtex_preferences_export_quick-copy_explanation = Schnellkopie/Drag-and-Drop-Zitat better-bibtex_preferences_export_quick-copy_format = Schnellkopie-Format -unused_better-bibtex_preferences_export_quick-copy_atom = Atom - .label = { unused_better-bibtex_preferences_export_quick-copy_atom } better-bibtex_preferences_export_quick-copy_citekeys = Zitierschlüssel .label = { better-bibtex_preferences_export_quick-copy_citekeys } better-bibtex_preferences_export_quick-copy_eta-template = Eta-Template .label = { better-bibtex_preferences_export_quick-copy_eta-template } -unused_better-bibtex_preferences_export_quick-copy_gitbook = GitBook - .label = { unused_better-bibtex_preferences_export_quick-copy_gitbook } better-bibtex_preferences_export_quick-copy_latex = LaTeX-Zitat .label = { better-bibtex_preferences_export_quick-copy_latex } better-bibtex_preferences_export_quick-copy_latex_command = LaTeX-Befehl @@ -364,53 +334,3 @@ better-bibtex_zotero-pane_show_collection-key = Download Better-BibTeX-Export... better-bibtex_zotero-pane_tag_duplicates = Markiere doppelte Zitierschlüssel better-bibtex_zotero-pane_tex-studio = Einträge an TeXstudio senden betterbibtex-item-pane-header = Citation key -unused_better-bibtex_auto-export_too-long_body-eabled = Ihr { $translator }-Auto-Export nach { $path } dauerte { $seconds } Sekunden. Während Exporten jeglicher Art wird die Zotero-Benutzeroberfläche gesperrt. -unused_better-bibtex_auto-export_too-long_prime-enabled = Um die Auswirkungen von lang laufenden Auto-Exporten zu minimieren, wurde das Cache-Priming aktiviert. Dies macht den Auto-Export langsamer, verkürzt aber die Zeit, die Zotero einfriert, auf ein Minimum. -unused_better-bibtex_auto-export_too-long_sorry = Sie haben bereits Cache-Priming eingeschaltet und den Auto-Export auf "Wenn unbeschäftigt" gesetzt. Ohne Änderungen in der Architektur von Zotero (https://u.nu/27e9) kann nichts mehr getan werden. -unused_better-bibtex_auto-export_too-long_suggest-idle = Um die Auswirkungen von lang laufenden Auto-Exporten zu minimieren, sollten Sie den Auto-Export auf "Wenn unbeschäftigt" statt auf "Bei Veränderung" setzen. -unused_better-bibtex_auto-export_too-long_title = Lang andauernder Auto-Export -unused_better-bibtex_db_corrupt = Beim Öffnen der Datenbank ist ein Fehler aufgetreten -unused_better-bibtex_db_corrupt_explanation = - Beim Öffnen der Datenbank ist ein Fehler aufgetreten. Dies könnte bedeuten, dass Ihre Datenbank beschädigt ist. Der von Zotero gemeldete Fehler ist: { $error }. - - Um fortzufahren, wählen Sie eine der folgenden Optionen: - - 1. Lassen Sie Zotero versuchen, zu einem früheren Backup zurückzukehren, indem Sie jetzt neu starten - 2. Setzen Sie die Better BibTeX-Datenbank zurück und fahren Sie fort - 3. Beenden Sie Zotero und wenden Sie sich an den Support, um eine Wiederherstellung der Datenbank zu versuchen. - - Das Zurücksetzen ermöglicht es Ihnen fortzufahren, aber Ihre Zitierschlüssel werden neu generiert und der automatische Export muss neu eingerichtet werden. Ein Backup der beschädigten Datenbank wird zur Sicherheit aufbewahrt. -unused_better-bibtex_db_corrupt_quit = Zotero jetzt beenden -unused_better-bibtex_db_corrupt_reset = Zurücksetzen und fortfahren -unused_better-bibtex_db_corrupt_restore = Zotero neu starten und Wiederherstellung versuchen -unused_better-bibtex_error-report_out-of-memory = Ihr System verfügt aktuell nicht über genug Speicher für die Zusammenstellung der Log-Datei. Bitte setzen Sie ''{ $preference }'' auf einen Wert, der niedriger ist als das aktuelle { $limit }, starten Sie neu und versuchen Sie es erneut. -unused_better-bibtex_key-manager_regenerate = Erzeuge/ersetze Zitierschlüssel -unused_better-bibtex_key-manager_regenerate_confirm = Erzeuge/ersetze { $n } Zitierschlüssel, fortfahren? -unused_better-bibtex_preferences_advanced = Erweitert -unused_better-bibtex_preferences_advanced_export_workers = Parallele Hintergrundexporte: -unused_better-bibtex_preferences_advanced_import_unabbreviate = Abgekürzte Zeitschriftentitel beim Import erweitern anhand der Liste: -unused_better-bibtex_preferences_advanced_import_unabbreviate_off = Kein -unused_better-bibtex_preferences_advanced_tab_citekeys = Citation keys -unused_better-bibtex_preferences_advanced_tab_export = Export -unused_better-bibtex_preferences_advanced_warning = Diese Einstellungen werden die Leistung beeinträchtigen und können zu einem Abbruch der Exporte führen. Behandeln Sie sie mit Vorsicht. -unused_better-bibtex_preferences_auto-export_collection = Sammlung -unused_better-bibtex_preferences_auto-export_library = Bibliothek -unused_better-bibtex_preferences_auto-export_warn_long-running = Warne mich, wenn Auto-Exporte länger dauern als (seconds) -unused_better-bibtex_preferences_citekey_aux-scanner = BibTeX AUX-/Markdown-Scanner -unused_better-bibtex_preferences_citekey_citekeys = Citation keys -unused_better-bibtex_startup_db-upgrade = Datenbankbereinigung { $n }/{ $total }... -unused_better-bibtex_startup_db-upgrade_not-editable = { $n } Einträge nicht aktualisiert, weil sie schreibgeschützt sind -unused_better-bibtex_startup_db-upgrade_saving = Datenbankbereinigung, speichern... -unused_better-bibtex_startup_installing_translators_new = Better BibTeX: neue Übersetzer installiert -unused_better-bibtex_startup_installing_translators_new_dont-ask-again = Nicht nochmals fragen -unused_better-bibtex_startup_installing_translators_new_drag-and-drop = Neue Better BibTeX-Übersetzer wurden installiert. Wenn Sie diese für Drag-and-Drop verwenden wollen (z. B. um per Drag-and-Drop Zitierschlüssel oder Zitate zu übernehmen), ist ein einmaliger Neustart notwendig, um sie zu aktivieren. -unused_better-bibtex_startup_loading-keys = Lade Zitierschlüssel -unused_better-bibtex_startup_loading_databases = Loading databases -unused_better-bibtex_startup_waiting_for_translators = Warten auf Zotero-Übersetzer -unused_better-bibtex_texstudio_not_found = TeXstudio nicht gefunden in { $path } -unused_better-bibtex_zotero-pane_server_disabled = Exportier über HTTP ausgestellt -unused_preferences_auto-export_status_running = läuft -unused_preferences_auto-export_status_scheduled = geplant -unused_zotero_better-bibtex_csquotes = Ersetze links/rechts (doppelte) Anführungszeichen mit \\enquote{ "{" }...{ "}" } (benötigt csquotes) -xpi = - .description = Macht Zotero für uns LaTeX-Holdouts nutzbar. diff --git a/locale/fr-FR/better-bibtex.ftl b/locale/fr-FR/better-bibtex.ftl index b7f281cd52..02535c26cd 100644 --- a/locale/fr-FR/better-bibtex.ftl +++ b/locale/fr-FR/better-bibtex.ftl @@ -58,35 +58,9 @@ better-bibtex_export-options_reminder = Êtes-vous sûr de ne pas vouloir du for better-bibtex_export-options_worker = Exportation en arrière-plan better-bibtex_export-options_biblatexAPA = biblatex-apa better-bibtex_export-options_biblatexChicago = biblatex-chicago -unused_better-bibtex_first-run = - .title = Bienvenue sur Better BibTeX pour Zotero - .label = Bienvenue sur Better BibTeX pour Zotero -unused_better-bibtex_first-run_citekey-format = Vos clés de citation -unused_better-bibtex_first-run_citekey-format_bbt = - .label = Utiliser le format de clé de citation par défaut de BBT -unused_better-bibtex_first-run_citekey-format_explanation = BBT va générer des clés de citation pour vos entrées bibliographiques. La génération de clés de citation est hautement configurable, et vous pouvez choisir de remplacer la génération, mais vous devrez sélectionner la valeur par défaut dès maintenant. Vous pouvez toujours aller dans les préférences et changer cela à tout moment. -unused_better-bibtex_first-run_citekey-format_explanation_bbt = Les nouvelles clés de citation seront par défaut générées en utilisant le format de BBT. Si vous voulez un format différent, modifiez-le dans les préférences, puis sélectionnez tous les éléments, cliquez avec le bouton droit et sélectionnez Actualiser -unused_better-bibtex_first-run_citekey-format_explanation_example = vos clés de citation ressembleront à -unused_better-bibtex_first-run_citekey-format_explanation_zotero = Choisissez cette option si vous avez des documents qui font référence à des clés générées par Zotero sans l'aide de BBT. Cela va reproduire fidèlement les clés générées par Zotero, y compris les limitations connues du générateur de clé de Zotero. N'utilisez ceci que s'il vous est nécessaire que les clés soient exactement les mêmes que celles générées par Zotero. -unused_better-bibtex_first-run_citekey-format_zotero = - .label = Utiliser le format par défaut de Zotero pour la clé de citation -unused_better-bibtex_first-run_done = Et voilà ! -unused_better-bibtex_first-run_done_explanation = BBT est maintenant configuré. Vous pouvez toujours modifier l'un de ces paramètres dans les préférences de Zotero, onglet 'Better BibTeX'. -unused_better-bibtex_first-run_drag-and-drop = Citations par glisser-déposer -unused_better-bibtex_first-run_drag-and-drop_enable = - .label = Activer les citations par glisser-déposer -unused_better-bibtex_first-run_drag-and-drop_explanation = BBT vous permet de glisser-déposer vos références dans l'éditeur LaTeX de votre choix. Voulez-vous activer cette fonctionnalité dès maintenant ? -unused_better-bibtex_first-run_exporting = Exporter en utilisant BBT -unused_better-bibtex_first-run_exporting_explanation = L'exportation à l'aide de BBT fonctionne comme d'habitude dans Zotero, mais assurez-vous d'avoir sélectionné le bon format ; dans la liste des formats, au lieu de 'BibTeX', sélectionnez -unused_better-bibtex_first-run_import-strings_enable = - .label = Développer les noms de journaux @string à l'importation -unused_better-bibtex_first-run_import-strings_explanation = Certains fichiers bibtex utilisent des variables @string pour les noms de journaux. Si vous activez ceci, BBT utilisera une liste d'ID communs de journaux pour remplacer ces variables par les noms complets de ces journaux -unused_better-bibtex_first-run_import_unabbreviate = Développer les chaînes de caractères bibtex et les abréviations de journaux pendant l'importation -unused_better-bibtex_first-run_import_unabbreviate_enable = - .label = Désabréger les noms de journaux lors de l'importation -unused_better-bibtex_first-run_import_unabbreviate_explanation = Certains fichiers bibtex ont des abréviations de journaux dans le champ « journal ». Si vous activez ceci, BBT tentera de remplacer ces abréviations par le nom complet du journal lors de l'importation de fichiers bibtex -unused_better-bibtex_first-run_welcome = Better BibTex pour Zotero (ou BBT) ajoute à Zotero une compatibilité étendue avec LaTeX ou Markdown. BBT est totalement configurable -- rendez-vous dans les préférences si vous êtes curieux -- mais nous allons commencer avec quelques choix simples. -better-bibtex_item-pane_citekey = Clé de citation +better-bibtex_item-pane_section = + .label = Clé de citation + .tooltip = Clé de citation better-bibtex_preferences_advanced_export_brace-protection = .label = Appliquer la protection de la casse aux mots en capitales en les insérant entre paires d'accolades better-bibtex_preferences_advanced_export_brace-protection_warning = Si vous n'êtes pas prêt à ignorer à la fois les meilleures pratiques BibTeX/BibLaTeX (voir la FAQ BBT) et les recommandations de Zotero sur le tire/phrase, vous pouvez désactiver cette option pour supprimer la protection automatique des accolades pour les mots avec des lettres capitales. @@ -281,14 +255,10 @@ better-bibtex_preferences_export_quick-copy = Copie rapide .label = { better-bibtex_preferences_export_quick-copy } better-bibtex_preferences_export_quick-copy_explanation = Copie rapide/glissé-déposé des citations better-bibtex_preferences_export_quick-copy_format = Format de copie rapide -unused_better-bibtex_preferences_export_quick-copy_atom = Atom - .label = { unused_better-bibtex_preferences_export_quick-copy_atom } better-bibtex_preferences_export_quick-copy_citekeys = Clés de citation .label = { better-bibtex_preferences_export_quick-copy_citekeys } better-bibtex_preferences_export_quick-copy_eta-template = Canevas Eta .label = { better-bibtex_preferences_export_quick-copy_eta-template } -unused_better-bibtex_preferences_export_quick-copy_gitbook = GitBook - .label = { unused_better-bibtex_preferences_export_quick-copy_gitbook } better-bibtex_preferences_export_quick-copy_latex = Citation LaTeX .label = { better-bibtex_preferences_export_quick-copy_latex } better-bibtex_preferences_export_quick-copy_latex_command = Commande LaTeX @@ -365,53 +335,3 @@ better-bibtex_zotero-pane_show_collection-key = Télécharger l'export de Better better-bibtex_zotero-pane_tag_duplicates = Tagguer les clés de citation doublons better-bibtex_zotero-pane_tex-studio = Envoyer les citations vers TeXstudio betterbibtex-item-pane-header = Clé de citation -unused_better-bibtex_auto-export_too-long_body-eabled = Votre exportation automatique { $translator } à { $path } a pris { $seconds } secondes. Pendant les exportations de quelque type que ce soit, l''interface utilisateur de Zotero est verrouillée. -unused_better-bibtex_auto-export_too-long_prime-enabled = Pour minimiser les effets des exportations automatiques durant (trop) longtemps, la mise en place du cache a été activée. Cela rendra les exportations automatiques plus lentes, mais réduira au maximum le temps pendant lequel Zotero est inutilisable. -unused_better-bibtex_auto-export_too-long_sorry = Vous avez déjà activé la mise en place du cache, et l'exportation automatique est activée. Rien de plus ne peut être fait sans un changement de l'architecture de Zotero (https://u.nu/27e9). -unused_better-bibtex_auto-export_too-long_suggest-idle = Pour minimiser les effets des exportations automatiques durant (trop) longtemps, vous pouvez configurer l'exportation automatique en « Inactif » au lieu de « Immédiat ». -unused_better-bibtex_auto-export_too-long_title = (Longue) exportation automatique en cours -unused_better-bibtex_db_corrupt = Une erreur s'est produite lors de l'ouverture de votre base de données -unused_better-bibtex_db_corrupt_explanation = - Une erreur s''est produite lors de l''ouverture de votre base de données. Cela pourrait signifier que votre base de données est corrompue. L''erreur signalée par Zotero est la suivante: { $error }. - - Pour continuer, indiquez si vous souhaitez : - - 1. demander à Zotero de restaurer une sauvegarde précédente en redémarrant maintenant ; - 2. réinitialiser la base de données Better BibTeX et continuer - 3. quitter Zotero et solliciter l''assistance pour tenter de restaurer la base de données. - - La réinitialisation vous permettra de continuer, mais vos clés de citation seront régénérées et les exportations automatiques devront être configurées à nouveau. Une sauvegarde de la base de données corrompue sera conservée au cas où. -unused_better-bibtex_db_corrupt_quit = Quitter Zotero maintenant -unused_better-bibtex_db_corrupt_reset = Réinitialiser et continuer -unused_better-bibtex_db_corrupt_restore = Redémarrer Zotero et tenter de restaurer -unused_better-bibtex_error-report_out-of-memory = Votre système est probablement à court de mémoire lors de l’assemblage du fichier journal. Veuillez définir ''{ $preference }'' sur une valeur inférieure à la { $limit } actuelle, redémarrez et réessayez. -unused_better-bibtex_key-manager_regenerate = (ré)génération des clés de citation -unused_better-bibtex_key-manager_regenerate_confirm = { $n } clés de citation à (ré)générer : continuer ? -unused_better-bibtex_preferences_advanced = Avancé -unused_better-bibtex_preferences_advanced_export_workers = Exportation parallèle en arrière-plan : -unused_better-bibtex_preferences_advanced_import_unabbreviate = Développer les titres abrégés de journaux à importer à l'aide de la liste : -unused_better-bibtex_preferences_advanced_import_unabbreviate_off = Aucun -unused_better-bibtex_preferences_advanced_tab_citekeys = Clés de citation -unused_better-bibtex_preferences_advanced_tab_export = Exportation -unused_better-bibtex_preferences_advanced_warning = Les paramètres ci-dessous ont un impact sur les performances et peuvent faire échouer les exportations. Procéder avec attention. -unused_better-bibtex_preferences_auto-export_collection = Collection -unused_better-bibtex_preferences_auto-export_library = Bibliothèque -unused_better-bibtex_preferences_auto-export_warn_long-running = M'avertir lorsque les exportations automatiques durent plus de (en secondes) -unused_better-bibtex_preferences_citekey_aux-scanner = Scanner BibTeX AUX/Markdown -unused_better-bibtex_preferences_citekey_citekeys = Clés de citation -unused_better-bibtex_startup_db-upgrade = Nettoyage de la base de données { $n }/{ $total }... -unused_better-bibtex_startup_db-upgrade_not-editable = { $n } éléments non mis à jour car en lecture seule -unused_better-bibtex_startup_db-upgrade_saving = Nettoyage de la base de données, sauvegarde... -unused_better-bibtex_startup_installing_translators_new = Better BibTeX : nouveaux convertisseurs installés -unused_better-bibtex_startup_installing_translators_new_dont-ask-again = Ne plus le demander -unused_better-bibtex_startup_installing_translators_new_drag-and-drop = De nouveaux convertisseurs Better BibTeX ont été installés. Si vous voulez les utiliser pour glisser-déposer (par exemple pour glisser et déposer des clés de citation ou des citations), vous devrez redémarrer une fois pour les activer. -unused_better-bibtex_startup_loading-keys = Chargement des clés de citation -unused_better-bibtex_startup_loading_databases = Chargement des bases de données -unused_better-bibtex_startup_waiting_for_translators = En attente des convertisseurs Zotero -unused_better-bibtex_texstudio_not_found = TeXstudio est introuvable dans { $path } -unused_better-bibtex_zotero-pane_server_disabled = Exportation par HTTP désactivée -unused_preferences_auto-export_status_running = En cours... -unused_preferences_auto-export_status_scheduled = Planifié -unused_zotero_better-bibtex_csquotes = Remplacer les guillemets par la commande '\\enquote{ "{" }...{ "}" }' (nécessite le package « csquotes ») -xpi = - .description = Ajoute à Zotero une compatibilité étendue avec LaTeX diff --git a/locale/it-IT/better-bibtex.ftl b/locale/it-IT/better-bibtex.ftl index 0221e7915e..0b1829cf5c 100644 --- a/locale/it-IT/better-bibtex.ftl +++ b/locale/it-IT/better-bibtex.ftl @@ -58,35 +58,9 @@ better-bibtex_export-options_reminder = Si è sicuri di non volere il formato '{ better-bibtex_export-options_worker = Esportazione in background better-bibtex_export-options_biblatexAPA = biblatex-apa better-bibtex_export-options_biblatexChicago = biblatex-chicago -unused_better-bibtex_first-run = - .title = Ti presentiamo Better BibTeX per Zotero - .label = Ti presentiamo Better BibTeX per Zotero -unused_better-bibtex_first-run_citekey-format = Le tue chiavi di citazione -unused_better-bibtex_first-run_citekey-format_bbt = - .label = Usa il formato predefinito delle chiavi di citazione di BBT -unused_better-bibtex_first-run_citekey-format_explanation = BBT genererà delle chiavi per i tuoi elementi. La generazione è altamente configurabile, ed è possibile escluderla, ma va comunque impostato un parametro di default. È possibile modificare questa scelta nelle preferenze in ogni momento. -unused_better-bibtex_first-run_citekey-format_explanation_bbt = Verranno generate nuove chiavi con il formato predefinito di BBT. Se si desidera un formato diverso, modificarlo nelle preferenze, selezionare tutti gli elementi, fare click con il tasto destro e infine 'Aggiorna'. -unused_better-bibtex_first-run_citekey-format_explanation_example = le chiavi di citazione appariranno come -unused_better-bibtex_first-run_citekey-format_explanation_zotero = Scegli questa opzionie se hai dei documenti che utilizzano delle chiavi generate da Zotero senza l'aiuto di BBT. Questa opzione replicherà fedelmente le chiavi generate da Zotero, includese le limitazioni note del generatore di chiavi di Zotero. Usa questa opzione solo se necessiti di chiavi identiche a quelle generate da Zotero. -unused_better-bibtex_first-run_citekey-format_zotero = - .label = Usa il formato predefinito di Zotero per le chiavi di citazione -unused_better-bibtex_first-run_done = Fatto! -unused_better-bibtex_first-run_done_explanation = BBT è pronto per l'uso. Puoi cambiare qualsiasi opzione andando nella finestra delle preferenze e aprendo la scheda BBT. -unused_better-bibtex_first-run_drag-and-drop = Trascina citazioni -unused_better-bibtex_first-run_drag-and-drop_enable = - .label = Attiva trascinamento delle citazioni -unused_better-bibtex_first-run_drag-and-drop_explanation = Con BBT, puoi trascinare le citazioni nel tuo editor LaTeX preferito. Vuoi attivare la funzione? -unused_better-bibtex_first-run_exporting = Esportazione con BBT -unused_better-bibtex_first-run_exporting_explanation = L'esportazione con BBT funziona come di consueto in Zotero, ma assicurati di selezionare il formato corretto; al posto di 'BibTeX', seleziona -unused_better-bibtex_first-run_import-strings_enable = - .label = Espandi le variabili @string con i titoli delle riviste durante l'importazione -unused_better-bibtex_first-run_import-strings_explanation = Alcuni file bibtex usano delle variabili @string per i titoli delle riviste. Con questa opzione attiva, BBT userà una lista di ID di riviste più comuni per sostituire le variabili con il titolo intero. -unused_better-bibtex_first-run_import_unabbreviate = Espandi le stringhe bibtex e le abbreviazioni dei titoli delle riviste durante l'importazione -unused_better-bibtex_first-run_import_unabbreviate_enable = - .label = Svolgi le abbreviazioni dei titoli delle riviste durante l'importazione -unused_better-bibtex_first-run_import_unabbreviate_explanation = Alcuni file bibtex usano delle abbreviazioni nel campo 'journal'. Con questa opzione attiva, BBT cercherà di sostituire alla abbreviazioni il titolo delle riviste per esteso durante l'importazione dei file bibtex. -unused_better-bibtex_first-run_welcome = Better BibTeX for Zotero (o, più comunemente, BBT) vuole rendere Zotero più utile per gli utilizzatori abituali di LaTeX o Markdown. Ci sono un sacco di opzioni configurabili -- vedere le preferenze per credere -- ma iniziamo con delle scelte semplici. -better-bibtex_item-pane_citekey = Citation Key +better-bibtex_item-pane_section = + .label = Citation key + .tooltip = Citation key better-bibtex_preferences_advanced_export_brace-protection = .label = Includi le parole in maiuscolo tra graffe per preservare i caratteri così come scritti better-bibtex_preferences_advanced_export_brace-protection_warning = Se si vuole ignorare sia le buone pratiche di BibTeX/BibLaTeX (vedi le FAQ di BBT) e le raccomandazioni di Zotero sulle maiuscole, si può disattivare questa opzione per prevenire la protezione con graffe delle parole in maiuscolo. @@ -280,14 +254,10 @@ better-bibtex_preferences_export_quick-copy = Copia veloce .label = { better-bibtex_preferences_export_quick-copy } better-bibtex_preferences_export_quick-copy_explanation = Copia veloce/trascinamento citazioni better-bibtex_preferences_export_quick-copy_format = Formato Copia veloce -unused_better-bibtex_preferences_export_quick-copy_atom = Atom - .label = { unused_better-bibtex_preferences_export_quick-copy_atom } better-bibtex_preferences_export_quick-copy_citekeys = Chiavi di citazione .label = { better-bibtex_preferences_export_quick-copy_citekeys } better-bibtex_preferences_export_quick-copy_eta-template = Template Eta .label = { better-bibtex_preferences_export_quick-copy_eta-template } -unused_better-bibtex_preferences_export_quick-copy_gitbook = GitBook - .label = { unused_better-bibtex_preferences_export_quick-copy_gitbook } better-bibtex_preferences_export_quick-copy_latex = Citazione LaTeX .label = { better-bibtex_preferences_export_quick-copy_latex } better-bibtex_preferences_export_quick-copy_latex_command = Comando LaTeX @@ -364,53 +334,3 @@ better-bibtex_zotero-pane_show_collection-key = Scarica esportazione di Better B better-bibtex_zotero-pane_tag_duplicates = Tagga chiavi di citazione duplicate better-bibtex_zotero-pane_tex-studio = Invia voci a TeXstudio betterbibtex-item-pane-header = Citation key -unused_better-bibtex_auto-export_too-long_body-eabled = La tua esportazione automatica di { $translator } in { $path } ha impiegato { $seconds } secondi. Durante le esportazioni, l'interfaccia di Zotero non risponde. -unused_better-bibtex_auto-export_too-long_prime-enabled = Per ridurre al minimo i disagi dovuti a esportazioni automatiche di lunga durata, è stato attivato il pre-caricamento della cache. Ciò renderà le esportazioni più lente, ma ridurrà al minimo il blocco di Zotero. -unused_better-bibtex_auto-export_too-long_sorry = Il pre-caricamento della cache è già attivo, e le esportazioni automatiche impostate durante i periodi di inattività. Ulteriori miglioramenti non sono possibili senza un cambio di architettura in Zotero (https://u.nu/27e9). -unused_better-bibtex_auto-export_too-long_suggest-idle = Per ridurre al minimo i disagi dovuti a esportazioni automatiche di lunga durata, si consiglia di impostare le esportazioni automatica a "quando inattivo" invece di "a ogni modifica". -unused_better-bibtex_auto-export_too-long_title = Esportazioni automatiche di lunga durata -unused_better-bibtex_db_corrupt = Si è verificato un errore nell'apertura del tuo database -unused_better-bibtex_db_corrupt_explanation = - Si è verificato un errore nell'apertura del tuo database. Questo può indicare che il database è corrotto. L'errore riportato da Zotero è: { $error }. - - Si prega di scegliere come si desidera procedere: - - 1. chiedere a Zotero di recuperare un backup del database e riavviare - 2. effettuare il reset del database di Better BibTeX database e continuare - 3. chiudere Zotero e contattare il supporto per provare a recuperare il database. - - Il reset ti consentirà ti proseguire, ma le chiavi di citazione verranno generate di nuovo e le esportazioni automatiche andranno re-impostate. In questo caso verrà mantenuta una copia di backup del database corrotto. -unused_better-bibtex_db_corrupt_quit = Esci da Zotero -unused_better-bibtex_db_corrupt_reset = Reset e procedi -unused_better-bibtex_db_corrupt_restore = Riavvia Zotero e tenta il ripristino -unused_better-bibtex_error-report_out-of-memory = È probabile che il tuo sistema esaurisca la memoria nel tentativo di costruire il file di log. Si prega di impostare la voce '{ $preference }' a un valore più basso dell'attuale { $limit }, riavviare, quindi provare di nuovo. -unused_better-bibtex_key-manager_regenerate = (ri)generazione delle chiavi di citazione in corso -unused_better-bibtex_key-manager_regenerate_confirm = (ri)generazione di { $n } chiavi, confermi? -unused_better-bibtex_preferences_advanced = Avanzate -unused_better-bibtex_preferences_advanced_export_workers = Esportazioni parallele in background: -unused_better-bibtex_preferences_advanced_import_unabbreviate = Espandi i titoli di rivista abbreviati durante l'importazione usando la lista: -unused_better-bibtex_preferences_advanced_import_unabbreviate_off = Nessuna -unused_better-bibtex_preferences_advanced_tab_citekeys = Chiavi di citazione -unused_better-bibtex_preferences_advanced_tab_export = Esporta -unused_better-bibtex_preferences_advanced_warning = Le impostazioni qui presenti possono avere un effetto sulle prestazioni, e causare l'interruzione delle esportazioni. Procedere con cautela. -unused_better-bibtex_preferences_auto-export_collection = Collezione -unused_better-bibtex_preferences_auto-export_library = Biblioteca -unused_better-bibtex_preferences_auto-export_warn_long-running = Avvisami quando le esportazioni automatiche impiegano più di (seconds) -unused_better-bibtex_preferences_citekey_aux-scanner = Analizzatore di file BibTeX AUX/Markdown -unused_better-bibtex_preferences_citekey_citekeys = Chiavi di citazione -unused_better-bibtex_startup_db-upgrade = Pulizia database { $n }/{ $total }... -unused_better-bibtex_startup_db-upgrade_not-editable = { $n } elementi non aggiornati poiché in sola lettura -unused_better-bibtex_startup_db-upgrade_saving = Pulizia database, salvataggio... -unused_better-bibtex_startup_installing_translators_new = Better BibTeX: installati nuovi programmi traduttori -unused_better-bibtex_startup_installing_translators_new_dont-ask-again = Non chiedere di nuovo -unused_better-bibtex_startup_installing_translators_new_drag-and-drop = Sono stati installati nuovi programmi traduttori per Better BibTeX. Se si desidera usarli nelle operazioni di trascinamento (per trascinare citazioni), è necessario riavviare l'applicazione per attivarli. -unused_better-bibtex_startup_loading-keys = Caricamento chiavi di citazione -unused_better-bibtex_startup_loading_databases = Caricamento database -unused_better-bibtex_startup_waiting_for_translators = In attesa dei programmi traduttori di Zotero -unused_better-bibtex_texstudio_not_found = TeXstudio non trovato all'indirizzo { $path } -unused_better-bibtex_zotero-pane_server_disabled = Esportazione via HTTP disabilitata -unused_preferences_auto-export_status_running = in esecuzione -unused_preferences_auto-export_status_scheduled = programmato -unused_zotero_better-bibtex_csquotes = Sostituisci virgolette doppie o uncinate con \\enquote{ "{" }...{ "}" } (richiede pacchetto csquotes) -xpi = - .description = Rendi Zotero più utile per chi, come noi, è rimasto fedele a LaTeX. diff --git a/locale/pt-BR/better-bibtex.ftl b/locale/pt-BR/better-bibtex.ftl index 6b76545b11..feca50ecad 100644 --- a/locale/pt-BR/better-bibtex.ftl +++ b/locale/pt-BR/better-bibtex.ftl @@ -58,35 +58,9 @@ better-bibtex_export-options_reminder = Tem certeza que você não quer o format better-bibtex_export-options_worker = Background export better-bibtex_export-options_biblatexAPA = biblatex-apa better-bibtex_export-options_biblatexChicago = biblatex-chicago -unused_better-bibtex_first-run = - .title = Welcome to Better BibTeX for Zotero - .label = Welcome to Better BibTeX for Zotero -unused_better-bibtex_first-run_citekey-format = Your citation keys -unused_better-bibtex_first-run_citekey-format_bbt = - .label = Use the BBT default citekey format -unused_better-bibtex_first-run_citekey-format_explanation = BBT will generate citation keys for your items. The citekey generation is highly configurable, and you can choose to override the generation, but you will need to select the default now. You can always go into the preferences and change this at any time. -unused_better-bibtex_first-run_citekey-format_explanation_bbt = New keys will be generated using the default BBT format. If you want a different format, change it in the preferences, then select all items, right-click, and select Refresh -unused_better-bibtex_first-run_citekey-format_explanation_example = your citation keys will look like -unused_better-bibtex_first-run_citekey-format_explanation_zotero = Choose this option if you have existing documents that refer to keys generated by Zotero without the help of BBT. This will replicate the Zotero-generated keys faithfully, including known limitations in the Zotero key generator. Only use this if you need the keys to be exactly as Zotero generates them. -unused_better-bibtex_first-run_citekey-format_zotero = - .label = Use the Zotero default citekey format -unused_better-bibtex_first-run_done = All Done! -unused_better-bibtex_first-run_done_explanation = BBT is now set up for use. You can still change any of these settings by going into the Zotero preferences and opening the BBT tab. -unused_better-bibtex_first-run_drag-and-drop = Drag-and-drop citations -unused_better-bibtex_first-run_drag-and-drop_enable = - .label = Enable drag-and-drop citations -unused_better-bibtex_first-run_drag-and-drop_explanation = With BBT, you can drag-and-drop citations into your LaTeX editor of choice. Do you want to enable this now? -unused_better-bibtex_first-run_exporting = Exporting using BBT -unused_better-bibtex_first-run_exporting_explanation = Exporting using BBT works as usual in Zotero, but make sure you have the right format selected; in the list of formats, instead of 'BibTeX', select -unused_better-bibtex_first-run_import-strings_enable = - .label = Expand @string journal names on import -unused_better-bibtex_first-run_import-strings_explanation = Some bibtex files use @string variables for journal names. If you enable this, BBT will use a list of common journal IDs to replace these variables with the full journal name -unused_better-bibtex_first-run_import_unabbreviate = Expand bibtex strings and journal abbreviations during import -unused_better-bibtex_first-run_import_unabbreviate_enable = - .label = Unabbreviate journal names on import -unused_better-bibtex_first-run_import_unabbreviate_explanation = Some bibtex files have journal abbreviations in the 'journal' field. If you enable this, BBT will attempt to replace those abbreviations with the full journal name during import of bibtex files -unused_better-bibtex_first-run_welcome = Better BibTeX for Zotero (or BBT as it is commonly named) aims to make Zotero more useful for LaTeX and Markdown holdouts. There's a lot to configure about BBT -- take a look in the preferences if you're curious -- but let's start you off with a few simple choices. -better-bibtex_item-pane_citekey = Chave de Citação +better-bibtex_item-pane_section = + .label = Citation key + .tooltip = Citation key better-bibtex_preferences_advanced_export_brace-protection = .label = Apply case-protection to capitalized words by enclosing them in braces better-bibtex_preferences_advanced_export_brace-protection_warning = If you're dead-set on ignoring both BibTeX/BibLaTeX best practice (see the BBT FAQ) and the Zotero recommendations on title/sentence casing, you can turn this off to suppress automatic brace-protection for words with uppercase letters. @@ -280,14 +254,10 @@ better-bibtex_preferences_export_quick-copy = Quick-Copy .label = { better-bibtex_preferences_export_quick-copy } better-bibtex_preferences_export_quick-copy_explanation = Quick-Copy/drag-and-drop citations better-bibtex_preferences_export_quick-copy_format = Quick-Copy format -unused_better-bibtex_preferences_export_quick-copy_atom = Atom - .label = { unused_better-bibtex_preferences_export_quick-copy_atom } better-bibtex_preferences_export_quick-copy_citekeys = Cite Keys .label = { better-bibtex_preferences_export_quick-copy_citekeys } better-bibtex_preferences_export_quick-copy_eta-template = Eta template .label = { better-bibtex_preferences_export_quick-copy_eta-template } -unused_better-bibtex_preferences_export_quick-copy_gitbook = GitBook - .label = { unused_better-bibtex_preferences_export_quick-copy_gitbook } better-bibtex_preferences_export_quick-copy_latex = LaTeX citation .label = { better-bibtex_preferences_export_quick-copy_latex } better-bibtex_preferences_export_quick-copy_latex_command = LaTeX command @@ -364,53 +334,3 @@ better-bibtex_zotero-pane_show_collection-key = Download Better BibTeX export... better-bibtex_zotero-pane_tag_duplicates = Etiquetar chaves de citação duplicadas better-bibtex_zotero-pane_tex-studio = Push entries to TeXstudio betterbibtex-item-pane-header = Citation key -unused_better-bibtex_auto-export_too-long_body-eabled = A exportação automática { $translator } para { $path } demorou { $seconds } segundos. Durante qualquer tipo de exportação, a interface de usuário do Zotero permanece travada. -unused_better-bibtex_auto-export_too-long_prime-enabled = Para minimizar os efeitos de exportações automáticas demoradas, o pré-processamento do cache foi ativado. Isso faz a exportação automática mais lenta, mas reduz o tempo que Zotero fica congelado ao mínimo. -unused_better-bibtex_auto-export_too-long_sorry = Você já ativou o pré-processamento de cache e definiu as exportações automáticas como ociosas. Nada mais pode ser feito sem mudanças estruturais no Zotero (https://u.nu/27e9). -unused_better-bibtex_auto-export_too-long_suggest-idle = Para minimizar os efeitos de exportações automáticas demoradas, você pode preferir definir as exportações automáticas como "Quando ocioso" ao invés de "Imediatamente". -unused_better-bibtex_auto-export_too-long_title = Exportação automática demorada -unused_better-bibtex_db_corrupt = Ocorreu um erro abrindo seu banco de dados -unused_better-bibtex_db_corrupt_explanation = - Ocorreu um erro abrindo seu banco de dados. Isso pode significar que seu banco de dados está corrompido. O erro informado por Zotero foi: { $error }. - - Para continuar, escolha se você quer: - - 1. reiniciar agora para fazer Zotero tentar reverter para um backup anterior - 2. esvaziar o banco de dados do Better BibTeX e continuar - 3. sair do Zotero e procurar ajuda para tentar recuperar o banco de dados. - - Você pode continuar zerando o banco de dados, mas suas chaves de citação serão recriadas e as exportações automáticas precisarão ser configuradas do início. Um backup do banco de dados corrompido vai ser mantido nesse caso. -unused_better-bibtex_db_corrupt_quit = Sair do Zotero agora -unused_better-bibtex_db_corrupt_reset = Zerar e continuar -unused_better-bibtex_db_corrupt_restore = Reiniciar o Zotero e tentar reverter -unused_better-bibtex_error-report_out-of-memory = Seu sistema provavelmente esgotou a memória gerando o arquivo de registro (log). Modifique ''{ $preference }'' para um valor mais baixo que o { $limit } atual, reinicie e tente novamente. -unused_better-bibtex_key-manager_regenerate = (re)generating citation keys -unused_better-bibtex_key-manager_regenerate_confirm = (re)generating { $n } citekeys, proceed? -unused_better-bibtex_preferences_advanced = Avançado -unused_better-bibtex_preferences_advanced_export_workers = Parallel background exports: -unused_better-bibtex_preferences_advanced_import_unabbreviate = Expand abbreviated journal titles on import using list: -unused_better-bibtex_preferences_advanced_import_unabbreviate_off = None -unused_better-bibtex_preferences_advanced_tab_citekeys = Citation keys -unused_better-bibtex_preferences_advanced_tab_export = Export -unused_better-bibtex_preferences_advanced_warning = Estas opções afetam o desempenho e podem causar falhas na exportação. Seja cuidadoso. -unused_better-bibtex_preferences_auto-export_collection = Coleção -unused_better-bibtex_preferences_auto-export_library = Biblioteca -unused_better-bibtex_preferences_auto-export_warn_long-running = Avisar quando exportações automáticas demorarem mais que (seconds) -unused_better-bibtex_preferences_citekey_aux-scanner = BibTeX AUX/Markdown scanner -unused_better-bibtex_preferences_citekey_citekeys = Citation keys -unused_better-bibtex_startup_db-upgrade = Database cleanup { $n }/{ $total }... -unused_better-bibtex_startup_db-upgrade_not-editable = { $n } items not upgraded because they are read-only -unused_better-bibtex_startup_db-upgrade_saving = Database cleanup, saving... -unused_better-bibtex_startup_installing_translators_new = Better BibTeX: novos tradutores instalados -unused_better-bibtex_startup_installing_translators_new_dont-ask-again = Don't ask again -unused_better-bibtex_startup_installing_translators_new_drag-and-drop = Novos tradutores do Better BibTeX foram instalados. Se quiser usá-los ao arrastar-e-soltar (por exemplo, para arrastar e soltar chaves de citação ou citações), você precisa reiniciar uma vez para ativá-los. -unused_better-bibtex_startup_loading-keys = Carregando chaves de citação -unused_better-bibtex_startup_loading_databases = Loading databases -unused_better-bibtex_startup_waiting_for_translators = Aguardando tradutores do Zotero -unused_better-bibtex_texstudio_not_found = TeXstudio não encontrado em { $path } -unused_better-bibtex_zotero-pane_server_disabled = Exportação via HTTP desativada -unused_preferences_auto-export_status_running = executando -unused_preferences_auto-export_status_scheduled = agendado -unused_zotero_better-bibtex_csquotes = Substituir aspas duplas ou angulares por \\enquote{ "{" }...{ "}" } (exige csquotes) -xpi = - .description = Faz Zotero útil para os tradicionalistas do LaTeX. diff --git a/locale/zh-CN/better-bibtex.ftl b/locale/zh-CN/better-bibtex.ftl index 8e69836c71..517113028a 100644 --- a/locale/zh-CN/better-bibtex.ftl +++ b/locale/zh-CN/better-bibtex.ftl @@ -58,35 +58,9 @@ better-bibtex_export-options_reminder = 您确定不使用“{ $translator }” better-bibtex_export-options_worker = 后台导出 better-bibtex_export-options_biblatexAPA = biblatex-apa better-bibtex_export-options_biblatexChicago = biblatex-chicago -unused_better-bibtex_first-run = - .title = 欢迎使用 Better BibTeX for Zotero - .label = 欢迎使用 Better BibTeX for Zotero -unused_better-bibtex_first-run_citekey-format = 您的引用 -unused_better-bibtex_first-run_citekey-format_bbt = - .label = 使用 BBT 默认引用格式 -unused_better-bibtex_first-run_citekey-format_explanation = BBT 将为您的条目生成引用。引用的生成是高度可配置的,且您可以覆写已生成的引用,但现在您需要选择默认生成格式。您可以随时在首选项中修改相关配置。 -unused_better-bibtex_first-run_citekey-format_explanation_bbt = 将按 BBT 默认格式生成新引用。若您希望使用不同的格式,请在首选项中修改相应配置,保存后选中所有条目,然后在右键菜单中选择“刷新”。 -unused_better-bibtex_first-run_citekey-format_explanation_example = 您的引用将形如 -unused_better-bibtex_first-run_citekey-format_explanation_zotero = 如果您已经有文档在使用由 Zotero 而不是 BBT 生成的引用,请选择该选项。这将忠实地复制 Zotero 生成的引用,包括 Zotero 引用生成器中已知的限制。仅在您需要引用与 Zotero 生成的完全相同时使用此选项。 -unused_better-bibtex_first-run_citekey-format_zotero = - .label = 使用 Zotero 默认引用格式 -unused_better-bibtex_first-run_done = 全部完成! -unused_better-bibtex_first-run_done_explanation = BBT 现已设置完毕。您仍可在 Zotero 首选项的 BBT 选项卡中更改这些设置。 -unused_better-bibtex_first-run_drag-and-drop = 拖放引用 -unused_better-bibtex_first-run_drag-and-drop_enable = - .label = 启用拖放引用 -unused_better-bibtex_first-run_drag-and-drop_explanation = 在 BBT 的帮助下,您可以将条目拖放至您选择的 LaTeX 编辑器来输入引用。您希望现在启用该功能吗? -unused_better-bibtex_first-run_exporting = 使用 BBT 导出 -unused_better-bibtex_first-run_exporting_explanation = 使用 BBT 导出与使用 Zotero 提供的格式导出方法相同,但请确保您选择了正确的格式:在格式列表中,不要选择“BibTeX”,请选择 -unused_better-bibtex_first-run_import-strings_enable = - .label = 导入时展开 @string 期刊名 -unused_better-bibtex_first-run_import-strings_explanation = 某些 bibtex 文件使用 @string 变量表示期刊名。若您启用此项,BBT 将参考一个常见期刊 ID 列表以将这些变量替换为完整期刊名。 -unused_better-bibtex_first-run_import_unabbreviate = 导入时展开 bibtex 字符串和期刊名缩写 -unused_better-bibtex_first-run_import_unabbreviate_enable = - .label = 导入时展开期刊名缩写 -unused_better-bibtex_first-run_import_unabbreviate_explanation = 某些 bibtex 文件在“journal”字段中使用了期刊名缩写。若您启用此项,导入 bibtex 文件时 BBT 会尝试将期刊名缩写展开为全名。 -unused_better-bibtex_first-run_welcome = Better BibTeX for Zotero(通常简称为 BBT)旨在增强 Zotero 对 LaTeX 和 Markdown 用户而言的实用性。BBT 有很多配置选项——如果您感兴趣,可以在首选项中查看——但让我们从几个简单的选择开始。 -better-bibtex_item-pane_citekey = 引用 +better-bibtex_item-pane_section = + .label = 引用 + .tooltip = 引用 better-bibtex_preferences_advanced_export_brace-protection = .label = 使用大括号括起首字母大写的单词以保持大小写格式 better-bibtex_preferences_advanced_export_brace-protection_warning = 若您坚持忽略 BibTeX/BibLaTeX 最佳做法(见 BBT FAQ)和 Zotero 关于标题/句子大小写格式的建议,您可以关闭该选项以禁止自动使用括号对含大写字母单词进行大小写保护。 @@ -281,14 +255,10 @@ better-bibtex_preferences_export_quick-copy = 快速复制 .label = { better-bibtex_preferences_export_quick-copy } better-bibtex_preferences_export_quick-copy_explanation = 快速复制/拖放引用 better-bibtex_preferences_export_quick-copy_format = 快速复制格式 -unused_better-bibtex_preferences_export_quick-copy_atom = Atom - .label = { unused_better-bibtex_preferences_export_quick-copy_atom } better-bibtex_preferences_export_quick-copy_citekeys = 引用 .label = { better-bibtex_preferences_export_quick-copy_citekeys } better-bibtex_preferences_export_quick-copy_eta-template = Eta 模板 .label = { better-bibtex_preferences_export_quick-copy_eta-template } -unused_better-bibtex_preferences_export_quick-copy_gitbook = GitBook - .label = { unused_better-bibtex_preferences_export_quick-copy_gitbook } better-bibtex_preferences_export_quick-copy_latex = LaTeX 引用 .label = { better-bibtex_preferences_export_quick-copy_latex } better-bibtex_preferences_export_quick-copy_latex_command = LaTeX 命令 @@ -365,53 +335,3 @@ better-bibtex_zotero-pane_show_collection-key = 下载 Better BibTeX 导出… better-bibtex_zotero-pane_tag_duplicates = 标记重复的引用 better-bibtex_zotero-pane_tex-studio = 推送条目至 TeXstudio betterbibtex-item-pane-header = 引用 -unused_better-bibtex_auto-export_too-long_body-eabled = 您的 { $translator } 自动导出至 { $path } 用时 { $seconds } 秒。在任何导出过程中,Zotero 用户界面均将无响应。 -unused_better-bibtex_auto-export_too-long_prime-enabled = 为了最大程度地减少高耗时自动导出的影响,缓存预处理已启用。 这将使自动导出减慢,但也将缩减 Zotero 无响应的时间至最短。 -unused_better-bibtex_auto-export_too-long_sorry = 您已经启用了缓存预处理,并将自动导出设置为空闲时运行。进一步的优化要求重构 Zotero 架构(https://u.nu/27e9)。 -unused_better-bibtex_auto-export_too-long_suggest-idle = 为了最大程度地减少高耗时自动导出的影响,您或许希望将自动导出设置为“空闲时”而不是“修改时”。 -unused_better-bibtex_auto-export_too-long_title = 高耗时自动导出 -unused_better-bibtex_db_corrupt = 打开您的数据库时出错 -unused_better-bibtex_db_corrupt_explanation = - 打开数据库时出现错误。这可能意味着您的数据库已损坏。Zotero 报告的错误为:{ $error }。 - - 如要继续,请选择您是否希望: - - 1. 通过立即重新启动 Zotero 使其尝试回滚至以前的备份 - 2. 重置 Better BibTeX 数据库并继续 - 3. 退出 Zotero 并寻求数据库恢复支持 - - 重置将允许您继续,但您的引用将被重新生成,且自动导出需要重新配置。已损坏的数据库将被备份。 -unused_better-bibtex_db_corrupt_quit = 立即退出 Zotero -unused_better-bibtex_db_corrupt_reset = 重置并继续 -unused_better-bibtex_db_corrupt_restore = 重启 Zotero 并尝试恢复 -unused_better-bibtex_error-report_out-of-memory = 你的系统可能因为组装日志文件而耗尽了内存。请将“{ $preference }”设置为低于当前的 { $limit },重新启动,然后再次尝试。 -unused_better-bibtex_key-manager_regenerate = 正在(重新)生成引用 -unused_better-bibtex_key-manager_regenerate_confirm = 正在(重新)生成 { $n } 条引用,继续吗? -unused_better-bibtex_preferences_advanced = 高级 -unused_better-bibtex_preferences_advanced_export_workers = 并行后台导出: -unused_better-bibtex_preferences_advanced_import_unabbreviate = 使用该列表展开期刊名缩写: -unused_better-bibtex_preferences_advanced_import_unabbreviate_off = 无 -unused_better-bibtex_preferences_advanced_tab_citekeys = 引用 -unused_better-bibtex_preferences_advanced_tab_export = 导出 -unused_better-bibtex_preferences_advanced_warning = 这里的设置会影响性能,并且可能会造成导出中断。请小心操作。 -unused_better-bibtex_preferences_auto-export_collection = 分类 -unused_better-bibtex_preferences_auto-export_library = 库 -unused_better-bibtex_preferences_auto-export_warn_long-running = 发出警告,若自动导出耗时超过(秒) -unused_better-bibtex_preferences_citekey_aux-scanner = BibTeX AUX/Markdown 扫描器 -unused_better-bibtex_preferences_citekey_citekeys = 引用 -unused_better-bibtex_startup_db-upgrade = 数据库清理 { $n }/{ $total }… -unused_better-bibtex_startup_db-upgrade_not-editable = { $n } 个条目未被更新,因为它们是只读的 -unused_better-bibtex_startup_db-upgrade_saving = 数据库清理完成,保存中… -unused_better-bibtex_startup_installing_translators_new = Better BibTeX:已安装新的翻译器 -unused_better-bibtex_startup_installing_translators_new_dont-ask-again = 不再询问 -unused_better-bibtex_startup_installing_translators_new_drag-and-drop = 已安装新的 Better BibTeX 翻译器。要在拖放(例如拖放引用)时使用,您需要重启一次以激活它们。 -unused_better-bibtex_startup_loading-keys = 加载引用 -unused_better-bibtex_startup_loading_databases = 加载数据库 -unused_better-bibtex_startup_waiting_for_translators = 正在等待 Zotero 翻译器 -unused_better-bibtex_texstudio_not_found = 在 { $path } 中找不到 TeXstudio -unused_better-bibtex_zotero-pane_server_disabled = 已禁用 HTTP 导出 -unused_preferences_auto-export_status_running = 运行中 -unused_preferences_auto-export_status_scheduled = 已预定 -unused_zotero_better-bibtex_csquotes = 将左/右引号替换为 \\enquote{ "{" }...{ "}" } (需要 csquotes) -xpi = - .description = 让 Zotero 适合我们 LaTeX 用户。 From 63bb7db3ff8f110c17be16b3bb7db0efb3a30b7a Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Wed, 1 May 2024 08:13:57 +0200 Subject: [PATCH 119/177] basename not required --- content/ErrorReport.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/ErrorReport.ts b/content/ErrorReport.ts index 4a448051f9..192fcafb9f 100644 --- a/content/ErrorReport.ts +++ b/content/ErrorReport.ts @@ -80,7 +80,7 @@ export class ErrorReport { const version = require('../gen/version.js') try { - await Zotero.HTTP.request('PUT', `${this.bucket}/${$OS.Path.basename(this.tarball())}`, { + await Zotero.HTTP.request('PUT', `${this.bucket}/${this.tarball()}`, { noCache: true, // followRedirects: true, // noCache: true, From 219fad5760cf20d07810cbad31c2b0cb3a67bb95 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Wed, 1 May 2024 08:31:18 +0200 Subject: [PATCH 120/177] 6.7.179 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index ced436d023..0a6e95afd4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "zotero-better-bibtex", - "version": "6.7.178", + "version": "6.7.179", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "zotero-better-bibtex", - "version": "6.7.178", + "version": "6.7.179", "license": "ISC", "dependencies": { "@artsy/to-title-case": "^1.1.0", diff --git a/package.json b/package.json index 0aa5aaaa20..cbd3ed7b6b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "zotero-better-bibtex", - "version": "6.7.178", + "version": "6.7.179", "description": "Make Zotero useful for us LaTeX holdouts.", "homepage": "https://retorque.re/zotero-better-bibtex", "license": "ISC", From 482736909ba1d0efffef10467dd0a385032e11ad Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Wed, 1 May 2024 13:18:46 +0200 Subject: [PATCH 121/177] citekey section --- content/better-bibtex.ts | 10 ++++++++-- locale/en-US/better-bibtex.ftl | 5 +++-- site/themes/relearn | 2 +- submodules/zotero | 2 +- 4 files changed, 13 insertions(+), 6 deletions(-) diff --git a/content/better-bibtex.ts b/content/better-bibtex.ts index 02987f6d1f..7b5354e0e1 100644 --- a/content/better-bibtex.ts +++ b/content/better-bibtex.ts @@ -852,11 +852,11 @@ export class BetterBibTeX { paneID: 'betterbibtex-section-citationkey', pluginID: 'better-bibtex@iris-advies.com', header: { - l10nID: 'better-bibtex_item-pane_section', + l10nID: 'better-bibtex_item-pane_section_header', icon: `${rootURI}content/skin/citation-key.png`, }, sidenav: { - l10nID: 'better-bibtex_item-pane_section', + l10nID: 'better-bibtex_item-pane_section_sidenav', icon: `${rootURI}content/skin/citation-key.png`, }, bodyXHTML: 'Citation Key ', @@ -866,6 +866,12 @@ export class BetterBibTeX { body.ownerDocument.getElementById('better-bibtex-citation-key').value = citekey || '\u274C' setSectionSummary(citekey || '') }, + /* + onInit({ refresh }) { + }, + onDestroy() { + }, + */ }) } diff --git a/locale/en-US/better-bibtex.ftl b/locale/en-US/better-bibtex.ftl index a1fde9edaa..67c5c7d4ee 100644 --- a/locale/en-US/better-bibtex.ftl +++ b/locale/en-US/better-bibtex.ftl @@ -72,9 +72,10 @@ better-bibtex_export-options_worker = Background export better-bibtex_export-options_biblatexAPA = biblatex-apa better-bibtex_export-options_biblatexChicago = biblatex-chicago -better-bibtex_item-pane_section = - .label = Citation key +better-bibtex_item-pane_section_sidenav = .tooltip = Citation key +better-bibtex_item-pane_section_header = + .label = Citation key better-bibtex_preferences_advanced_export_brace-protection = .label = Apply case-protection to capitalized words by enclosing them in braces diff --git a/site/themes/relearn b/site/themes/relearn index 0480d11c33..ab4cd9b6a7 160000 --- a/site/themes/relearn +++ b/site/themes/relearn @@ -1 +1 @@ -Subproject commit 0480d11c33cc08dd578cc76b39b1921c65b45f3b +Subproject commit ab4cd9b6a78a16f404dad6360ffb2cbe01a6667f diff --git a/submodules/zotero b/submodules/zotero index da1eb6fda9..adaa61f2cf 160000 --- a/submodules/zotero +++ b/submodules/zotero @@ -1 +1 @@ -Subproject commit da1eb6fda9626190702870959ca9f47df8d92521 +Subproject commit adaa61f2cfcaced1ded9c22438e6484ec62bf4dc From 7cd2d126603490dbea526dd14628952d070c080f Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Wed, 1 May 2024 13:23:45 +0200 Subject: [PATCH 122/177] translation missing --- content/Preferences/autoexport.pug | 4 ++-- locale/en-US/better-bibtex.ftl | 3 --- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/content/Preferences/autoexport.pug b/content/Preferences/autoexport.pug index 2813e54bb9..5f9ab76cd9 100644 --- a/content/Preferences/autoexport.pug +++ b/content/Preferences/autoexport.pug @@ -83,13 +83,13 @@ html:div#bbt-prefs-auto-exports(class='bbt-prefs-2col') checkbox.bbt-autoexport-options.bbt-autoexport-BetterBibLaTeX( class='bbt-prefs-2col-span' data-ae-field='biblatexAPA' - label='&better-bibtex_preferences_auto-export_fields_biblatexAPA.label;' + label='biblatex-apa' oncommand='Zotero.BetterBibTeX.PrefPane.autoexport.edit(this)' ) checkbox.bbt-autoexport-options.bbt-autoexport-BetterBibLaTeX( class='bbt-prefs-2col-span' data-ae-field='biblatexChicago' - label='&better-bibtex_preferences_auto-export_fields_biblatexChicago.label;' + label='biblatex-chicago' oncommand='Zotero.BetterBibTeX.PrefPane.autoexport.edit(this)' ) diff --git a/locale/en-US/better-bibtex.ftl b/locale/en-US/better-bibtex.ftl index 67c5c7d4ee..06257cf632 100644 --- a/locale/en-US/better-bibtex.ftl +++ b/locale/en-US/better-bibtex.ftl @@ -185,9 +185,6 @@ better-bibtex_preferences_auto-export_fields_notes = better-bibtex_preferences_auto-export_fields_recursive = .label = Export all child collections -better-bibtex_preferences_auto-export_fields_biblatexAPA = - .label = biblatex-apa - better-bibtex_preferences_auto-export_git_message = { $type } updated by Better BibTeX for Zotero better-bibtex_preferences_auto-export_idle = When Idle .label = { better-bibtex_preferences_auto-export_idle } From 89ccbf3989f24fadc5db0958a739a496e44a274c Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Wed, 1 May 2024 14:47:57 +0200 Subject: [PATCH 123/177] 6.7.180 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0a6e95afd4..bca17219ec 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "zotero-better-bibtex", - "version": "6.7.179", + "version": "6.7.180", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "zotero-better-bibtex", - "version": "6.7.179", + "version": "6.7.180", "license": "ISC", "dependencies": { "@artsy/to-title-case": "^1.1.0", diff --git a/package.json b/package.json index cbd3ed7b6b..b2ed879b58 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "zotero-better-bibtex", - "version": "6.7.179", + "version": "6.7.180", "description": "Make Zotero useful for us LaTeX holdouts.", "homepage": "https://retorque.re/zotero-better-bibtex", "license": "ISC", From 3819e3bfcebe0df0de85c583bf978d2b3eeebbf5 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Wed, 1 May 2024 14:48:23 +0200 Subject: [PATCH 124/177] New Crowdin updates (#2859) * New translations better-bibtex.ftl (French) * New translations better-bibtex.ftl (German) * New translations better-bibtex.ftl (Italian) * New translations better-bibtex.ftl (Chinese Simplified) * New translations better-bibtex.ftl (Portuguese, Brazilian) --- locale/de-DE/better-bibtex.ftl | 7 +++---- locale/fr-FR/better-bibtex.ftl | 7 +++---- locale/it-IT/better-bibtex.ftl | 7 +++---- locale/pt-BR/better-bibtex.ftl | 7 +++---- locale/zh-CN/better-bibtex.ftl | 7 +++---- 5 files changed, 15 insertions(+), 20 deletions(-) diff --git a/locale/de-DE/better-bibtex.ftl b/locale/de-DE/better-bibtex.ftl index 878326b8a3..7af3ac76b1 100644 --- a/locale/de-DE/better-bibtex.ftl +++ b/locale/de-DE/better-bibtex.ftl @@ -58,9 +58,10 @@ better-bibtex_export-options_reminder = Sind Sie sicher, dass Sie nicht das ''{ better-bibtex_export-options_worker = Hintergrund-Export better-bibtex_export-options_biblatexAPA = biblatex-apa better-bibtex_export-options_biblatexChicago = biblatex-chicago -better-bibtex_item-pane_section = - .label = Citation key +better-bibtex_item-pane_section_sidenav = .tooltip = Citation key +better-bibtex_item-pane_section_header = + .label = Citation key better-bibtex_preferences_advanced_export_brace-protection = .label = Groß-/Kleinschreibung auf Groß- und Kleinschreibung anwenden, indem sie Klammern beigefügt wird better-bibtex_preferences_advanced_export_brace-protection_warning = Wenn Sie sowohl BibTeX/BibLaTeX Best Practice (siehe BBT FAQ) als auch die Zotero-Empfehlungen zum Titel-/Satz-Casing ignorieren möchten, können Sie dies ausschalten, um das Titel-Casing für englische Referenzen zu unterdrücken @@ -140,8 +141,6 @@ better-bibtex_preferences_auto-export_fields_notes = .label = Exportiere Notizen better-bibtex_preferences_auto-export_fields_recursive = .label = Exportiere alle Untersammlungen -better-bibtex_preferences_auto-export_fields_biblatexAPA = - .label = biblatex-apa better-bibtex_preferences_auto-export_git_message = { $type } aktualisiert durch Better BibTex for Zotero better-bibtex_preferences_auto-export_idle = Wenn unbeschäftigt .label = { better-bibtex_preferences_auto-export_idle } diff --git a/locale/fr-FR/better-bibtex.ftl b/locale/fr-FR/better-bibtex.ftl index 02535c26cd..159d4b86fc 100644 --- a/locale/fr-FR/better-bibtex.ftl +++ b/locale/fr-FR/better-bibtex.ftl @@ -58,9 +58,10 @@ better-bibtex_export-options_reminder = Êtes-vous sûr de ne pas vouloir du for better-bibtex_export-options_worker = Exportation en arrière-plan better-bibtex_export-options_biblatexAPA = biblatex-apa better-bibtex_export-options_biblatexChicago = biblatex-chicago -better-bibtex_item-pane_section = - .label = Clé de citation +better-bibtex_item-pane_section_sidenav = .tooltip = Clé de citation +better-bibtex_item-pane_section_header = + .label = Clé de citation better-bibtex_preferences_advanced_export_brace-protection = .label = Appliquer la protection de la casse aux mots en capitales en les insérant entre paires d'accolades better-bibtex_preferences_advanced_export_brace-protection_warning = Si vous n'êtes pas prêt à ignorer à la fois les meilleures pratiques BibTeX/BibLaTeX (voir la FAQ BBT) et les recommandations de Zotero sur le tire/phrase, vous pouvez désactiver cette option pour supprimer la protection automatique des accolades pour les mots avec des lettres capitales. @@ -141,8 +142,6 @@ better-bibtex_preferences_auto-export_fields_notes = .label = Export des notes better-bibtex_preferences_auto-export_fields_recursive = .label = Exporter toutes les collections enfants -better-bibtex_preferences_auto-export_fields_biblatexAPA = - .label = biblatex-apa better-bibtex_preferences_auto-export_git_message = { $type } mis à jour par Better BibTeX pour Zotero better-bibtex_preferences_auto-export_idle = à la mise en veille .label = { better-bibtex_preferences_auto-export_idle } diff --git a/locale/it-IT/better-bibtex.ftl b/locale/it-IT/better-bibtex.ftl index 0b1829cf5c..983254a0b0 100644 --- a/locale/it-IT/better-bibtex.ftl +++ b/locale/it-IT/better-bibtex.ftl @@ -58,9 +58,10 @@ better-bibtex_export-options_reminder = Si è sicuri di non volere il formato '{ better-bibtex_export-options_worker = Esportazione in background better-bibtex_export-options_biblatexAPA = biblatex-apa better-bibtex_export-options_biblatexChicago = biblatex-chicago -better-bibtex_item-pane_section = - .label = Citation key +better-bibtex_item-pane_section_sidenav = .tooltip = Citation key +better-bibtex_item-pane_section_header = + .label = Citation key better-bibtex_preferences_advanced_export_brace-protection = .label = Includi le parole in maiuscolo tra graffe per preservare i caratteri così come scritti better-bibtex_preferences_advanced_export_brace-protection_warning = Se si vuole ignorare sia le buone pratiche di BibTeX/BibLaTeX (vedi le FAQ di BBT) e le raccomandazioni di Zotero sulle maiuscole, si può disattivare questa opzione per prevenire la protezione con graffe delle parole in maiuscolo. @@ -140,8 +141,6 @@ better-bibtex_preferences_auto-export_fields_notes = .label = Esporta note better-bibtex_preferences_auto-export_fields_recursive = .label = Esporta tutte le collezioni figlie -better-bibtex_preferences_auto-export_fields_biblatexAPA = - .label = biblatex-apa better-bibtex_preferences_auto-export_git_message = { $type } aggiornato da Better BibTeX for Zotero better-bibtex_preferences_auto-export_idle = Quando inattivo .label = { better-bibtex_preferences_auto-export_idle } diff --git a/locale/pt-BR/better-bibtex.ftl b/locale/pt-BR/better-bibtex.ftl index feca50ecad..7d82c9235f 100644 --- a/locale/pt-BR/better-bibtex.ftl +++ b/locale/pt-BR/better-bibtex.ftl @@ -58,9 +58,10 @@ better-bibtex_export-options_reminder = Tem certeza que você não quer o format better-bibtex_export-options_worker = Background export better-bibtex_export-options_biblatexAPA = biblatex-apa better-bibtex_export-options_biblatexChicago = biblatex-chicago -better-bibtex_item-pane_section = - .label = Citation key +better-bibtex_item-pane_section_sidenav = .tooltip = Citation key +better-bibtex_item-pane_section_header = + .label = Citation key better-bibtex_preferences_advanced_export_brace-protection = .label = Apply case-protection to capitalized words by enclosing them in braces better-bibtex_preferences_advanced_export_brace-protection_warning = If you're dead-set on ignoring both BibTeX/BibLaTeX best practice (see the BBT FAQ) and the Zotero recommendations on title/sentence casing, you can turn this off to suppress automatic brace-protection for words with uppercase letters. @@ -140,8 +141,6 @@ better-bibtex_preferences_auto-export_fields_notes = .label = Exportar notas better-bibtex_preferences_auto-export_fields_recursive = .label = Export all child collections -better-bibtex_preferences_auto-export_fields_biblatexAPA = - .label = biblatex-apa better-bibtex_preferences_auto-export_git_message = { $type } atualizado por Better BibTeX for Zotero better-bibtex_preferences_auto-export_idle = Quando ocioso .label = { better-bibtex_preferences_auto-export_idle } diff --git a/locale/zh-CN/better-bibtex.ftl b/locale/zh-CN/better-bibtex.ftl index 517113028a..d0c0efb013 100644 --- a/locale/zh-CN/better-bibtex.ftl +++ b/locale/zh-CN/better-bibtex.ftl @@ -58,9 +58,10 @@ better-bibtex_export-options_reminder = 您确定不使用“{ $translator }” better-bibtex_export-options_worker = 后台导出 better-bibtex_export-options_biblatexAPA = biblatex-apa better-bibtex_export-options_biblatexChicago = biblatex-chicago -better-bibtex_item-pane_section = - .label = 引用 +better-bibtex_item-pane_section_sidenav = .tooltip = 引用 +better-bibtex_item-pane_section_header = + .label = 引用 better-bibtex_preferences_advanced_export_brace-protection = .label = 使用大括号括起首字母大写的单词以保持大小写格式 better-bibtex_preferences_advanced_export_brace-protection_warning = 若您坚持忽略 BibTeX/BibLaTeX 最佳做法(见 BBT FAQ)和 Zotero 关于标题/句子大小写格式的建议,您可以关闭该选项以禁止自动使用括号对含大写字母单词进行大小写保护。 @@ -141,8 +142,6 @@ better-bibtex_preferences_auto-export_fields_notes = .label = 导出笔记 better-bibtex_preferences_auto-export_fields_recursive = .label = 导出所有子分类 -better-bibtex_preferences_auto-export_fields_biblatexAPA = - .label = biblatex-apa better-bibtex_preferences_auto-export_git_message = { $type } updated by Better BibTeX for Zotero better-bibtex_preferences_auto-export_idle = 空闲时 .label = { better-bibtex_preferences_auto-export_idle } From 8f23589ce6cfec0f607e608fe229ed1a450acb42 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Wed, 1 May 2024 14:48:37 +0200 Subject: [PATCH 125/177] 6.7.181 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index bca17219ec..6b2408ec99 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "zotero-better-bibtex", - "version": "6.7.180", + "version": "6.7.181", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "zotero-better-bibtex", - "version": "6.7.180", + "version": "6.7.181", "license": "ISC", "dependencies": { "@artsy/to-title-case": "^1.1.0", diff --git a/package.json b/package.json index b2ed879b58..f1d58cf9ea 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "zotero-better-bibtex", - "version": "6.7.180", + "version": "6.7.181", "description": "Make Zotero useful for us LaTeX holdouts.", "homepage": "https://retorque.re/zotero-better-bibtex", "license": "ISC", From c95c9bc950279d4fe3c962749becc0aed762d38e Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Thu, 2 May 2024 08:03:46 +0200 Subject: [PATCH 126/177] ncu --- package-lock.json | 20 ++++++++++---------- package.json | 4 ++-- submodules/zotero | 2 +- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6b2408ec99..6c291504b7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,7 +16,7 @@ "@types/pako": "^2.0.3", "@types/tar-js": "^0.3.5", "@ungap/structured-clone": "^1.2.0", - "ajv": "^8.12.0", + "ajv": "^8.13.0", "array.prototype.flatmap": "^1.3.2", "auto-changelog": "^2.4.0", "base64-js": "^1.5.1", @@ -65,7 +65,7 @@ "@retorquere/zotero-sync": "^1.0.27", "@types/bluebird": "^3.5.42", "@types/lokijs": "^1.5.14", - "@types/node": "^20.12.7", + "@types/node": "^20.12.8", "@xmldom/xmldom": "^0.8.10", "ajv-keywords": "^5.1.0", "archiver": "^7.0.1", @@ -3494,9 +3494,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.12.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", - "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", + "version": "20.12.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.8.tgz", + "integrity": "sha512-NU0rJLJnshZWdE/097cdCBbyW1h4hEg0xpovcoAQYHl8dnEyp/NAOiE45pvc+Bd1Dt+2r94v2eGFpQJ4R7g+2w==", "dependencies": { "undici-types": "~5.26.4" } @@ -3934,14 +3934,14 @@ } }, "node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", + "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "uri-js": "^4.4.1" }, "funding": { "type": "github", diff --git a/package.json b/package.json index f1d58cf9ea..a70e4c949e 100644 --- a/package.json +++ b/package.json @@ -70,7 +70,7 @@ "@types/pako": "^2.0.3", "@types/tar-js": "^0.3.5", "@ungap/structured-clone": "^1.2.0", - "ajv": "^8.12.0", + "ajv": "^8.13.0", "array.prototype.flatmap": "^1.3.2", "auto-changelog": "^2.4.0", "base64-js": "^1.5.1", @@ -119,7 +119,7 @@ "@retorquere/zotero-sync": "^1.0.27", "@types/bluebird": "^3.5.42", "@types/lokijs": "^1.5.14", - "@types/node": "^20.12.7", + "@types/node": "^20.12.8", "@xmldom/xmldom": "^0.8.10", "ajv-keywords": "^5.1.0", "archiver": "^7.0.1", diff --git a/submodules/zotero b/submodules/zotero index adaa61f2cf..04748ec9a6 160000 --- a/submodules/zotero +++ b/submodules/zotero @@ -1 +1 @@ -Subproject commit adaa61f2cfcaced1ded9c22438e6484ec62bf4dc +Subproject commit 04748ec9a63a2e0772f2dc3f6a1e1882b5b94cf4 From 66fc1398cfaba1195a03fff57ef29e14f7e27615 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Thu, 2 May 2024 08:10:19 +0200 Subject: [PATCH 127/177] remove async generator --- content/path-search.ts | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/content/path-search.ts b/content/path-search.ts index 35dd6dcf84..68d8ab31f9 100644 --- a/content/path-search.ts +++ b/content/path-search.ts @@ -13,12 +13,6 @@ export async function findBinary(bin: string, installationDirectory: { mac?: str return location } -async function* asyncGenerator(array: T[]): AsyncGenerator { - for (const item of array) { - yield await Promise.resolve(item) - } -} - const ENV = Components.classes['@mozilla.org/process/environment;1'].getService(Components.interfaces.nsIEnvironment) const VarRef = Zotero.isWin ? /%([A-Z][A-Z0-9]*)%/ig : /[$]([A-Z][A-Z0-9]*)/ig function expandVars(name: string, expanded: Record): string { @@ -43,6 +37,7 @@ async function pathSearch(bin: string, installationDirectory: { mac?: string[], const expanded = {} paths = paths.map(p => expandVars(p, expanded)) + log.debug('path-search: looking for', bin, 'in', ENV.get('PATH'), paths) if (Zotero.isWin && installationDirectory.win) paths.unshift(...(installationDirectory.win)) if (Zotero.isMac && installationDirectory.mac) paths.unshift(...(installationDirectory.mac)) paths = paths.filter(p => p) @@ -57,10 +52,11 @@ async function pathSearch(bin: string, installationDirectory: { mac?: string[], return '' } - for await (const path of asyncGenerator(paths)) { + for (const path of paths) { for (const ext of extensions) { try { const exe: string = $OS.Path.join(path, bin + ext) + log.debug(`path-search: testing ${exe}`) if (!(await $OS.File.exists(exe))) continue // eslint-disable-next-line @typescript-eslint/await-thenable From fd36a8352ae71fbfc3d225400ee542f83ff48f4f Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Thu, 2 May 2024 09:18:52 +0200 Subject: [PATCH 128/177] 6.7.182 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6c291504b7..b8cbf00283 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "zotero-better-bibtex", - "version": "6.7.181", + "version": "6.7.182", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "zotero-better-bibtex", - "version": "6.7.181", + "version": "6.7.182", "license": "ISC", "dependencies": { "@artsy/to-title-case": "^1.1.0", diff --git a/package.json b/package.json index a70e4c949e..33cd648604 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "zotero-better-bibtex", - "version": "6.7.181", + "version": "6.7.182", "description": "Make Zotero useful for us LaTeX holdouts.", "homepage": "https://retorque.re/zotero-better-bibtex", "license": "ISC", From 571e445d168e83178f0c1cd52d5865f81f77a080 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Thu, 2 May 2024 20:28:54 +0200 Subject: [PATCH 129/177] ncu --- submodules/biblatex | 2 +- submodules/zotero | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/submodules/biblatex b/submodules/biblatex index 237c4d415d..ac2456c249 160000 --- a/submodules/biblatex +++ b/submodules/biblatex @@ -1 +1 @@ -Subproject commit 237c4d415d1254e314037688a33531535d1cc34d +Subproject commit ac2456c2492861451547659702ae4a72264e4997 diff --git a/submodules/zotero b/submodules/zotero index 04748ec9a6..82107beaa9 160000 --- a/submodules/zotero +++ b/submodules/zotero @@ -1 +1 @@ -Subproject commit 04748ec9a63a2e0772f2dc3f6a1e1882b5b94cf4 +Subproject commit 82107beaa9273fa24af17fff35a944876488c209 From b1ff57fe9f07b01d0d50a50a07684571a87b6291 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Thu, 2 May 2024 21:30:05 +0200 Subject: [PATCH 130/177] late-init breaks pandoc-lua --- content/translators.ts | 66 ++++++++++++++++++++---------------------- 1 file changed, 31 insertions(+), 35 deletions(-) diff --git a/content/translators.ts b/content/translators.ts index 6f20df60a1..2cf48b7012 100644 --- a/content/translators.ts +++ b/content/translators.ts @@ -91,9 +91,37 @@ export const Translators = new class { // eslint-disable-line @typescript-eslint this.uninstall('\u672B BetterBibTeX JSON (for debugging)') this.uninstall('BetterBibTeX JSON (for debugging)') - this.lateInit().catch(err => { - log.debug('translators startup failure', err) - }) + await Zotero.Translators.init() + + const reinit: { header: Translator.Header, code: string }[] = [] + // fetch from resource because that has the hash + const headers: Translator.Header[] = Headers + .map(header => JSON.parse(Zotero.File.getContentsFromURL(`chrome://zotero-better-bibtex/content/resource/${header.label}.json`))) + let code + for (const header of headers) { + // workaround for mem limitations on Windows + if (!is7 && typeof header.displayOptions?.worker === 'boolean') header.displayOptions.worker = !!Zotero.isWin + if (code = await this.install(header)) reinit.push({ header, code }) + } + + if (reinit.length) { + await Zotero.Translators.reinit() + + /* + for (const { header, code } of reinit) { + if (Zotero.Translators.getCodeForTranslator) { + const translator = Zotero.Translators.get(header.translatorID) + translator.cacheCode = true + await Zotero.Translators.getCodeForTranslator(translator) + } + else { + new Zotero.Translator({...header, cacheCode: true, code }) + } + } + */ + } + + this.ready.resolve(true) }, shutdown: async (reason: Reason) => { switch (reason) { @@ -119,38 +147,6 @@ export const Translators = new class { // eslint-disable-line @typescript-eslint }) } - private async lateInit() { - await Zotero.Translators.init() - - const reinit: { header: Translator.Header, code: string }[] = [] - // fetch from resource because that has the hash - const headers: Translator.Header[] = Headers - .map(header => JSON.parse(Zotero.File.getContentsFromURL(`chrome://zotero-better-bibtex/content/resource/${header.label}.json`))) - for (const header of headers) { - // workaround for mem limitations on Windows - if (!is7 && typeof header.displayOptions?.worker === 'boolean') header.displayOptions.worker = !!Zotero.isWin - let code - if (code = await this.install(header)) reinit.push({ header, code }) - } - - if (reinit.length) { - await Zotero.Translators.reinit() - - for (const { header, code } of reinit) { - if (Zotero.Translators.getCodeForTranslator) { - const translator = Zotero.Translators.get(header.translatorID) - translator.cacheCode = true - await Zotero.Translators.getCodeForTranslator(translator) - } - else { - new Zotero.Translator({...header, cacheCode: true, code }) - } - } - } - - this.ready.resolve(true) - } - public getTranslatorId(name: string): string { Zotero.debug(`getTranslatorId: resolving ${JSON.stringify(name)}`) const name_lc = name.toLowerCase().replace(/ /g, '') From c89d40c5844518ce688b20dc44bc06f0efcceb20 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Sat, 4 May 2024 19:58:51 +0200 Subject: [PATCH 131/177] fixes #2865 --- content/ZoteroItemPane.ts | 2 +- locale/en-US/better-bibtex.ftl | 3 ++- site/themes/relearn | 2 +- submodules/zotero | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/content/ZoteroItemPane.ts b/content/ZoteroItemPane.ts index 92e2a44f0c..d2fb63b70b 100644 --- a/content/ZoteroItemPane.ts +++ b/content/ZoteroItemPane.ts @@ -104,7 +104,7 @@ export class ZoteroItemPane { label.hidden = value.hidden = !citationKey - label.value = `${pinned ? icons.pin : ''}${l10n.localize('better-bibtex_item-pane_citekey')}` + label.value = `${pinned ? icons.pin : ''}${l10n.localize('better-bibtex_item-pane_info_citation-key.label')}` value.value = citationKey }) } diff --git a/locale/en-US/better-bibtex.ftl b/locale/en-US/better-bibtex.ftl index 06257cf632..e10c0fdbe3 100644 --- a/locale/en-US/better-bibtex.ftl +++ b/locale/en-US/better-bibtex.ftl @@ -76,11 +76,12 @@ better-bibtex_item-pane_section_sidenav = .tooltip = Citation key better-bibtex_item-pane_section_header = .label = Citation key +better-bibtex_item-pane_info_citation-key = + .label = Citation key better-bibtex_preferences_advanced_export_brace-protection = .label = Apply case-protection to capitalized words by enclosing them in braces - better-bibtex_preferences_advanced_export_brace-protection_warning = If you're dead-set on ignoring both BibTeX/BibLaTeX best practice (see the BBT FAQ) and the Zotero recommendations on title/sentence casing, you can turn this off to suppress automatic brace-protection for words with uppercase letters. better-bibtex_preferences_advanced_export_retain-cache = .label = Retain export cache across upgrades diff --git a/site/themes/relearn b/site/themes/relearn index ab4cd9b6a7..ff35016bca 160000 --- a/site/themes/relearn +++ b/site/themes/relearn @@ -1 +1 @@ -Subproject commit ab4cd9b6a78a16f404dad6360ffb2cbe01a6667f +Subproject commit ff35016bcab2294334b14839e15287ba3dee91b1 diff --git a/submodules/zotero b/submodules/zotero index 82107beaa9..e7b792e2d5 160000 --- a/submodules/zotero +++ b/submodules/zotero @@ -1 +1 @@ -Subproject commit 82107beaa9273fa24af17fff35a944876488c209 +Subproject commit e7b792e2d5f7dab25136b1e30ff75be388f4ac0d From 4e1064800e9f3cbdedefc434fc202549d4abb96b Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Sat, 4 May 2024 21:43:28 +0200 Subject: [PATCH 132/177] New Crowdin updates (#2866) * New translations better-bibtex.ftl (French) * New translations better-bibtex.ftl (German) * New translations better-bibtex.ftl (Italian) * New translations better-bibtex.ftl (Chinese Simplified) * New translations better-bibtex.ftl (Portuguese, Brazilian) --- locale/de-DE/better-bibtex.ftl | 2 ++ locale/fr-FR/better-bibtex.ftl | 2 ++ locale/it-IT/better-bibtex.ftl | 2 ++ locale/pt-BR/better-bibtex.ftl | 2 ++ locale/zh-CN/better-bibtex.ftl | 2 ++ 5 files changed, 10 insertions(+) diff --git a/locale/de-DE/better-bibtex.ftl b/locale/de-DE/better-bibtex.ftl index 7af3ac76b1..d6885ba7f3 100644 --- a/locale/de-DE/better-bibtex.ftl +++ b/locale/de-DE/better-bibtex.ftl @@ -62,6 +62,8 @@ better-bibtex_item-pane_section_sidenav = .tooltip = Citation key better-bibtex_item-pane_section_header = .label = Citation key +better-bibtex_item-pane_info_citation-key = + .label = Citation key better-bibtex_preferences_advanced_export_brace-protection = .label = Groß-/Kleinschreibung auf Groß- und Kleinschreibung anwenden, indem sie Klammern beigefügt wird better-bibtex_preferences_advanced_export_brace-protection_warning = Wenn Sie sowohl BibTeX/BibLaTeX Best Practice (siehe BBT FAQ) als auch die Zotero-Empfehlungen zum Titel-/Satz-Casing ignorieren möchten, können Sie dies ausschalten, um das Titel-Casing für englische Referenzen zu unterdrücken diff --git a/locale/fr-FR/better-bibtex.ftl b/locale/fr-FR/better-bibtex.ftl index 159d4b86fc..492570a8b3 100644 --- a/locale/fr-FR/better-bibtex.ftl +++ b/locale/fr-FR/better-bibtex.ftl @@ -62,6 +62,8 @@ better-bibtex_item-pane_section_sidenav = .tooltip = Clé de citation better-bibtex_item-pane_section_header = .label = Clé de citation +better-bibtex_item-pane_info_citation-key = + .label = Clé de citation better-bibtex_preferences_advanced_export_brace-protection = .label = Appliquer la protection de la casse aux mots en capitales en les insérant entre paires d'accolades better-bibtex_preferences_advanced_export_brace-protection_warning = Si vous n'êtes pas prêt à ignorer à la fois les meilleures pratiques BibTeX/BibLaTeX (voir la FAQ BBT) et les recommandations de Zotero sur le tire/phrase, vous pouvez désactiver cette option pour supprimer la protection automatique des accolades pour les mots avec des lettres capitales. diff --git a/locale/it-IT/better-bibtex.ftl b/locale/it-IT/better-bibtex.ftl index 983254a0b0..8d5c28db01 100644 --- a/locale/it-IT/better-bibtex.ftl +++ b/locale/it-IT/better-bibtex.ftl @@ -62,6 +62,8 @@ better-bibtex_item-pane_section_sidenav = .tooltip = Citation key better-bibtex_item-pane_section_header = .label = Citation key +better-bibtex_item-pane_info_citation-key = + .label = Citation key better-bibtex_preferences_advanced_export_brace-protection = .label = Includi le parole in maiuscolo tra graffe per preservare i caratteri così come scritti better-bibtex_preferences_advanced_export_brace-protection_warning = Se si vuole ignorare sia le buone pratiche di BibTeX/BibLaTeX (vedi le FAQ di BBT) e le raccomandazioni di Zotero sulle maiuscole, si può disattivare questa opzione per prevenire la protezione con graffe delle parole in maiuscolo. diff --git a/locale/pt-BR/better-bibtex.ftl b/locale/pt-BR/better-bibtex.ftl index 7d82c9235f..cfa8354bb5 100644 --- a/locale/pt-BR/better-bibtex.ftl +++ b/locale/pt-BR/better-bibtex.ftl @@ -62,6 +62,8 @@ better-bibtex_item-pane_section_sidenav = .tooltip = Citation key better-bibtex_item-pane_section_header = .label = Citation key +better-bibtex_item-pane_info_citation-key = + .label = Citation key better-bibtex_preferences_advanced_export_brace-protection = .label = Apply case-protection to capitalized words by enclosing them in braces better-bibtex_preferences_advanced_export_brace-protection_warning = If you're dead-set on ignoring both BibTeX/BibLaTeX best practice (see the BBT FAQ) and the Zotero recommendations on title/sentence casing, you can turn this off to suppress automatic brace-protection for words with uppercase letters. diff --git a/locale/zh-CN/better-bibtex.ftl b/locale/zh-CN/better-bibtex.ftl index d0c0efb013..dc407b9d77 100644 --- a/locale/zh-CN/better-bibtex.ftl +++ b/locale/zh-CN/better-bibtex.ftl @@ -62,6 +62,8 @@ better-bibtex_item-pane_section_sidenav = .tooltip = 引用 better-bibtex_item-pane_section_header = .label = 引用 +better-bibtex_item-pane_info_citation-key = + .label = 引用 better-bibtex_preferences_advanced_export_brace-protection = .label = 使用大括号括起首字母大写的单词以保持大小写格式 better-bibtex_preferences_advanced_export_brace-protection_warning = 若您坚持忽略 BibTeX/BibLaTeX 最佳做法(见 BBT FAQ)和 Zotero 关于标题/句子大小写格式的建议,您可以关闭该选项以禁止自动使用括号对含大写字母单词进行大小写保护。 From 551ed7b0ce146cc802395279518c2a144d4b4b21 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Sat, 4 May 2024 21:48:13 +0200 Subject: [PATCH 133/177] reload-less refresh --- content/ZoteroItemPane.ts | 121 ++++++++++++++++++++------------------ content/ZoteroPane.ts | 9 +-- content/better-bibtex.ts | 22 +++++-- content/events.ts | 2 +- content/key-manager.ts | 15 +++-- 5 files changed, 94 insertions(+), 75 deletions(-) diff --git a/content/ZoteroItemPane.ts b/content/ZoteroItemPane.ts index d2fb63b70b..9f02480551 100644 --- a/content/ZoteroItemPane.ts +++ b/content/ZoteroItemPane.ts @@ -5,7 +5,7 @@ import { log } from './logger' import { Elements } from './create-element' import { busyWait } from './busy-wait' import { icons } from './icons' -import { is7 } from './client' +import { Events } from './events' async function title_sentenceCase(label) { const val = this._getFieldValue(label) @@ -26,13 +26,15 @@ async function title_sentenceCase(label) { export async function newZoteroItemPane(win: Window): Promise { let itemBox: HTMLElement - await busyWait(() => { itemBox = win.document.querySelector(is7 ? 'item-box' : '#zotero-editpane-item-box'); return !!itemBox }) + await busyWait(() => { itemBox = win.document.querySelector('#zotero-editpane-item-box'); return !!itemBox }) new ZoteroItemPane(win, itemBox) } export class ZoteroItemPane { document: Document elements: Elements + displayed: number + done: () => void public refresh(): void { this.itemBox.refresh() @@ -41,76 +43,79 @@ export class ZoteroItemPane { constructor(win: Window, private itemBox: any) { // eslint-disable-line @typescript-eslint/explicit-module-boundary-types this.document = win.document const elements = this.elements = new Elements(this.document) - // const itemPane = (win as any).ZoteroItemPane - // itemPane.BetterBibTeX = this if (!this.document.getElementById('better-bibtex-editpane-item-box')) { - if (!is7) { - itemBox.parentNode.appendChild(elements.create('vbox', { flex: 1, style: 'margin: 0; padding: 0', $: [ - - elements.create('grid', { id: 'better-bibtex-editpane-item-box', $: [ - elements.create('columns', { $: [ - elements.create('column'), - elements.create('column', { flex: '1' }), - // elements.create('column', { flex: 100 }), - ]}), - elements.create('rows', { id: 'better-bibtex-fields', flex: 1, $: [ - elements.create('row', { class: 'zotero-item-first-row', $: [ - elements.create('label', { id: 'better-bibtex-citekey-label', style: 'width: 9em; text-align: right; color: #7F7F7F', value: '' }), - elements.create('textbox', { id: 'better-bibtex-citekey-display', flex: '1', class: 'plain', readonly: 'true', value: '' }), - // elements.create('label', { id: 'better-bibtex-citekey-pin', value: icons.pin }), - ]}), + itemBox.parentNode.appendChild(elements.create('vbox', { flex: 1, style: 'margin: 0; padding: 0', $: [ + + elements.create('grid', { id: 'better-bibtex-editpane-item-box', $: [ + elements.create('columns', { $: [ + elements.create('column'), + elements.create('column', { flex: '1' }), + // elements.create('column', { flex: 100 }), + ]}), + elements.create('rows', { id: 'better-bibtex-fields', flex: 1, $: [ + elements.create('row', { class: 'zotero-item-first-row', $: [ + elements.create('label', { id: 'better-bibtex-citekey-label', style: 'width: 9em; text-align: right; color: #7F7F7F', value: '' }), + elements.create('textbox', { id: 'better-bibtex-citekey-display', flex: '1', class: 'plain', readonly: 'true', value: '' }), + // elements.create('label', { id: 'better-bibtex-citekey-pin', value: icons.pin }), ]}), ]}), + ]}), - itemBox, - ]})) - } + itemBox, + ]})) } win.addEventListener('unload', () => { this.unload() }) - if (!is7) { - $patch$(itemBox.__proto__, 'refresh', original => function() { - // eslint-disable-next-line prefer-rest-params - original.apply(this, arguments) - - if (!this.item) { - // why is it refreshing if there is no item?! - log.debug('itemBox.refresh without an item') - return - } - - const menuid = 'zotero-field-transform-menu-better-sentencecase' - let menuitem = this.ownerDocument.getElementById(menuid) - const menu = this.ownerDocument.getElementById('zotero-field-transform-menu') - if (menu && !menuitem) { - log.debug('bbt sentencecase: adding', menuid) - menuitem = menu.appendChild(elements.create('menuitem', { - id: menuid, - label: 'BBT sentence case', - oncommand: event => { - title_sentenceCase.call(event.currentTarget.ownerDocument.getBindingParent(event.currentTarget), event.currentTarget.ownerDocument.popupNode) - }, - })) - } - - const { citationKey, pinned } = Zotero.BetterBibTeX.KeyManager.get(this.item.id) - const label = this.parentNode.querySelector('#better-bibtex-citekey-label') - const value = this.parentNode.querySelector('#better-bibtex-citekey-display') - if (!value) return // merge pane uses itembox - - label.hidden = value.hidden = !citationKey - - label.value = `${pinned ? icons.pin : ''}${l10n.localize('better-bibtex_item-pane_info_citation-key.label')}` - value.value = citationKey - }) - } + const self = this // eslint-disable-line @typescript-eslint/no-this-alias + $patch$(itemBox.__proto__, 'refresh', original => function() { + // eslint-disable-next-line prefer-rest-params + original.apply(this, arguments) + + if (!this.item) { + self.displayed = undefined + // why is it refreshing if there is no item?! + log.debug('itemBox.refresh without an item') + return + } + + self.displayed = this.item.id + const menuid = 'zotero-field-transform-menu-better-sentencecase' + let menuitem = this.ownerDocument.getElementById(menuid) + const menu = this.ownerDocument.getElementById('zotero-field-transform-menu') + if (menu && !menuitem) { + log.debug('bbt sentencecase: adding', menuid) + menuitem = menu.appendChild(elements.create('menuitem', { + id: menuid, + label: 'BBT sentence case', + oncommand: event => { + title_sentenceCase.call(event.currentTarget.ownerDocument.getBindingParent(event.currentTarget), event.currentTarget.ownerDocument.popupNode) + }, + })) + } + + const { citationKey, pinned } = Zotero.BetterBibTeX.KeyManager.get(this.item.id) + const label = this.parentNode.querySelector('#better-bibtex-citekey-label') + const value = this.parentNode.querySelector('#better-bibtex-citekey-display') + if (!value) return // merge pane uses itembox + + label.hidden = value.hidden = !citationKey + + label.value = `${pinned ? icons.pin : ''}${l10n.localize('better-bibtex_item-pane_info_citation-key.label')}` + value.value = citationKey + }) + + this.done = Events.on('items-changed', ({ items }) => { + if (this.document && items.map(item => item.id).includes(this.displayed)) this.refresh() + }) } public unload(): void { this.elements.remove() + this.done?.() + this.document = undefined } } diff --git a/content/ZoteroPane.ts b/content/ZoteroPane.ts index 58c2f80262..ca5243a096 100644 --- a/content/ZoteroPane.ts +++ b/content/ZoteroPane.ts @@ -253,10 +253,11 @@ class ZoteroPane { if (Zotero.BetterBibTeX.uninstalled) clean_pane_persist() }, this.patched) - if (!is7) if (this.ZoteroPane.itemsView.collectionTreeRow) await this.ZoteroPane.itemsView.refreshAndMaintainSelection() - - const selected = this.ZoteroPane.getSelectedItems(true) - if (selected.length === 1) Zotero.Notifier.trigger('refresh', 'item', selected) + if (!is7) { + if (this.ZoteroPane.itemsView.collectionTreeRow) await this.ZoteroPane.itemsView.refreshAndMaintainSelection() + const selected = this.ZoteroPane.getSelectedItems(true) + if (selected.length === 1) Zotero.Notifier.trigger('refresh', 'item', selected) + } } public pullExport(): void { diff --git a/content/better-bibtex.ts b/content/better-bibtex.ts index 7b5354e0e1..c3abeaa426 100644 --- a/content/better-bibtex.ts +++ b/content/better-bibtex.ts @@ -848,6 +848,9 @@ export class BetterBibTeX { async loadUI(win: Window): Promise { if (is7) { + let $displayed: number + let $refresh: () => void + let $done: () => void Zotero.ItemPaneManager.registerSection({ paneID: 'betterbibtex-section-citationkey', pluginID: 'better-bibtex@iris-advies.com', @@ -861,24 +864,31 @@ export class BetterBibTeX { }, bodyXHTML: 'Citation Key ', // onRender: ({ body, item, editable, tabType }) => { - onRender: ({ body, item, setSectionSummary }) => { + onRender: ({ body, item, setSectionSummary }) => { + $displayed = item.id const citekey = item.getField('citationKey') body.ownerDocument.getElementById('better-bibtex-citation-key').value = citekey || '\u274C' setSectionSummary(citekey || '') }, - /* - onInit({ refresh }) { + onInit: ({ refresh }) => { + $refresh = refresh + $done = Events.on('items-changed', ({ items }) => { + if ($refresh && items.map(item => item.id).includes($displayed)) $refresh() + }) }, - onDestroy() { + onDestroy: () => { + $done?.() + $done = undefined + $displayed = undefined + $refresh = undefined }, - */ }) } try { log.debug('loading main UI') await newZoteroPane(win) - await newZoteroItemPane(win) + if (!is7) await newZoteroItemPane(win) } catch (err) { log.debug('loadUI error:', err) diff --git a/content/events.ts b/content/events.ts index cec44f45a0..b02a72b601 100644 --- a/content/events.ts +++ b/content/events.ts @@ -6,7 +6,7 @@ import { log } from './logger' import { is7 } from './client' type IdleState = 'active' | 'idle' -type Action = 'modify' | 'delete' | 'add' +export type Action = 'modify' | 'delete' | 'add' type IdleObserver = { observe: (subject: string, topic: IdleState, data: any) => void diff --git a/content/key-manager.ts b/content/key-manager.ts index 0b386a9d01..de0d874859 100644 --- a/content/key-manager.ts +++ b/content/key-manager.ts @@ -12,7 +12,7 @@ import { chinese } from './key-manager/chinese' import { Scheduler } from './scheduler' import { log } from './logger' import { flash } from './flash' -import { Events } from './events' +import { Events, Action } from './events' import { fetchAsync as fetchInspireHEP } from './inspire-hep' import * as Extra from './extra' import { excelColumn, sentenceCase } from './text' @@ -343,9 +343,6 @@ export const KeyManager = new class _KeyManager { return } - // update display panes by issuing a fake item-update notification - Zotero.Notifier.trigger('refresh', 'item', [key.itemID]) - if (!key.pinned && this.autopin.enabled) { this.autopin.schedule(key.itemID, () => { this.pin([key.itemID]).catch(err => log.error('failed to pin', key.itemID, ':', err)) @@ -489,21 +486,27 @@ export const KeyManager = new class _KeyManager { missing = await ZoteroDB.columnQueryAsync(`${$items} SELECT itemID FROM _items WHERE itemID NOT IN (SELECT itemID from betterbibtex.citationkey)`) }) + const notify = (itemIDs: number[], action: Action) => { + void Events.emit('items-changed', { items: Zotero.Items.get(itemIDs), action }) + } this.unwatch = [ this.keys[BlinkKey].events.onInsert.register(changes => { for (const change of changes) { - void this.store(change.entity).catch(err => log.error('keymanager.remove', err)) + void this.store(change.entity).catch(err => log.error('keymanager.insert', err)) } + notify(changes.map(change => change.entity.itemID), 'add') }), this.keys[BlinkKey].events.onUpdate.register(changes => { for (const change of changes) { - void this.store(change.newEntity).catch(err => log.error('keymanager.remove', err)) + void this.store(change.newEntity).catch(err => log.error('keymanager.update', err)) } + notify(changes.map(change => change.newEntity.itemID), 'modify') }), this.keys[BlinkKey].events.onRemove.register(changes => { for (const change of changes) { void this.remove(change.entity).catch(err => log.error('keymanager.remove', err)) } + notify(changes.map(change => change.entity.itemID), 'delete') }), this.keys[BlinkKey].events.onClear.register(_changes => { log.error('error: do not clear the keys database!') From a2ae518c16c68b70c6bbba48ebe06b1c55f5540a Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Sun, 5 May 2024 01:10:41 +0200 Subject: [PATCH 134/177] logging for #2867 --- content/auto-export.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/content/auto-export.ts b/content/auto-export.ts index a1dc0fda35..5693e808f9 100644 --- a/content/auto-export.ts +++ b/content/auto-export.ts @@ -139,11 +139,13 @@ class Git { return this } - public async repo(bib): Promise { + public async repo(bib: string): Promise { const repo = new Git(this) if (!this.git) return repo + let config: string = null + log.debug('2867:', bib, $OS.Path.dirname(bib)) switch (Preference.git) { case 'off': return repo @@ -159,8 +161,6 @@ class Git { break case 'config': - // eslint-disable-next-line no-case-declarations - let config = null for (let root = $OS.Path.dirname(bib); (await $OS.File.exists(root)) && (await $OS.File.stat(root)).isDir && root !== $OS.Path.dirname(root); root = $OS.Path.dirname(root)) { config = $OS.Path.join(root, '.git') if ((await $OS.File.exists(config)) && (await $OS.File.stat(config)).isDir) break @@ -179,7 +179,7 @@ class Git { if (enabled !== 'true' && enabled !== true) return repo } catch (err) { - log.error('git.repo: error parsing config', config.path, err) + log.error('git.repo: error parsing config', config, err) return repo } break From f8c2efd66dc5be2d78e316bf04954443016342fd Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Sat, 4 May 2024 21:48:13 +0200 Subject: [PATCH 135/177] reload-less refresh --- content/ZoteroItemPane.ts | 121 ++++++++++++++++++++------------------ content/ZoteroPane.ts | 9 +-- content/better-bibtex.ts | 22 +++++-- content/events.ts | 2 +- content/key-manager.ts | 15 +++-- 5 files changed, 94 insertions(+), 75 deletions(-) diff --git a/content/ZoteroItemPane.ts b/content/ZoteroItemPane.ts index d2fb63b70b..9f02480551 100644 --- a/content/ZoteroItemPane.ts +++ b/content/ZoteroItemPane.ts @@ -5,7 +5,7 @@ import { log } from './logger' import { Elements } from './create-element' import { busyWait } from './busy-wait' import { icons } from './icons' -import { is7 } from './client' +import { Events } from './events' async function title_sentenceCase(label) { const val = this._getFieldValue(label) @@ -26,13 +26,15 @@ async function title_sentenceCase(label) { export async function newZoteroItemPane(win: Window): Promise { let itemBox: HTMLElement - await busyWait(() => { itemBox = win.document.querySelector(is7 ? 'item-box' : '#zotero-editpane-item-box'); return !!itemBox }) + await busyWait(() => { itemBox = win.document.querySelector('#zotero-editpane-item-box'); return !!itemBox }) new ZoteroItemPane(win, itemBox) } export class ZoteroItemPane { document: Document elements: Elements + displayed: number + done: () => void public refresh(): void { this.itemBox.refresh() @@ -41,76 +43,79 @@ export class ZoteroItemPane { constructor(win: Window, private itemBox: any) { // eslint-disable-line @typescript-eslint/explicit-module-boundary-types this.document = win.document const elements = this.elements = new Elements(this.document) - // const itemPane = (win as any).ZoteroItemPane - // itemPane.BetterBibTeX = this if (!this.document.getElementById('better-bibtex-editpane-item-box')) { - if (!is7) { - itemBox.parentNode.appendChild(elements.create('vbox', { flex: 1, style: 'margin: 0; padding: 0', $: [ - - elements.create('grid', { id: 'better-bibtex-editpane-item-box', $: [ - elements.create('columns', { $: [ - elements.create('column'), - elements.create('column', { flex: '1' }), - // elements.create('column', { flex: 100 }), - ]}), - elements.create('rows', { id: 'better-bibtex-fields', flex: 1, $: [ - elements.create('row', { class: 'zotero-item-first-row', $: [ - elements.create('label', { id: 'better-bibtex-citekey-label', style: 'width: 9em; text-align: right; color: #7F7F7F', value: '' }), - elements.create('textbox', { id: 'better-bibtex-citekey-display', flex: '1', class: 'plain', readonly: 'true', value: '' }), - // elements.create('label', { id: 'better-bibtex-citekey-pin', value: icons.pin }), - ]}), + itemBox.parentNode.appendChild(elements.create('vbox', { flex: 1, style: 'margin: 0; padding: 0', $: [ + + elements.create('grid', { id: 'better-bibtex-editpane-item-box', $: [ + elements.create('columns', { $: [ + elements.create('column'), + elements.create('column', { flex: '1' }), + // elements.create('column', { flex: 100 }), + ]}), + elements.create('rows', { id: 'better-bibtex-fields', flex: 1, $: [ + elements.create('row', { class: 'zotero-item-first-row', $: [ + elements.create('label', { id: 'better-bibtex-citekey-label', style: 'width: 9em; text-align: right; color: #7F7F7F', value: '' }), + elements.create('textbox', { id: 'better-bibtex-citekey-display', flex: '1', class: 'plain', readonly: 'true', value: '' }), + // elements.create('label', { id: 'better-bibtex-citekey-pin', value: icons.pin }), ]}), ]}), + ]}), - itemBox, - ]})) - } + itemBox, + ]})) } win.addEventListener('unload', () => { this.unload() }) - if (!is7) { - $patch$(itemBox.__proto__, 'refresh', original => function() { - // eslint-disable-next-line prefer-rest-params - original.apply(this, arguments) - - if (!this.item) { - // why is it refreshing if there is no item?! - log.debug('itemBox.refresh without an item') - return - } - - const menuid = 'zotero-field-transform-menu-better-sentencecase' - let menuitem = this.ownerDocument.getElementById(menuid) - const menu = this.ownerDocument.getElementById('zotero-field-transform-menu') - if (menu && !menuitem) { - log.debug('bbt sentencecase: adding', menuid) - menuitem = menu.appendChild(elements.create('menuitem', { - id: menuid, - label: 'BBT sentence case', - oncommand: event => { - title_sentenceCase.call(event.currentTarget.ownerDocument.getBindingParent(event.currentTarget), event.currentTarget.ownerDocument.popupNode) - }, - })) - } - - const { citationKey, pinned } = Zotero.BetterBibTeX.KeyManager.get(this.item.id) - const label = this.parentNode.querySelector('#better-bibtex-citekey-label') - const value = this.parentNode.querySelector('#better-bibtex-citekey-display') - if (!value) return // merge pane uses itembox - - label.hidden = value.hidden = !citationKey - - label.value = `${pinned ? icons.pin : ''}${l10n.localize('better-bibtex_item-pane_info_citation-key.label')}` - value.value = citationKey - }) - } + const self = this // eslint-disable-line @typescript-eslint/no-this-alias + $patch$(itemBox.__proto__, 'refresh', original => function() { + // eslint-disable-next-line prefer-rest-params + original.apply(this, arguments) + + if (!this.item) { + self.displayed = undefined + // why is it refreshing if there is no item?! + log.debug('itemBox.refresh without an item') + return + } + + self.displayed = this.item.id + const menuid = 'zotero-field-transform-menu-better-sentencecase' + let menuitem = this.ownerDocument.getElementById(menuid) + const menu = this.ownerDocument.getElementById('zotero-field-transform-menu') + if (menu && !menuitem) { + log.debug('bbt sentencecase: adding', menuid) + menuitem = menu.appendChild(elements.create('menuitem', { + id: menuid, + label: 'BBT sentence case', + oncommand: event => { + title_sentenceCase.call(event.currentTarget.ownerDocument.getBindingParent(event.currentTarget), event.currentTarget.ownerDocument.popupNode) + }, + })) + } + + const { citationKey, pinned } = Zotero.BetterBibTeX.KeyManager.get(this.item.id) + const label = this.parentNode.querySelector('#better-bibtex-citekey-label') + const value = this.parentNode.querySelector('#better-bibtex-citekey-display') + if (!value) return // merge pane uses itembox + + label.hidden = value.hidden = !citationKey + + label.value = `${pinned ? icons.pin : ''}${l10n.localize('better-bibtex_item-pane_info_citation-key.label')}` + value.value = citationKey + }) + + this.done = Events.on('items-changed', ({ items }) => { + if (this.document && items.map(item => item.id).includes(this.displayed)) this.refresh() + }) } public unload(): void { this.elements.remove() + this.done?.() + this.document = undefined } } diff --git a/content/ZoteroPane.ts b/content/ZoteroPane.ts index 58c2f80262..ca5243a096 100644 --- a/content/ZoteroPane.ts +++ b/content/ZoteroPane.ts @@ -253,10 +253,11 @@ class ZoteroPane { if (Zotero.BetterBibTeX.uninstalled) clean_pane_persist() }, this.patched) - if (!is7) if (this.ZoteroPane.itemsView.collectionTreeRow) await this.ZoteroPane.itemsView.refreshAndMaintainSelection() - - const selected = this.ZoteroPane.getSelectedItems(true) - if (selected.length === 1) Zotero.Notifier.trigger('refresh', 'item', selected) + if (!is7) { + if (this.ZoteroPane.itemsView.collectionTreeRow) await this.ZoteroPane.itemsView.refreshAndMaintainSelection() + const selected = this.ZoteroPane.getSelectedItems(true) + if (selected.length === 1) Zotero.Notifier.trigger('refresh', 'item', selected) + } } public pullExport(): void { diff --git a/content/better-bibtex.ts b/content/better-bibtex.ts index 7b5354e0e1..c3abeaa426 100644 --- a/content/better-bibtex.ts +++ b/content/better-bibtex.ts @@ -848,6 +848,9 @@ export class BetterBibTeX { async loadUI(win: Window): Promise { if (is7) { + let $displayed: number + let $refresh: () => void + let $done: () => void Zotero.ItemPaneManager.registerSection({ paneID: 'betterbibtex-section-citationkey', pluginID: 'better-bibtex@iris-advies.com', @@ -861,24 +864,31 @@ export class BetterBibTeX { }, bodyXHTML: 'Citation Key ', // onRender: ({ body, item, editable, tabType }) => { - onRender: ({ body, item, setSectionSummary }) => { + onRender: ({ body, item, setSectionSummary }) => { + $displayed = item.id const citekey = item.getField('citationKey') body.ownerDocument.getElementById('better-bibtex-citation-key').value = citekey || '\u274C' setSectionSummary(citekey || '') }, - /* - onInit({ refresh }) { + onInit: ({ refresh }) => { + $refresh = refresh + $done = Events.on('items-changed', ({ items }) => { + if ($refresh && items.map(item => item.id).includes($displayed)) $refresh() + }) }, - onDestroy() { + onDestroy: () => { + $done?.() + $done = undefined + $displayed = undefined + $refresh = undefined }, - */ }) } try { log.debug('loading main UI') await newZoteroPane(win) - await newZoteroItemPane(win) + if (!is7) await newZoteroItemPane(win) } catch (err) { log.debug('loadUI error:', err) diff --git a/content/events.ts b/content/events.ts index cec44f45a0..b02a72b601 100644 --- a/content/events.ts +++ b/content/events.ts @@ -6,7 +6,7 @@ import { log } from './logger' import { is7 } from './client' type IdleState = 'active' | 'idle' -type Action = 'modify' | 'delete' | 'add' +export type Action = 'modify' | 'delete' | 'add' type IdleObserver = { observe: (subject: string, topic: IdleState, data: any) => void diff --git a/content/key-manager.ts b/content/key-manager.ts index 0b386a9d01..de0d874859 100644 --- a/content/key-manager.ts +++ b/content/key-manager.ts @@ -12,7 +12,7 @@ import { chinese } from './key-manager/chinese' import { Scheduler } from './scheduler' import { log } from './logger' import { flash } from './flash' -import { Events } from './events' +import { Events, Action } from './events' import { fetchAsync as fetchInspireHEP } from './inspire-hep' import * as Extra from './extra' import { excelColumn, sentenceCase } from './text' @@ -343,9 +343,6 @@ export const KeyManager = new class _KeyManager { return } - // update display panes by issuing a fake item-update notification - Zotero.Notifier.trigger('refresh', 'item', [key.itemID]) - if (!key.pinned && this.autopin.enabled) { this.autopin.schedule(key.itemID, () => { this.pin([key.itemID]).catch(err => log.error('failed to pin', key.itemID, ':', err)) @@ -489,21 +486,27 @@ export const KeyManager = new class _KeyManager { missing = await ZoteroDB.columnQueryAsync(`${$items} SELECT itemID FROM _items WHERE itemID NOT IN (SELECT itemID from betterbibtex.citationkey)`) }) + const notify = (itemIDs: number[], action: Action) => { + void Events.emit('items-changed', { items: Zotero.Items.get(itemIDs), action }) + } this.unwatch = [ this.keys[BlinkKey].events.onInsert.register(changes => { for (const change of changes) { - void this.store(change.entity).catch(err => log.error('keymanager.remove', err)) + void this.store(change.entity).catch(err => log.error('keymanager.insert', err)) } + notify(changes.map(change => change.entity.itemID), 'add') }), this.keys[BlinkKey].events.onUpdate.register(changes => { for (const change of changes) { - void this.store(change.newEntity).catch(err => log.error('keymanager.remove', err)) + void this.store(change.newEntity).catch(err => log.error('keymanager.update', err)) } + notify(changes.map(change => change.newEntity.itemID), 'modify') }), this.keys[BlinkKey].events.onRemove.register(changes => { for (const change of changes) { void this.remove(change.entity).catch(err => log.error('keymanager.remove', err)) } + notify(changes.map(change => change.entity.itemID), 'delete') }), this.keys[BlinkKey].events.onClear.register(_changes => { log.error('error: do not clear the keys database!') From a704361f9dc658ffe1c77920064468b3ebcd93fe Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Sun, 5 May 2024 01:14:43 +0200 Subject: [PATCH 136/177] mask home URI in debug log --- content/ErrorReport.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/content/ErrorReport.ts b/content/ErrorReport.ts index 192fcafb9f..824c666676 100644 --- a/content/ErrorReport.ts +++ b/content/ErrorReport.ts @@ -194,7 +194,8 @@ export class ErrorReport { /PAC file installed from/, ].map(re => re.source).join('|')) const homeDir = $OS.Constants.Path.homeDir - return logging.filter(line => !line.match(ignore)).map(line => line.replace(homeDir, '$HOME')).join('\n') + const homeURI = $OS.Path.toFileURI(homeDir) + return logging.filter(line => !line.match(ignore)).map(line => line.replace(homeDir, '$HOME').replace(homeURI, '$HOME')).join('\n') } private errors(): string { From 05dad195caf0a503a93646fb35e75bfbd678db53 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Sun, 5 May 2024 01:15:21 +0200 Subject: [PATCH 137/177] ncu --- package-lock.json | 29 +++++++++++++++++++++-------- package.json | 4 ++-- 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index b8cbf00283..7eca8bac6d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -33,7 +33,7 @@ "emittery": "^1.0.3", "fast-safe-stringify": "^2.1.1", "fold-to-ascii": "^5.0.1", - "fracturedjsonjs": "^4.0.0", + "fracturedjsonjs": "^4.0.1", "html-to-md": "^0.8.5", "i": "^0.3.7", "jieba-zh-cn": "^1.0.12", @@ -116,7 +116,7 @@ "process": "^0.11.10", "properties-reader": "^2.3.0", "pug": "^3.0.2", - "putout": "^35.18.0", + "putout": "^35.19.0", "recast": "^0.23.6", "regenerate": "^1.4.2", "rimraf": "^5.0.5", @@ -1741,6 +1741,18 @@ "putout": ">=32" } }, + "node_modules/@putout/plugin-apply-overrides": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@putout/plugin-apply-overrides/-/plugin-apply-overrides-1.1.0.tgz", + "integrity": "sha512-cKmfUbGBMwy2+upytcHha138WN/VilRqFVv8dmZAG1vShp2rqyNlyrbhJYhv4FmxARys3zv6EluIyzhADZ+j7Q==", + "dev": true, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "putout": ">=35" + } + }, "node_modules/@putout/plugin-apply-starts-with": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@putout/plugin-apply-starts-with/-/plugin-apply-starts-with-1.1.0.tgz", @@ -7122,9 +7134,9 @@ } }, "node_modules/fracturedjsonjs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fracturedjsonjs/-/fracturedjsonjs-4.0.0.tgz", - "integrity": "sha512-IFRM3y41/Wo8/JvpG6SHGiKxQRzG250BPn178T6C9p60vKihpMUeM4nT+ism8w+9eGoYqgPw45oKtSLJldPf3g==" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/fracturedjsonjs/-/fracturedjsonjs-4.0.1.tgz", + "integrity": "sha512-KMhSx7o45aPVj4w27dwdQyKJkNU8oBqw8UiK/s3VzsQB3+pKQ/3AqG/YOEQblV2BDuYE5dKp0OMf8RDsshrjTA==" }, "node_modules/fragment-cache": { "version": "0.2.1", @@ -14706,9 +14718,9 @@ "integrity": "sha512-EkCRMV2w15w+9wylcpabacKK9VvTRX3TvhVQJBwIk4ThvllI2M6RlvdEZvJLhxsxy4x8IEDZneQhlGU0Pk5keg==" }, "node_modules/putout": { - "version": "35.18.0", - "resolved": "https://registry.npmjs.org/putout/-/putout-35.18.0.tgz", - "integrity": "sha512-vRSxHkQrqGzArWdvAuNVStlZtQndB3st+Hci0R0BaiSucZnZ4BTDQ6lTjbKJSnZazLove2nUdqOX5UCT6A7gGg==", + "version": "35.19.0", + "resolved": "https://registry.npmjs.org/putout/-/putout-35.19.0.tgz", + "integrity": "sha512-3EzYxKlVugUq1ZjK+gRZdR4pMegfUVGmUuuZx0hr4U+kYp+1ANQHAbuVCovuot1GE9lI0yV3N2hlzAw4rudgig==", "dev": true, "dependencies": { "@putout/babel": "^2.0.0", @@ -14751,6 +14763,7 @@ "@putout/plugin-apply-early-return": "^3.0.0", "@putout/plugin-apply-flat-map": "^2.0.0", "@putout/plugin-apply-optional-chaining": "^5.0.0", + "@putout/plugin-apply-overrides": "^1.0.0", "@putout/plugin-apply-starts-with": "^1.0.0", "@putout/plugin-apply-template-literals": "^3.0.0", "@putout/plugin-browserlist": "^2.0.0", diff --git a/package.json b/package.json index 33cd648604..e6ab431289 100644 --- a/package.json +++ b/package.json @@ -87,7 +87,7 @@ "emittery": "^1.0.3", "fast-safe-stringify": "^2.1.1", "fold-to-ascii": "^5.0.1", - "fracturedjsonjs": "^4.0.0", + "fracturedjsonjs": "^4.0.1", "html-to-md": "^0.8.5", "i": "^0.3.7", "jieba-zh-cn": "^1.0.12", @@ -170,7 +170,7 @@ "process": "^0.11.10", "properties-reader": "^2.3.0", "pug": "^3.0.2", - "putout": "^35.18.0", + "putout": "^35.19.0", "recast": "^0.23.6", "regenerate": "^1.4.2", "rimraf": "^5.0.5", From a51b782d8b09f08112f59d4cfda2e7f54fd8829d Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Sun, 5 May 2024 08:58:46 +0200 Subject: [PATCH 138/177] onMainWindowLoad --- content/better-bibtex.ts | 4 +++- content/bootstrap.ts | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/content/better-bibtex.ts b/content/better-bibtex.ts index c3abeaa426..27eb9ffdbb 100644 --- a/content/better-bibtex.ts +++ b/content/better-bibtex.ts @@ -862,9 +862,11 @@ export class BetterBibTeX { l10nID: 'better-bibtex_item-pane_section_sidenav', icon: `${rootURI}content/skin/citation-key.png`, }, - bodyXHTML: 'Citation Key ', + // bodyXHTML: 'Citation Key ', + bodyXHTML: 'Citation Key ', // onRender: ({ body, item, editable, tabType }) => { onRender: ({ body, item, setSectionSummary }) => { + body.style.display = 'flex' $displayed = item.id const citekey = item.getField('citationKey') body.ownerDocument.getElementById('better-bibtex-citation-key').value = citekey || '\u274C' diff --git a/content/bootstrap.ts b/content/bootstrap.ts index 7ee4899b46..88fe25efce 100644 --- a/content/bootstrap.ts +++ b/content/bootstrap.ts @@ -60,6 +60,10 @@ export function install(_data: any, _reason: ReasonId) { log('install, nothing to do') } +export function onMainWindowLoad({ window }) { + window.MozXULElement.insertFTLIfNeeded('better-bibtex.ftl') +} + let chromeHandle export async function startup({ resourceURI, rootURI = resourceURI.spec }, reason: ReasonId) { try { From a782c978e8a74cda19cb54b73397146472303085 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Sun, 5 May 2024 11:06:58 +0200 Subject: [PATCH 139/177] scrub harder --- content/ErrorReport.ts | 8 ++++--- content/cayw/formatter.ts | 2 +- content/escape.ts | 23 +++++++++++-------- content/text.ts | 8 ------- .../Better BibTeX Citation Key Quick Copy.ts | 2 +- translators/lib/translator.ts | 9 +++----- 6 files changed, 23 insertions(+), 29 deletions(-) diff --git a/content/ErrorReport.ts b/content/ErrorReport.ts index 824c666676..c232dc9638 100644 --- a/content/ErrorReport.ts +++ b/content/ErrorReport.ts @@ -5,6 +5,7 @@ import { is7 } from './client' const $OS = is7 ? Shim : OS import { PromptService } from './prompt' +import { regex as escapeRE } from './escape' import { Preference } from './prefs' @@ -51,6 +52,9 @@ type Report = { acronyms?: string } +const homeDir = $OS.Constants.Path.homeDir +const $home = new RegExp(`${escapeRE(homeDir)}|${escapeRE($OS.Path.toFileURI(homeDir))}`, 'g') + export class ErrorReport { private previewSize = 3 private document: Document @@ -193,9 +197,7 @@ export class ErrorReport { /Could not get children of.*CrashManager.jsm/, /PAC file installed from/, ].map(re => re.source).join('|')) - const homeDir = $OS.Constants.Path.homeDir - const homeURI = $OS.Path.toFileURI(homeDir) - return logging.filter(line => !line.match(ignore)).map(line => line.replace(homeDir, '$HOME').replace(homeURI, '$HOME')).join('\n') + return logging.filter(line => !line.match(ignore)).map(line => line.replace($home, '$HOME')).join('\n') } private errors(): string { diff --git a/content/cayw/formatter.ts b/content/cayw/formatter.ts index 0fb5095f98..73fa7e81e7 100644 --- a/content/cayw/formatter.ts +++ b/content/cayw/formatter.ts @@ -3,7 +3,7 @@ import { Translators } from '../translators' import { getItemsAsync } from '../get-items-async' import { Preference } from '../prefs' -import { escapeHTML } from '../text' +import { html as escapeHTML } from '../escape' import { scannableCite } from '../../gen/ScannableCite' import { citeCreators, yearFromDate } from '../../translators/Better BibTeX Citation Key Quick Copy' import { Eta } from 'eta' diff --git a/content/escape.ts b/content/escape.ts index f48d850807..e527d70ab9 100644 --- a/content/escape.ts +++ b/content/escape.ts @@ -1,15 +1,14 @@ +import rescape from '@stdlib/utils-escape-regexp-string' + +const entity: Record = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', +} export function html(str: string): string { - // eslint-disable-next-line no-caller - // if (typeof str === 'undefined') Zotero.debug(`${arguments.callee.caller.name} do not pass undefined! ${(new Error('stacktrace')).stack}`) - const entity = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - } // return str.replace(/[\u00A0-\u9999<>\&]/gim, c => entity[c] || `&#${c.charCodeAt(0)};`) - // eslint-disable-next-line @typescript-eslint/no-unsafe-return - return str.replace(/[<>&"']/g, c => entity[c] || `&#${c.charCodeAt(0)};`) + return str.replace(/[<>&"']/g, (c: string) => entity[c] || `&#${c.charCodeAt(0)};`) } export function rtf(str: string): string { @@ -17,3 +16,7 @@ export function rtf(str: string): string { .replace(/([{}\\])/g, '\\$1') .replace(/\n/g, '\\par ') } + +export function regex(text: string): string { + return rescape(text) +} diff --git a/content/text.ts b/content/text.ts index 33d1db5cb7..7ce99eea4a 100644 --- a/content/text.ts +++ b/content/text.ts @@ -498,14 +498,6 @@ export const CJK = new RegExp(`([${ scripts.map((s: { name: string, bmp: string } }).join('') }])`, 'g') -export function escapeHTML(unsafe: string): string { - return unsafe - .replace(/&/g, '&') - .replace(//g, '>') - .replace(/"/g, '"') -} - export function asciify(str: string): string { return str.replace(/[\u007F-\uFFFF]/g, chr => `\\u${(`0000${chr.charCodeAt(0).toString(16)}`).substr(-4)}`) } diff --git a/translators/Better BibTeX Citation Key Quick Copy.ts b/translators/Better BibTeX Citation Key Quick Copy.ts index fc242d8432..aad1a765e5 100644 --- a/translators/Better BibTeX Citation Key Quick Copy.ts +++ b/translators/Better BibTeX Citation Key Quick Copy.ts @@ -2,7 +2,7 @@ declare const Zotero: any import { simplifyForExport } from '../gen/items/simplify' -import { escapeHTML } from '../content/text' +import { html as escapeHTML } from '../content/escape' import { Eta } from 'eta' const eta = new Eta({ autoEscape: true }) diff --git a/translators/lib/translator.ts b/translators/lib/translator.ts index f700a0890d..8b9038dde0 100644 --- a/translators/lib/translator.ts +++ b/translators/lib/translator.ts @@ -8,6 +8,7 @@ const $OS = is7 ? Shim : OS import * as Prefs from '../../gen/preferences/meta' const PrefNames: Set = new Set(Object.keys(Prefs.defaults)) import { client } from '../../content/client' +import { regex as escapeRE } from '../../content/escape' import { RegularItem, Item, Collection, Attachment } from '../../gen/typings/serialized-item' import type { Exporter as BibTeXExporter } from '../bibtex/exporter' import type { ZoteroItem } from '../bibtex/bibtex' @@ -173,10 +174,6 @@ export class Collections { } } -function escapeRegExp(text: string): string { - return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&') -} - export type Input = { items: Items collections: Collections @@ -387,11 +384,11 @@ export class Translation { // eslint-disable-line @typescript-eslint/naming-conv translation.preferences.separatorNames = translation.preferences.separatorNames.trim() translation.and = { list: { - re: new RegExp(escapeRegExp(translation.preferences.separatorList), 'g'), + re: new RegExp(escapeRE(translation.preferences.separatorList), 'g'), repl: ` {${translation.preferences.separatorList}} `, }, names: { - re: new RegExp(` ${escapeRegExp(translation.preferences.separatorNames)} `, 'g'), + re: new RegExp(` ${escapeRE(translation.preferences.separatorNames)} `, 'g'), repl: ` {${translation.preferences.separatorNames}} `, }, } From 33a0dc0fb3cd055c263b9a9705e823395f876b0b Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Sun, 5 May 2024 11:10:53 +0200 Subject: [PATCH 140/177] more logging --- content/serializer.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/content/serializer.ts b/content/serializer.ts index 06ce05824a..7bfdad1f2a 100644 --- a/content/serializer.ts +++ b/content/serializer.ts @@ -8,6 +8,7 @@ import { DB as Cache } from './db/cache' import { $and } from './db/loki' import { Preference } from './prefs' import { orchestrator } from './orchestrator' +import { log } from './logger' type CacheEntry = { itemID: number @@ -98,6 +99,7 @@ export const Serializer = new class { // eslint-disable-line @typescript-eslint/ private fastAttachment(serialized: Attachment, att): Attachment { if (att.attachmentLinkMode !== Zotero.Attachments.LINK_MODE_LINKED_URL) { serialized.localPath = att.getFilePath() + log.debug('2867: fastAttachment', { path: serialized.localPath }) if (serialized.localPath) serialized.defaultPath = `files/${att.id}/${$OS.Path.basename(serialized.localPath)}` } // eslint-disable-next-line @typescript-eslint/no-unsafe-return From 1cc2047104ccd4575a69fec35958ac028d934203 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Sun, 5 May 2024 11:24:46 +0200 Subject: [PATCH 141/177] log onMainWindowLoad --- content/bootstrap.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/content/bootstrap.ts b/content/bootstrap.ts index 88fe25efce..59b2a1cf0a 100644 --- a/content/bootstrap.ts +++ b/content/bootstrap.ts @@ -61,6 +61,7 @@ export function install(_data: any, _reason: ReasonId) { } export function onMainWindowLoad({ window }) { + log('onMainWindowLoad') window.MozXULElement.insertFTLIfNeeded('better-bibtex.ftl') } From ffa8e3933ff0f90c6006782880de7ea009c4ce84 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Sun, 5 May 2024 11:38:52 +0200 Subject: [PATCH 142/177] platform --- content/client.ts | 23 ++++++++++++++++++++++- content/prefs.ts | 24 +++--------------------- content/worker/zotero.ts | 6 +++--- 3 files changed, 28 insertions(+), 25 deletions(-) diff --git a/content/client.ts b/content/client.ts index a04b80ed49..465b0230c1 100644 --- a/content/client.ts +++ b/content/client.ts @@ -1,7 +1,8 @@ declare const Zotero: any declare const location: any -export const is7 = (typeof location !== 'undefined' && location.search) ? ((new URLSearchParams(location.search)).get('is7') === 'true') : Zotero.platformMajorVersion >= 102 +const worker = typeof location !== 'undefined' && location.search +export const is7 = worker ? ((new URLSearchParams(location.search)).get('is7') === 'true') : Zotero.platformMajorVersion >= 102 function clientname(): string { if (typeof location !== 'undefined' && location.search) return (new URLSearchParams(location.search)).get('clientName') @@ -11,5 +12,25 @@ function clientname(): string { throw new Error('Unable to detect clientName') } +export const platform = { + name: '', + windows: false, + mac: false, + linux: false, +} + +if (worker) { + platform.name = (new URLSearchParams(location.search)).get('platform') + platform.windows = platform.name === 'win' + platform.mac = platform.name === 'mac' + platform.linux = platform.name === 'lin' +} +else { + platform.name = Zotero.isWin ? 'win' : Zotero.isMac ? 'mac' : Zotero.isLinux ? 'lin' : 'unk' + platform.windows = Zotero.isWin + platform.mac = Zotero.isMac + platform.linux = Zotero.isLinux +} + export const clientName = clientname() export const client = clientName.toLowerCase().replace('-', '') diff --git a/content/prefs.ts b/content/prefs.ts index 425b88d701..449662271b 100644 --- a/content/prefs.ts +++ b/content/prefs.ts @@ -2,7 +2,7 @@ declare const Services: any import { Shim } from './os' -import { is7 } from './client' +import { is7, platform } from './client' const $OS = is7 ? Shim : OS import { Events } from './events' @@ -39,16 +39,7 @@ export const Preference = new class PreferenceManager extends PreferenceManagerB this.setDefaultPrefs() // put this in a preference so that translators can access this. - if (Zotero.isWin) { - this.platform = 'win' - } - else if (Zotero.isMac) { - this.platform = 'mac' - } - else { - if (!Zotero.isLinux) Zotero.debug('error: better-bibtex could not establish the platform, assuming linux') - this.platform = 'lin' - } + this.platform = platform.name if (this.testing) { return new Proxy(this, { @@ -181,16 +172,7 @@ export const Preference = new class PreferenceManager extends PreferenceManagerB this.move('suppressTitleCase', 'exportTitleCase', old => !old) // put this in a preference so that translators can access this. - if (Zotero.isWin) { - this.platform = 'win' - } - else if (Zotero.isMac) { - this.platform = 'mac' - } - else { - if (!Zotero.isLinux) Zotero.debug('error: better-bibtex could not establish the platform, assuming linux') - this.platform = 'lin' - } + this.platform = platform.name if (this.testing) { return new Proxy(this, { diff --git a/content/worker/zotero.ts b/content/worker/zotero.ts index 1e36bc39c4..371a15aeec 100644 --- a/content/worker/zotero.ts +++ b/content/worker/zotero.ts @@ -10,7 +10,7 @@ import { print } from '../logger' declare const IOUtils: any import { Shim } from '../os' -import { is7 } from '../client' +import { is7, platform } from '../client' if (!is7) importScripts('resource://gre/modules/osfile.jsm') const $OS = is7 ? Shim : OS @@ -287,7 +287,7 @@ const WorkerZoteroUtilities = { } function isWinRoot(path) { - return workerEnvironment.platform === 'win' && path.match(/^[a-z]:\\?$/i) + return platform.windows && path.match(/^[a-z]:\\?$/i) } async function makeDirs(path) { if (isWinRoot(path)) return @@ -424,7 +424,7 @@ class WorkerZotero { public async init() { this.Date.init(dateFormats) - workerJob.preferences.platform = workerEnvironment.platform + workerJob.preferences.platform = platform.name workerJob.preferences.client = client this.output = '' this.items = workerJob.data.items.length From e35499165b023c71b1df78fb23c77b299a70d3b1 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Sun, 5 May 2024 11:50:34 +0200 Subject: [PATCH 143/177] basename should be able to handle relative paths --- content/os.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/content/os.ts b/content/os.ts index d827dc7172..a0e4f595ef 100644 --- a/content/os.ts +++ b/content/os.ts @@ -3,6 +3,14 @@ import { is7 } from './client' import { OS as $OS } from '../gen/osfile' export const Shim: any = is7 ? $OS : undefined +Shim.Path = { + ...Shim.Path, + basename: (path: string) => { + if (!path) return path + return path.replace(/[\\/]$/, '').replace(/.*[\\/]/, '') + }, +} + /* if (is7 && !Shim.Path.split) { Shim.Path.split = (path: string) => { From 95bc74ddf042012af3830afced0f14f9598dacf8 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Sun, 5 May 2024 12:02:01 +0200 Subject: [PATCH 144/177] private basename --- content/ErrorReport.ts | 2 +- content/os.ts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/content/ErrorReport.ts b/content/ErrorReport.ts index c232dc9638..06e3164719 100644 --- a/content/ErrorReport.ts +++ b/content/ErrorReport.ts @@ -53,7 +53,7 @@ type Report = { } const homeDir = $OS.Constants.Path.homeDir -const $home = new RegExp(`${escapeRE(homeDir)}|${escapeRE($OS.Path.toFileURI(homeDir))}`, 'g') +const $home = new RegExp(`${escapeRE(homeDir)}|${escapeRE(homeDir.replace(Zotero.isWin ? /\\/g : /\//g, '$1$1'))}|${escapeRE($OS.Path.toFileURI(homeDir))}`, 'g') export class ErrorReport { private previewSize = 3 diff --git a/content/os.ts b/content/os.ts index a0e4f595ef..2d4eec59c5 100644 --- a/content/os.ts +++ b/content/os.ts @@ -6,6 +6,7 @@ export const Shim: any = is7 ? $OS : undefined Shim.Path = { ...Shim.Path, basename: (path: string) => { + // no idea why it was decided the shim should not accept relative paths if (!path) return path return path.replace(/[\\/]$/, '').replace(/.*[\\/]/, '') }, From 705302532d9ce3da35e1062f30a53490a407fdf2 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Sun, 5 May 2024 12:16:38 +0200 Subject: [PATCH 145/177] private basename --- content/os.ts | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/content/os.ts b/content/os.ts index 2d4eec59c5..ec6cdd99ae 100644 --- a/content/os.ts +++ b/content/os.ts @@ -1,16 +1,11 @@ -import { is7 } from './client' +import { is7, platform } from './client' import { OS as $OS } from '../gen/osfile' export const Shim: any = is7 ? $OS : undefined -Shim.Path = { - ...Shim.Path, - basename: (path: string) => { - // no idea why it was decided the shim should not accept relative paths - if (!path) return path - return path.replace(/[\\/]$/, '').replace(/.*[\\/]/, '') - }, -} +// no idea why it was decided the shim should not accept relative paths +const Path = platform.windows ? { start: /\\/g, end: /\\$/ } : { start: /\//g, end: /\/$/ } +Shim.Path.basename = (path: string) => path && (Shim.Path.normalize(path) as string).replace(Path.end, '').replace(Path.start, '') /* if (is7 && !Shim.Path.split) { From 019865a4233a3bddc44f96934dfa5fd788cfbd88 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Sun, 5 May 2024 13:44:31 +0200 Subject: [PATCH 146/177] this shim... --- content/ErrorReport.ts | 10 ++++++---- content/os.ts | 7 +++++++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/content/ErrorReport.ts b/content/ErrorReport.ts index 06e3164719..588cea4208 100644 --- a/content/ErrorReport.ts +++ b/content/ErrorReport.ts @@ -5,7 +5,7 @@ import { is7 } from './client' const $OS = is7 ? Shim : OS import { PromptService } from './prompt' -import { regex as escapeRE } from './escape' +// import { regex as escapeRE } from './escape' import { Preference } from './prefs' @@ -52,8 +52,8 @@ type Report = { acronyms?: string } -const homeDir = $OS.Constants.Path.homeDir -const $home = new RegExp(`${escapeRE(homeDir)}|${escapeRE(homeDir.replace(Zotero.isWin ? /\\/g : /\//g, '$1$1'))}|${escapeRE($OS.Path.toFileURI(homeDir))}`, 'g') +// const homeDir = $OS.Constants.Path.homeDir +// const $home = new RegExp(`${escapeRE(homeDir)}|${escapeRE(homeDir.replace(Zotero.isWin ? /\\/g : /\//g, '$1$1'))}|${escapeRE($OS.Path.toFileURI(homeDir))}`, 'g') export class ErrorReport { private previewSize = 3 @@ -197,7 +197,9 @@ export class ErrorReport { /Could not get children of.*CrashManager.jsm/, /PAC file installed from/, ].map(re => re.source).join('|')) - return logging.filter(line => !line.match(ignore)).map(line => line.replace($home, '$HOME')).join('\n') + return logging.filter(line => !line.match(ignore)) + // .map(line => line.replace($home, '$HOME')) + .join('\n') } private errors(): string { diff --git a/content/os.ts b/content/os.ts index ec6cdd99ae..df4b396a01 100644 --- a/content/os.ts +++ b/content/os.ts @@ -1,5 +1,6 @@ import { is7, platform } from './client' +import { print } from './logger' import { OS as $OS } from '../gen/osfile' export const Shim: any = is7 ? $OS : undefined @@ -7,6 +8,12 @@ export const Shim: any = is7 ? $OS : undefined const Path = platform.windows ? { start: /\\/g, end: /\\$/ } : { start: /\//g, end: /\/$/ } Shim.Path.basename = (path: string) => path && (Shim.Path.normalize(path) as string).replace(Path.end, '').replace(Path.start, '') +const exists = Shim.File.exists +Shim.File.exists = (path: string) => { + print(`2867: testing ${JSON.stringify(path)}`) + return exists(path) as boolean +} + /* if (is7 && !Shim.Path.split) { Shim.Path.split = (path: string) => { From ccdaef48228b4dc6b096de4bf1ec2e0f859df8d7 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Sun, 5 May 2024 15:04:48 +0200 Subject: [PATCH 147/177] this shim... --- content/os.ts | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/content/os.ts b/content/os.ts index df4b396a01..5a4e7d0ce6 100644 --- a/content/os.ts +++ b/content/os.ts @@ -4,14 +4,16 @@ import { print } from './logger' import { OS as $OS } from '../gen/osfile' export const Shim: any = is7 ? $OS : undefined -// no idea why it was decided the shim should not accept relative paths -const Path = platform.windows ? { start: /\\/g, end: /\\$/ } : { start: /\//g, end: /\/$/ } -Shim.Path.basename = (path: string) => path && (Shim.Path.normalize(path) as string).replace(Path.end, '').replace(Path.start, '') +if (Shim) { + // no idea why it was decided the shim should not accept relative paths + const Path = platform.windows ? { start: /\\/g, end: /\\$/ } : { start: /\//g, end: /\/$/ } + Shim.Path.basename = (path: string) => path && (Shim.Path.normalize(path) as string).replace(Path.end, '').replace(Path.start, '') -const exists = Shim.File.exists -Shim.File.exists = (path: string) => { - print(`2867: testing ${JSON.stringify(path)}`) - return exists(path) as boolean + const exists = Shim.File.exists + Shim.File.exists = (path: string) => { + print(`2867: testing ${JSON.stringify(path)}`) + return exists(path) as boolean + } } /* From 8aa1a4ca24854c9df0a17537e42a2007c3ee9d51 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Sun, 5 May 2024 15:18:00 +0200 Subject: [PATCH 148/177] onMainWindowLoad --- content/better-bibtex.ts | 5 +++++ content/bootstrap.ts | 1 + 2 files changed, 6 insertions(+) diff --git a/content/better-bibtex.ts b/content/better-bibtex.ts index 27eb9ffdbb..7522e708e8 100644 --- a/content/better-bibtex.ts +++ b/content/better-bibtex.ts @@ -878,6 +878,11 @@ export class BetterBibTeX { if ($refresh && items.map(item => item.id).includes($displayed)) $refresh() }) }, + onItemChange: ({ body, item }) => { + $displayed = item.id + const citekey = item.getField('citationKey') + body.ownerDocument.getElementById('better-bibtex-citation-key').value = citekey || '\u274C' + }, onDestroy: () => { $done?.() $done = undefined diff --git a/content/bootstrap.ts b/content/bootstrap.ts index 59b2a1cf0a..8087c29a4d 100644 --- a/content/bootstrap.ts +++ b/content/bootstrap.ts @@ -107,6 +107,7 @@ export async function startup({ resourceURI, rootURI = resourceURI.spec }, reaso defaultXUL: true, }) log('startup done') + onMainWindowLoad({ window: Zotero.getMainWindow() }) } catch (err) { alert({ title: 'Better BibTeX startup failed', text: `${err}` }) From 04250fae597486a57a40560a5359695474b73ef5 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Sun, 5 May 2024 15:24:24 +0200 Subject: [PATCH 149/177] custom basename --- content/os.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/os.ts b/content/os.ts index 5a4e7d0ce6..11056fb9df 100644 --- a/content/os.ts +++ b/content/os.ts @@ -6,7 +6,7 @@ export const Shim: any = is7 ? $OS : undefined if (Shim) { // no idea why it was decided the shim should not accept relative paths - const Path = platform.windows ? { start: /\\/g, end: /\\$/ } : { start: /\//g, end: /\/$/ } + const Path = platform.windows ? { start: /.*\\/, end: /\\$/ } : { start: /.*\//, end: /\/$/ } Shim.Path.basename = (path: string) => path && (Shim.Path.normalize(path) as string).replace(Path.end, '').replace(Path.start, '') const exists = Shim.File.exists From a507f4b53ee0cd225260b3e837225c23ccff65dc Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Sun, 5 May 2024 20:06:04 +0200 Subject: [PATCH 150/177] private basename --- content/auto-export.ts | 1 - content/os.ts | 6 ------ content/serializer.ts | 1 - 3 files changed, 8 deletions(-) diff --git a/content/auto-export.ts b/content/auto-export.ts index 5693e808f9..f310e07a47 100644 --- a/content/auto-export.ts +++ b/content/auto-export.ts @@ -145,7 +145,6 @@ class Git { if (!this.git) return repo let config: string = null - log.debug('2867:', bib, $OS.Path.dirname(bib)) switch (Preference.git) { case 'off': return repo diff --git a/content/os.ts b/content/os.ts index 11056fb9df..6e881a35eb 100644 --- a/content/os.ts +++ b/content/os.ts @@ -8,12 +8,6 @@ if (Shim) { // no idea why it was decided the shim should not accept relative paths const Path = platform.windows ? { start: /.*\\/, end: /\\$/ } : { start: /.*\//, end: /\/$/ } Shim.Path.basename = (path: string) => path && (Shim.Path.normalize(path) as string).replace(Path.end, '').replace(Path.start, '') - - const exists = Shim.File.exists - Shim.File.exists = (path: string) => { - print(`2867: testing ${JSON.stringify(path)}`) - return exists(path) as boolean - } } /* diff --git a/content/serializer.ts b/content/serializer.ts index 7bfdad1f2a..10c0e6164c 100644 --- a/content/serializer.ts +++ b/content/serializer.ts @@ -99,7 +99,6 @@ export const Serializer = new class { // eslint-disable-line @typescript-eslint/ private fastAttachment(serialized: Attachment, att): Attachment { if (att.attachmentLinkMode !== Zotero.Attachments.LINK_MODE_LINKED_URL) { serialized.localPath = att.getFilePath() - log.debug('2867: fastAttachment', { path: serialized.localPath }) if (serialized.localPath) serialized.defaultPath = `files/${att.id}/${$OS.Path.basename(serialized.localPath)}` } // eslint-disable-next-line @typescript-eslint/no-unsafe-return From 3112be879ef7765e56f391ae0653a026628842f5 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Sun, 5 May 2024 20:16:28 +0200 Subject: [PATCH 151/177] remove logging --- content/os.ts | 21 --------------------- content/serializer.ts | 1 - 2 files changed, 22 deletions(-) diff --git a/content/os.ts b/content/os.ts index 6e881a35eb..d0492f15cc 100644 --- a/content/os.ts +++ b/content/os.ts @@ -1,6 +1,5 @@ import { is7, platform } from './client' -import { print } from './logger' import { OS as $OS } from '../gen/osfile' export const Shim: any = is7 ? $OS : undefined @@ -9,23 +8,3 @@ if (Shim) { const Path = platform.windows ? { start: /.*\\/, end: /\\$/ } : { start: /.*\//, end: /\/$/ } Shim.Path.basename = (path: string) => path && (Shim.Path.normalize(path) as string).replace(Path.end, '').replace(Path.start, '') } - -/* -if (is7 && !Shim.Path.split) { - Shim.Path.split = (path: string) => { - path = Shim.Path.normalize(path) - - if (Services.appinfo.OS === 'WINNT') { - const absolute = !!path.match(/^[A-Z]:\\/i) - const components = path.replace(/^[A-Z]:\\/i, '').replace(/\\$/, '').split('\\') - const winDrive = absolute ? path[0] : undefined - return { absolute, components, winDrive } - } - else { - const absolute = path[0] === '/' - const components = path.replace(/^\//, '').replace(/\/$/, '').split('/') - return { absolute, components } - } - } -} -*/ diff --git a/content/serializer.ts b/content/serializer.ts index 10c0e6164c..06ce05824a 100644 --- a/content/serializer.ts +++ b/content/serializer.ts @@ -8,7 +8,6 @@ import { DB as Cache } from './db/cache' import { $and } from './db/loki' import { Preference } from './prefs' import { orchestrator } from './orchestrator' -import { log } from './logger' type CacheEntry = { itemID: number From e439eb89be5e317d109fc1c985230a679032a8d1 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Sun, 5 May 2024 20:27:32 +0200 Subject: [PATCH 152/177] 6.7.183 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7eca8bac6d..4dc063e2be 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "zotero-better-bibtex", - "version": "6.7.182", + "version": "6.7.183", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "zotero-better-bibtex", - "version": "6.7.182", + "version": "6.7.183", "license": "ISC", "dependencies": { "@artsy/to-title-case": "^1.1.0", diff --git a/package.json b/package.json index e6ab431289..1536a5da53 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "zotero-better-bibtex", - "version": "6.7.182", + "version": "6.7.183", "description": "Make Zotero useful for us LaTeX holdouts.", "homepage": "https://retorque.re/zotero-better-bibtex", "license": "ISC", From 3e3b9b49fd24af51e24fe0115bbcc113b2e82da6 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Mon, 6 May 2024 11:30:26 +0200 Subject: [PATCH 153/177] ncu --- package-lock.json | 24 +++++++++++++++--------- package.json | 3 ++- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4dc063e2be..851914cefd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,6 +18,7 @@ "@ungap/structured-clone": "^1.2.0", "ajv": "^8.13.0", "array.prototype.flatmap": "^1.3.2", + "async-indexed-db": "^1.0.3", "auto-changelog": "^2.4.0", "base64-js": "^1.5.1", "better-ajv-errors": "^1.2.0", @@ -116,7 +117,7 @@ "process": "^0.11.10", "properties-reader": "^2.3.0", "pug": "^3.0.2", - "putout": "^35.19.0", + "putout": "^35.20.0", "recast": "^0.23.6", "regenerate": "^1.4.2", "rimraf": "^5.0.5", @@ -2084,15 +2085,15 @@ } }, "node_modules/@putout/plugin-for-of": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@putout/plugin-for-of/-/plugin-for-of-4.1.0.tgz", - "integrity": "sha512-jiFGwi/SIPoIeUJfzYI1nyD/j/0FVfkQ5wsV9AAkTZeO1rMmXtIbK4oOvkR07XXfHe0Z8dcAKh31GvIzTbMbLA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@putout/plugin-for-of/-/plugin-for-of-5.0.0.tgz", + "integrity": "sha512-+94fmHi0JrkpGJ36kKqLS7cY6CcalMlqnzKh9FXGzPx5Kw9YQ22Fl6NJSSlKQvR42wSCD4cRv7naOFiE1rJpXw==", "dev": true, "engines": { "node": ">=18" }, "peerDependencies": { - "putout": ">=34" + "putout": ">=35" } }, "node_modules/@putout/plugin-github": { @@ -4377,6 +4378,11 @@ "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" }, + "node_modules/async-indexed-db": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-indexed-db/-/async-indexed-db-1.0.3.tgz", + "integrity": "sha512-U22MVKHbMe14UBRNA/QrGxmeutQB1XyWRyjx2ewLtWPhilEWGO/bZ2gFwa8bZrJVgfIMXflwxazm8cuQlS/fsw==" + }, "node_modules/atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", @@ -14718,9 +14724,9 @@ "integrity": "sha512-EkCRMV2w15w+9wylcpabacKK9VvTRX3TvhVQJBwIk4ThvllI2M6RlvdEZvJLhxsxy4x8IEDZneQhlGU0Pk5keg==" }, "node_modules/putout": { - "version": "35.19.0", - "resolved": "https://registry.npmjs.org/putout/-/putout-35.19.0.tgz", - "integrity": "sha512-3EzYxKlVugUq1ZjK+gRZdR4pMegfUVGmUuuZx0hr4U+kYp+1ANQHAbuVCovuot1GE9lI0yV3N2hlzAw4rudgig==", + "version": "35.20.0", + "resolved": "https://registry.npmjs.org/putout/-/putout-35.20.0.tgz", + "integrity": "sha512-WFq92qdWhRvQ0isNzK9ECPeUnShASs47is/Gwq75ztbcR2IV8eEr7dlOLzww8jsky/VV790m6LRjOGzzt4hmIA==", "dev": true, "dependencies": { "@putout/babel": "^2.0.0", @@ -14791,7 +14797,7 @@ "@putout/plugin-extract-object-properties": "^9.0.0", "@putout/plugin-extract-sequence-expressions": "^3.0.0", "@putout/plugin-filesystem": "^5.0.0", - "@putout/plugin-for-of": "^4.0.0", + "@putout/plugin-for-of": "^5.0.0", "@putout/plugin-github": "^12.0.0", "@putout/plugin-gitignore": "^6.0.0", "@putout/plugin-logical-expressions": "^5.0.0", diff --git a/package.json b/package.json index 1536a5da53..2d94a30a6b 100644 --- a/package.json +++ b/package.json @@ -72,6 +72,7 @@ "@ungap/structured-clone": "^1.2.0", "ajv": "^8.13.0", "array.prototype.flatmap": "^1.3.2", + "async-indexed-db": "^1.0.3", "auto-changelog": "^2.4.0", "base64-js": "^1.5.1", "better-ajv-errors": "^1.2.0", @@ -170,7 +171,7 @@ "process": "^0.11.10", "properties-reader": "^2.3.0", "pug": "^3.0.2", - "putout": "^35.19.0", + "putout": "^35.20.0", "recast": "^0.23.6", "regenerate": "^1.4.2", "rimraf": "^5.0.5", From 93f9cb83123377deb44218505ed10bd91331d1f6 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Tue, 7 May 2024 07:59:34 +0200 Subject: [PATCH 154/177] ncu --- content/skin/citation-key.png | Bin 967 -> 545 bytes locale/en-US/better-bibtex.ftl | 11 +- package-lock.json | 1683 ++++++++++++++++++++++++++++++-- package.json | 6 +- submodules/zotero | 2 +- 5 files changed, 1605 insertions(+), 97 deletions(-) diff --git a/content/skin/citation-key.png b/content/skin/citation-key.png index 30ce52241c2be5b9475f719fb1450e79253cd4a3..176016cac18b7c5e0b4867d1939ffefc7a0cf0d8 100644 GIT binary patch delta 520 zcmV+j0{8vL2cZOzB!3BTNLh0L004ym004yn;_Uyy0000PbVXQnQ*UN;cVTj60C#tH zE@^ISb7Ns}WiD@WXPfRk8UO$Ru1Q2eR5*>Dlf7$GQ2@n%=jEk}9Tb;nlIr3|NB@GN zAksl`R74~w7&|C9Nt#05BNV|^9TY{EI_j<<1sDGXKR`?K+J6!e#7XMQI}S;Rq^}}9 zsk!f)%BfSG0?KA!uP`p=mb9LxR6h8;v2f&Sxv@sIqk3srIa5*4L zz?}fDnBT8EYJVIV`cgI<;CcW)SaSQzXymTz#>WNAWye>mj;;aAz%=Zx4_$}7xDMh>p5JY#qOS^=*J z-`@kLtG@gBKNi5?wr?hiWzxl43CE!PBw3OinFqad5YoO}r_PCNV(Kgu=nJ7%~E713p z&Bow`ZHum&rGD6z3OXm-ASofLgX_RPAj=CIN$}HTPY2&Q`vd2;tEd;Lu^<2d002ov KPDHLkU;%<=8SbJ0 literal 967 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|T2doC(|mmy zw18|523AHP24;{FAY@>aVqgWc85q16rQz%#Mh&PMCI*J~Oa>OHnkXO*0v4nJa0`PlBg3pY5xV%QuQiw3qZOUY$~jP%-qzHM1_jnoV;SI3R@+x3M(KRB&@Hb09I0xZL1XF8=&Bv zUzDm~re~mMpk&9TprBw=l#*r@P?Wt5Z@Sn2DRmzV368|&p4rRy77T3YHG z80i}s=>k>g7FXt#Bv$C=6)QswftllyTAW;zSx}OhpQivaH!&%{w8U0P31kr*K-^i9 znTD__uNdkrpa=CqGWv#k2KsQbfm&@qqE`MznW;dVLFU^T+JIG}h(YbK(Fa+M zU2c#0JdW6QIIS$;UNNOZ`hs^%ql<`3$N&4!XXc+v+t@nU=6?0FGjl9Ar>AMVX6l|$ z?>WR%azH#})2rRjSp6Q@^qe*rEijSK2 W+oZR>mb85cO3j|GelF{r5}E+tRzx2F diff --git a/locale/en-US/better-bibtex.ftl b/locale/en-US/better-bibtex.ftl index e10c0fdbe3..3015f7c459 100644 --- a/locale/en-US/better-bibtex.ftl +++ b/locale/en-US/better-bibtex.ftl @@ -1,3 +1,4 @@ +-citation-key = Citation key better-bibtex_auto-export_delete = Deleting auto-export better-bibtex_auto-export_delete_confirm = Are you sure you want to delete this auto-export? This cannot be undone. better-bibtex_aux-scan_prompt = Tag name @@ -73,11 +74,11 @@ better-bibtex_export-options_biblatexAPA = biblatex-apa better-bibtex_export-options_biblatexChicago = biblatex-chicago better-bibtex_item-pane_section_sidenav = - .tooltip = Citation key + .tooltip = { -citation-key } better-bibtex_item-pane_section_header = - .label = Citation key + .label = { -citation-key } better-bibtex_item-pane_info_citation-key = - .label = Citation key + .label = { -citation-key } better-bibtex_preferences_advanced_export_brace-protection = .label = Apply case-protection to capitalized words by enclosing them in braces @@ -407,12 +408,12 @@ better-bibtex_zotero-pane_add-citation-links = Citation Graph: add citation link better-bibtex_zotero-pane_citekey_pin_inspire-hep = Pin BibTeX key from InspireHEP better-bibtex_zotero-pane_citekey_refresh = Refresh BibTeX key better-bibtex_zotero-pane_citekey_unpin = Unpin BibTeX key -better-bibtex_zotero-pane_column_citekey = Citation Key +better-bibtex_zotero-pane_column_citekey = { -citation-key } better-bibtex_zotero-pane_patch-dates = Copy date-added/date-modified from extra field better-bibtex_zotero-pane_sentence-case = BBT Sentence-case better-bibtex_zotero-pane_show_collection-key = Download Better BibTeX export... better-bibtex_zotero-pane_tag_duplicates = Tag duplicate citation keys better-bibtex_zotero-pane_tex-studio = Push entries to TeXstudio -betterbibtex-item-pane-header = Citation key +betterbibtex-item-pane-header = { -citation-key } diff --git a/package-lock.json b/package-lock.json index 851914cefd..ae8e445e88 100644 --- a/package-lock.json +++ b/package-lock.json @@ -66,7 +66,7 @@ "@retorquere/zotero-sync": "^1.0.27", "@types/bluebird": "^3.5.42", "@types/lokijs": "^1.5.14", - "@types/node": "^20.12.8", + "@types/node": "^20.12.10", "@xmldom/xmldom": "^0.8.10", "ajv-keywords": "^5.1.0", "archiver": "^7.0.1", @@ -83,7 +83,7 @@ "dom-parser": "^1.1.5", "dotenv": "^16.4.5", "ejs": "^3.1.10", - "esbuild": "^0.20.2", + "esbuild": "^0.21.0", "eslint": "^8.57.0", "estrace": "^5.0.1", "eta": "^3.4.0", @@ -117,7 +117,7 @@ "process": "^0.11.10", "properties-reader": "^2.3.0", "pug": "^3.0.2", - "putout": "^35.20.0", + "putout": "^35.21.0", "recast": "^0.23.6", "regenerate": "^1.4.2", "rimraf": "^5.0.5", @@ -419,10 +419,74 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.0.tgz", + "integrity": "sha512-kB8I77Onff4y6hAREwsjF11ifM+xi8bBIq/viMO5NFZDX2vKlF0/mevHJYb4sNfb55jIREeUztkUfIgOFtSzdw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.0.tgz", + "integrity": "sha512-8OvDALSbmoLJ79KCs0hxoki5I3qJA7JQMhJO6aq5O8G+pi7TPnGICdQRQcgdzwZaVc4ptp5SX7Phg6jKzvSEBg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.0.tgz", + "integrity": "sha512-SDGbrIOL6P6WTIbDcCa2sbFgznp8o6ztjGWrA+js8JZ9HhBXavN3gPrEqUqB4+bV4AdsqlZG1tK2F06BOPNpZg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.0.tgz", + "integrity": "sha512-G4fkcHqDtIbiE9b3KFJP+ay+TiCOHmenT5GYVi0fuHxFbX0CJ3lpTQbFuWR5s5AlYZZ1j4yY2hbggSUkaBK0pg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", - "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.0.tgz", + "integrity": "sha512-XMcLA6siz67AoEOl8WOot2Y3TOSClT15AqJdQz/sx98Dpv3oTbcv0BoqvHAhpBPgC8iyIKM98vVj6th7lA4DFg==", "cpu": [ "arm64" ], @@ -435,6 +499,294 @@ "node": ">=12" } }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.0.tgz", + "integrity": "sha512-+dmvTVqVkAArjJyIbo4Rl2S4I4A/yRuivTPR9Igw0QMBVSJegJqixKxZvKLCh8xi6n8tePdq3EpfbFYH2KNNiw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.0.tgz", + "integrity": "sha512-g8/wBRLbsjryMBo4PGg050I1fn4qrJobkxpT1OekO6I4H2HVQfVfBAvGPhwzc9tr8CUVu0pSGSz9oDPGIjhLNw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.0.tgz", + "integrity": "sha512-uwRL7kSN9tfFBpa7o9HQjEgxPsQsSmOz2ALQ30dxMNT22xS49s8nUtFi7bJ+kM/pcTHcnhyJwJPCY7cwlbQbWQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.0.tgz", + "integrity": "sha512-8s/YeLaUV3QTaGzwDqiTpb78Nw/DdIaUdIlRZItGgWf/8UZHsYUIWj9RfsEXVJB5qvtrg835Dgz/gf+GmFGa7w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.0.tgz", + "integrity": "sha512-mgOuJBbV8Uexb3BmeVl1q2preJMu0aDiwiFxIfsQhE2+rqxVAEcIrllb7SulkH9G244O/ZN1VVILdZb2NPSvpw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.0.tgz", + "integrity": "sha512-7pVhVYBt3/R8x0Um9p4V8eMiQcnk6/IHkOo6tkfLnDqPn+NS6lnbfWysAYeDAqFKt6INQKtVxejh6ccbVYLBwQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.0.tgz", + "integrity": "sha512-P8Lse7CXV83ARWVaq6KwV6w86ABeViyUvw6s++tYsUuqUEZgG5697Un72usafkuD7AfOyBdFX6JqZSvIQAU0yQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.0.tgz", + "integrity": "sha512-lUvMkXlUMrx5vnspMWohma6vuWh+Z/mPV6DdbXW07fNgF2Tlg6SLSqqzDXv5XYV4og5awNFYcPXpgqOVsqdx7Q==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.0.tgz", + "integrity": "sha512-wLi9VRnLDRg1Gudic24gcT5aa5LZGBwLi4aYghQ9bVb8z0qYHrZnRTNxulErFvOsSgijUWS5uNLCUaLwj+tvIQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.0.tgz", + "integrity": "sha512-MOjonqpNtns0Y32NwvMZiZXw94g8EqeqI+4BQtIHj07xX61vOyqlBsJH3UbjkWvaewie1VP9IoiX2Ja/P2XCJw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.0.tgz", + "integrity": "sha512-Gz/gafubuM3L1D29LnqaxcGg16aa2XES/uFTFdcvrwsRpMxkLiowaUvIiWJfatf/oCyyZu5CT8SrlMy37dGc7A==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.0.tgz", + "integrity": "sha512-OGorpObKLm8XlhoJlxtdwECfnESXu3kd8mU1yZ5Xk0vmh0d2xoJjEXJi7y7mjFpc3+XfGQRgHq/gqyIkbufnvA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.0.tgz", + "integrity": "sha512-AwkJoff9D5Px7+lHafSSgDK3JreyeyPtwTsOfxhlk5NZ+bMGlvSfHkA6DKv9vD0gmGrBPTMv/uIePkNaVsDq7w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.0.tgz", + "integrity": "sha512-wqv7KSmRA4qf0lFZ2Abjp2boO9tDe7YwNLZ7DNUI5rsluS0/TF78CtPUUAePukgE6b2HcXYZYuL5F2yXdQIqIg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.0.tgz", + "integrity": "sha512-3qAZFC752nZZQOI+OG4KIawvLfdD5yMFCeIFz0OhedMpYgq9AOKygW45Ojy0E5upBqns2fUaMFk1CnNSkvJaYw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.0.tgz", + "integrity": "sha512-06BY4wjQQ2bPjayuvKWXr5X3V+ZGnoTOX1+doLoQBUSyCDb9JZgX7o0N3t3rRNmEiMY/DuxXwu+EE+U32B4ErA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.0.tgz", + "integrity": "sha512-uTLz9mPOMkl3bfuGnSQumrUN7U1aPb8MCOdjQJOWPGdXTZhkK6Z2lLHxdTjX6C51jxXWWAo64tcRwiAYOkQhJw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.0.tgz", + "integrity": "sha512-XT0oCVNRjmrMTz/Xd+9L2eOI83gUQZg9Viiv3cuT/8VNlXVMn6QsxyBMDNFsYX+wmQRD31VMKNtkZaXvS3/JiA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -3507,9 +3859,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.12.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.8.tgz", - "integrity": "sha512-NU0rJLJnshZWdE/097cdCBbyW1h4hEg0xpovcoAQYHl8dnEyp/NAOiE45pvc+Bd1Dt+2r94v2eGFpQJ4R7g+2w==", + "version": "20.12.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.10.tgz", + "integrity": "sha512-Eem5pH9pmWBHoGAT8Dr5fdc5rYA+4NAovdM4EktRPVAAiJhmWWfQrA0cFhAbOsQdSfIHjAud6YdkbL69+zSKjw==", "dependencies": { "undici-types": "~5.26.4" } @@ -4325,6 +4677,23 @@ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" }, + "node_modules/asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "dev": true, + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, "node_modules/assert": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", @@ -4729,6 +5098,12 @@ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", "dev": true }, + "node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true + }, "node_modules/bplist-parser": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.2.tgz", @@ -4791,6 +5166,12 @@ "node": ">=0.10.0" } }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "dev": true + }, "node_modules/brotli": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", @@ -4799,22 +5180,147 @@ "base64-js": "^1.1.2" } }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dev": true, + "dependencies": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "node_modules/browserify-sign": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.3.tgz", + "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==", + "dev": true, + "dependencies": { + "bn.js": "^5.2.1", + "browserify-rsa": "^4.1.0", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.5", + "hash-base": "~3.0", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.7", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/browserify-sign/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/browserify-sign/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/browserify-sign/node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/browserify-sign/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/browserify-sign/node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "dependencies": { + "pako": "~1.0.5" + } + }, + "node_modules/browserify-zlib/node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", "url": "https://feross.org/support" } ], @@ -4832,6 +5338,18 @@ "node": ">=8.0.0" } }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "dev": true + }, + "node_modules/builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", + "dev": true + }, "node_modules/cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", @@ -4943,6 +5461,16 @@ "node": ">=8" } }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, "node_modules/citeproc": { "version": "2.4.63", "resolved": "https://registry.npmjs.org/citeproc/-/citeproc-2.4.63.tgz", @@ -5241,6 +5769,12 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, + "node_modules/console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, "node_modules/console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", @@ -5256,6 +5790,12 @@ "@babel/types": "^7.6.1" } }, + "node_modules/constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", + "dev": true + }, "node_modules/copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", @@ -5337,6 +5877,49 @@ "node": ">= 14" } }, + "node_modules/create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, "node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", @@ -5355,6 +5938,28 @@ "node": ">= 8" } }, + "node_modules/crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "dependencies": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + }, + "engines": { + "node": "*" + } + }, "node_modules/csl-json": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/csl-json/-/csl-json-0.1.0.tgz", @@ -5616,6 +6221,16 @@ "node": ">=6" } }, + "node_modules/des.js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", + "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, "node_modules/detect-file": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", @@ -5670,6 +6285,23 @@ "integrity": "sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==", "dev": true }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -5722,6 +6354,18 @@ "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", "dev": true }, + "node_modules/domain-browser": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-4.23.0.tgz", + "integrity": "sha512-ArzcM/II1wCCujdCNyQjXrAFwS4mrLh4C7DZWlaI8mdh7h3BfKdNd3bKXITfl2PT9FtfQqaGvhi1vPRQPimjGA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, "node_modules/dotenv": { "version": "16.4.5", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", @@ -5782,6 +6426,27 @@ "node": ">=0.10.0" } }, + "node_modules/elliptic": { + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.5.tgz", + "integrity": "sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==", + "dev": true, + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, "node_modules/emittery": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/emittery/-/emittery-1.0.3.tgz", @@ -5968,9 +6633,9 @@ } }, "node_modules/esbuild": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", - "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.0.tgz", + "integrity": "sha512-eyK64lASNug3Wo2+bQEBnYngjh9rkXUfOus403+OeVZteMon6moIhcEYbrSvcgBN6RsrRWCMoWcKDDK6UEsTOQ==", "dev": true, "hasInstallScript": true, "bin": { @@ -5980,31 +6645,99 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.20.2", - "@esbuild/android-arm": "0.20.2", - "@esbuild/android-arm64": "0.20.2", - "@esbuild/android-x64": "0.20.2", - "@esbuild/darwin-arm64": "0.20.2", - "@esbuild/darwin-x64": "0.20.2", - "@esbuild/freebsd-arm64": "0.20.2", - "@esbuild/freebsd-x64": "0.20.2", - "@esbuild/linux-arm": "0.20.2", - "@esbuild/linux-arm64": "0.20.2", - "@esbuild/linux-ia32": "0.20.2", - "@esbuild/linux-loong64": "0.20.2", - "@esbuild/linux-mips64el": "0.20.2", - "@esbuild/linux-ppc64": "0.20.2", - "@esbuild/linux-riscv64": "0.20.2", - "@esbuild/linux-s390x": "0.20.2", - "@esbuild/linux-x64": "0.20.2", - "@esbuild/netbsd-x64": "0.20.2", - "@esbuild/openbsd-x64": "0.20.2", - "@esbuild/sunos-x64": "0.20.2", - "@esbuild/win32-arm64": "0.20.2", - "@esbuild/win32-ia32": "0.20.2", - "@esbuild/win32-x64": "0.20.2" + "@esbuild/aix-ppc64": "0.21.0", + "@esbuild/android-arm": "0.21.0", + "@esbuild/android-arm64": "0.21.0", + "@esbuild/android-x64": "0.21.0", + "@esbuild/darwin-arm64": "0.21.0", + "@esbuild/darwin-x64": "0.21.0", + "@esbuild/freebsd-arm64": "0.21.0", + "@esbuild/freebsd-x64": "0.21.0", + "@esbuild/linux-arm": "0.21.0", + "@esbuild/linux-arm64": "0.21.0", + "@esbuild/linux-ia32": "0.21.0", + "@esbuild/linux-loong64": "0.21.0", + "@esbuild/linux-mips64el": "0.21.0", + "@esbuild/linux-ppc64": "0.21.0", + "@esbuild/linux-riscv64": "0.21.0", + "@esbuild/linux-s390x": "0.21.0", + "@esbuild/linux-x64": "0.21.0", + "@esbuild/netbsd-x64": "0.21.0", + "@esbuild/openbsd-x64": "0.21.0", + "@esbuild/sunos-x64": "0.21.0", + "@esbuild/win32-arm64": "0.21.0", + "@esbuild/win32-ia32": "0.21.0", + "@esbuild/win32-x64": "0.21.0" + } + }, + "node_modules/esbuild-node-builtins": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/esbuild-node-builtins/-/esbuild-node-builtins-0.1.0.tgz", + "integrity": "sha512-/9vvf347QxWeMN0oCVw7T1bfSg23Gv/TEYkUq/LMUudmRteoXs/iJ8uaLuBhCHUopqePqvW6nGE0b5SGOctliw==", + "dev": true, + "dependencies": { + "assert": "^2.0.0", + "browserify-zlib": "^0.2.0", + "buffer": "^6.0.3", + "console-browserify": "^1.2.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.12.0", + "domain-browser": "^4.19.0", + "events": "^3.3.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "^1.0.1", + "process": "^0.11.10", + "punycode": "^2.1.1", + "querystring-es3": "^0.2.1", + "readable-stream": "^2.0.2", + "stream-browserify": "^3.0.0", + "stream-http": "^3.2.0", + "string_decoder": "^1.3.0", + "timers-browserify": "^2.0.12", + "tslib": "^2.2.0", + "tty-browserify": "^0.0.1", + "url": "^0.11.0", + "util": "^0.12.3", + "vm-browserify": "^1.1.2" + } + }, + "node_modules/esbuild-node-builtins/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/esbuild-node-builtins/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/esbuild-node-builtins/node_modules/readable-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" } }, + "node_modules/esbuild-node-builtins/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, "node_modules/escalade": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", @@ -6391,6 +7124,19 @@ "node": ">=18" } }, + "node_modules/estree-util-attach-comments": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz", + "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -6429,6 +7175,16 @@ "node": ">=0.8.x" } }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, "node_modules/execa": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/execa/-/execa-0.6.3.tgz", @@ -7505,51 +8261,483 @@ "type-fest": "^0.20.2" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globjoin": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", + "dev": true + }, + "node_modules/goldstein": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/goldstein/-/goldstein-5.3.0.tgz", + "integrity": "sha512-nT/F8gTuxmcwa0euuX+CY1dvtlC3FHid9IvQXP4yEciDkulp7ixZVujKTrpD965Tl7jsaIbBoR5wI3Y6Bi3hkg==", + "dev": true, + "dependencies": { + "@putout/plugin-declare": "^4.0.0", + "@putout/plugin-logical-expressions": "^5.0.0", + "@putout/plugin-promises": "^14.1.0", + "@putout/plugin-try-catch": "^3.0.0", + "@putout/printer": "^8.0.1", + "acorn": "^8.7.1", + "esbuild": "^0.20.1", + "esbuild-node-builtins": "^0.1.0", + "estree-to-babel": "^9.0.0", + "estree-util-attach-comments": "^3.0.0", + "putout": "^35.0.0", + "try-catch": "^3.0.1" + }, + "bin": { + "gs": "bin/gs.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/goldstein/node_modules/@esbuild/aix-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", + "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/goldstein/node_modules/@esbuild/android-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/goldstein/node_modules/@esbuild/android-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/goldstein/node_modules/@esbuild/android-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/goldstein/node_modules/@esbuild/darwin-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/goldstein/node_modules/@esbuild/darwin-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/goldstein/node_modules/@esbuild/freebsd-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/goldstein/node_modules/@esbuild/freebsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/goldstein/node_modules/@esbuild/linux-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/goldstein/node_modules/@esbuild/linux-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/goldstein/node_modules/@esbuild/linux-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/goldstein/node_modules/@esbuild/linux-loong64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/goldstein/node_modules/@esbuild/linux-mips64el": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/goldstein/node_modules/@esbuild/linux-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/goldstein/node_modules/@esbuild/linux-riscv64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/goldstein/node_modules/@esbuild/linux-s390x": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/goldstein/node_modules/@esbuild/linux-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", + "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/goldstein/node_modules/@esbuild/netbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/goldstein/node_modules/@esbuild/openbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/goldstein/node_modules/@esbuild/sunos-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/goldstein/node_modules/@esbuild/win32-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/goldstein/node_modules/@esbuild/win32-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" } }, - "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dependencies": { - "define-properties": "^1.1.3" - }, + "node_modules/goldstein/node_modules/@esbuild/win32-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", + "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "node_modules/goldstein/node_modules/esbuild": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", + "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" }, "engines": { - "node": ">=10" + "node": ">=12" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.20.2", + "@esbuild/android-arm": "0.20.2", + "@esbuild/android-arm64": "0.20.2", + "@esbuild/android-x64": "0.20.2", + "@esbuild/darwin-arm64": "0.20.2", + "@esbuild/darwin-x64": "0.20.2", + "@esbuild/freebsd-arm64": "0.20.2", + "@esbuild/freebsd-x64": "0.20.2", + "@esbuild/linux-arm": "0.20.2", + "@esbuild/linux-arm64": "0.20.2", + "@esbuild/linux-ia32": "0.20.2", + "@esbuild/linux-loong64": "0.20.2", + "@esbuild/linux-mips64el": "0.20.2", + "@esbuild/linux-ppc64": "0.20.2", + "@esbuild/linux-riscv64": "0.20.2", + "@esbuild/linux-s390x": "0.20.2", + "@esbuild/linux-x64": "0.20.2", + "@esbuild/netbsd-x64": "0.20.2", + "@esbuild/openbsd-x64": "0.20.2", + "@esbuild/sunos-x64": "0.20.2", + "@esbuild/win32-arm64": "0.20.2", + "@esbuild/win32-ia32": "0.20.2", + "@esbuild/win32-x64": "0.20.2" } }, - "node_modules/globjoin": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", - "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", - "dev": true - }, "node_modules/gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", @@ -7772,6 +8960,29 @@ "node": ">=0.10.0" } }, + "node_modules/hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -7792,6 +9003,17 @@ "he": "bin/he" } }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dev": true, + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, "node_modules/homedir-polyfill": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", @@ -7836,6 +9058,12 @@ "node": ">=6.0.0" } }, + "node_modules/https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", + "dev": true + }, "node_modules/https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -9122,6 +10350,17 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, "node_modules/mdast-comment-marker": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/mdast-comment-marker/-/mdast-comment-marker-2.1.2.tgz", @@ -10440,6 +11679,25 @@ "node": ">=0.10.0" } }, + "node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -10479,6 +11737,18 @@ "dom-walk": "^0.1.0" } }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "dev": true + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -14059,6 +15329,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", + "dev": true + }, "node_modules/p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", @@ -14118,6 +15394,23 @@ "node": ">=6" } }, + "node_modules/parse-asn1": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.7.tgz", + "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==", + "dev": true, + "dependencies": { + "asn1.js": "^4.10.1", + "browserify-aes": "^1.2.0", + "evp_bytestokey": "^1.0.3", + "hash-base": "~3.0", + "pbkdf2": "^3.1.2", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/parse-github-url": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/parse-github-url/-/parse-github-url-1.0.2.tgz", @@ -14185,6 +15478,12 @@ "node": ">=0.10.0" } }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true + }, "node_modules/path-exists": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", @@ -14250,6 +15549,22 @@ "node": ">=4" } }, + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dev": true, + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, "node_modules/peggy": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/peggy/-/peggy-4.0.2.tgz", @@ -14590,6 +15905,26 @@ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==" }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, "node_modules/pug": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.2.tgz", @@ -14724,9 +16059,9 @@ "integrity": "sha512-EkCRMV2w15w+9wylcpabacKK9VvTRX3TvhVQJBwIk4ThvllI2M6RlvdEZvJLhxsxy4x8IEDZneQhlGU0Pk5keg==" }, "node_modules/putout": { - "version": "35.20.0", - "resolved": "https://registry.npmjs.org/putout/-/putout-35.20.0.tgz", - "integrity": "sha512-WFq92qdWhRvQ0isNzK9ECPeUnShASs47is/Gwq75ztbcR2IV8eEr7dlOLzww8jsky/VV790m6LRjOGzzt4hmIA==", + "version": "35.21.0", + "resolved": "https://registry.npmjs.org/putout/-/putout-35.21.0.tgz", + "integrity": "sha512-Z5aFJ2J5yE9wThvz06jS5uipYdS1lmCDtBYS7IN3K8xxDzcPJvlFDAb5FlVbulLzZi/av/qQdgQYjf3B6KeuIg==", "dev": true, "dependencies": { "@putout/babel": "^2.0.0", @@ -14876,6 +16211,7 @@ "fast-glob": "^3.2.2", "find-up": "^7.0.0", "fullstore": "^3.0.0", + "goldstein": "^5.3.0", "ignore": "^5.0.4", "is-relative": "^1.0.0", "nano-memoize": "^3.0.11", @@ -14905,6 +16241,30 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/qs": { + "version": "6.12.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.1.tgz", + "integrity": "sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, "node_modules/querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", @@ -14953,6 +16313,25 @@ "node": ">=4" } }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, "node_modules/read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", @@ -16502,6 +17881,16 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -16747,6 +18136,25 @@ "node": ">=0.10.0" } }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -17164,6 +18572,56 @@ "node": ">= 0.4" } }, + "node_modules/stream-browserify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "dev": true, + "dependencies": { + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" + } + }, + "node_modules/stream-browserify/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/stream-http": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", + "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", + "dev": true, + "dependencies": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "xtend": "^4.0.2" + } + }, + "node_modules/stream-http/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/streamx": { "version": "2.16.1", "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.16.1.tgz", @@ -17773,6 +19231,18 @@ "integrity": "sha512-M1aP6ASmuVD0PSxl5fqjCAGY9WyND3DHZ8RwT5I8o7469XE53Lb5zbPai20Dhj7TProyaapfVj3TaT0P+LoSEA==", "dev": true }, + "node_modules/timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "dev": true, + "dependencies": { + "setimmediate": "^1.0.4" + }, + "engines": { + "node": ">=0.6.0" + } + }, "node_modules/tiny-invariant": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", @@ -18101,6 +19571,12 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, + "node_modules/tty-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", + "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", + "dev": true + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -18638,6 +20114,16 @@ "deprecated": "Please see https://github.com/lydell/urix#deprecated", "dev": true }, + "node_modules/url": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.3.tgz", + "integrity": "sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==", + "dev": true, + "dependencies": { + "punycode": "^1.4.1", + "qs": "^6.11.2" + } + }, "node_modules/url-parse": { "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", @@ -18648,6 +20134,12 @@ "requires-port": "^1.0.0" } }, + "node_modules/url/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + }, "node_modules/use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", @@ -18809,6 +20301,12 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true + }, "node_modules/void-elements": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", @@ -19058,6 +20556,15 @@ "@babel/runtime-corejs3": "^7.16.5" } }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", diff --git a/package.json b/package.json index 2d94a30a6b..701df4ce77 100644 --- a/package.json +++ b/package.json @@ -120,7 +120,7 @@ "@retorquere/zotero-sync": "^1.0.27", "@types/bluebird": "^3.5.42", "@types/lokijs": "^1.5.14", - "@types/node": "^20.12.8", + "@types/node": "^20.12.10", "@xmldom/xmldom": "^0.8.10", "ajv-keywords": "^5.1.0", "archiver": "^7.0.1", @@ -137,7 +137,7 @@ "dom-parser": "^1.1.5", "dotenv": "^16.4.5", "ejs": "^3.1.10", - "esbuild": "^0.20.2", + "esbuild": "^0.21.0", "eslint": "^8.57.0", "estrace": "^5.0.1", "eta": "^3.4.0", @@ -171,7 +171,7 @@ "process": "^0.11.10", "properties-reader": "^2.3.0", "pug": "^3.0.2", - "putout": "^35.20.0", + "putout": "^35.21.0", "recast": "^0.23.6", "regenerate": "^1.4.2", "rimraf": "^5.0.5", diff --git a/submodules/zotero b/submodules/zotero index e7b792e2d5..7e225c4517 160000 --- a/submodules/zotero +++ b/submodules/zotero @@ -1 +1 @@ -Subproject commit e7b792e2d5f7dab25136b1e30ff75be388f4ac0d +Subproject commit 7e225c45175897fcf8a91353a7da3997a6ba4064 From f3589696da078e434caf247ca3ff69ba2436ad37 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Tue, 7 May 2024 07:59:39 +0200 Subject: [PATCH 155/177] 6.7.184 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index ae8e445e88..f731a76b8d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "zotero-better-bibtex", - "version": "6.7.183", + "version": "6.7.184", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "zotero-better-bibtex", - "version": "6.7.183", + "version": "6.7.184", "license": "ISC", "dependencies": { "@artsy/to-title-case": "^1.1.0", diff --git a/package.json b/package.json index 701df4ce77..34c83d09ca 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "zotero-better-bibtex", - "version": "6.7.183", + "version": "6.7.184", "description": "Make Zotero useful for us LaTeX holdouts.", "homepage": "https://retorque.re/zotero-better-bibtex", "license": "ISC", From d47f33061a6c5321a045edc1d0cbf1c3eb1a2114 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Tue, 7 May 2024 08:35:08 +0200 Subject: [PATCH 156/177] New Crowdin updates (#2869) * New translations better-bibtex.ftl (French) * New translations better-bibtex.ftl (German) * New translations better-bibtex.ftl (Italian) * New translations better-bibtex.ftl (Chinese Simplified) * New translations better-bibtex.ftl (Portuguese, Brazilian) --- locale/de-DE/better-bibtex.ftl | 11 ++++++----- locale/fr-FR/better-bibtex.ftl | 11 ++++++----- locale/it-IT/better-bibtex.ftl | 11 ++++++----- locale/pt-BR/better-bibtex.ftl | 11 ++++++----- locale/zh-CN/better-bibtex.ftl | 11 ++++++----- 5 files changed, 30 insertions(+), 25 deletions(-) diff --git a/locale/de-DE/better-bibtex.ftl b/locale/de-DE/better-bibtex.ftl index d6885ba7f3..77397e9ea9 100644 --- a/locale/de-DE/better-bibtex.ftl +++ b/locale/de-DE/better-bibtex.ftl @@ -1,3 +1,4 @@ +-citation-key = Citation key better-bibtex_auto-export_delete = Auto-Export wird gelöscht better-bibtex_auto-export_delete_confirm = Möchtest du den Auto-Export wirklich löschen? Dies kann nicht rückgängig gemacht werden. better-bibtex_aux-scan_prompt = Name der Markierung @@ -59,11 +60,11 @@ better-bibtex_export-options_worker = Hintergrund-Export better-bibtex_export-options_biblatexAPA = biblatex-apa better-bibtex_export-options_biblatexChicago = biblatex-chicago better-bibtex_item-pane_section_sidenav = - .tooltip = Citation key + .tooltip = { -citation-key } better-bibtex_item-pane_section_header = - .label = Citation key + .label = { -citation-key } better-bibtex_item-pane_info_citation-key = - .label = Citation key + .label = { -citation-key } better-bibtex_preferences_advanced_export_brace-protection = .label = Groß-/Kleinschreibung auf Groß- und Kleinschreibung anwenden, indem sie Klammern beigefügt wird better-bibtex_preferences_advanced_export_brace-protection_warning = Wenn Sie sowohl BibTeX/BibLaTeX Best Practice (siehe BBT FAQ) als auch die Zotero-Empfehlungen zum Titel-/Satz-Casing ignorieren möchten, können Sie dies ausschalten, um das Titel-Casing für englische Referenzen zu unterdrücken @@ -328,10 +329,10 @@ better-bibtex_zotero-pane_add-citation-links = Zitier-Graph: Zitat-Links hinzuf better-bibtex_zotero-pane_citekey_pin_inspire-hep = Hefte BibTeX-Schlüssel aus InspireHEP an better-bibtex_zotero-pane_citekey_refresh = Aktualisiere BibTeX key better-bibtex_zotero-pane_citekey_unpin = BibTeX-Key lösen -better-bibtex_zotero-pane_column_citekey = Zitierschlüssel +better-bibtex_zotero-pane_column_citekey = { -citation-key } better-bibtex_zotero-pane_patch-dates = Kopiere date-added/date-modified aus Extra-Feld better-bibtex_zotero-pane_sentence-case = BBT Sentence-case better-bibtex_zotero-pane_show_collection-key = Download Better-BibTeX-Export... better-bibtex_zotero-pane_tag_duplicates = Markiere doppelte Zitierschlüssel better-bibtex_zotero-pane_tex-studio = Einträge an TeXstudio senden -betterbibtex-item-pane-header = Citation key +betterbibtex-item-pane-header = { -citation-key } diff --git a/locale/fr-FR/better-bibtex.ftl b/locale/fr-FR/better-bibtex.ftl index 492570a8b3..9be478d5b3 100644 --- a/locale/fr-FR/better-bibtex.ftl +++ b/locale/fr-FR/better-bibtex.ftl @@ -1,3 +1,4 @@ +-citation-key = Citation key better-bibtex_auto-export_delete = Suppression de l'export automatique better-bibtex_auto-export_delete_confirm = Êtes-vous sûr de vouloir supprimer cette exportation automatique ? Cette opération est irréversible. better-bibtex_aux-scan_prompt = Nom de tag @@ -59,11 +60,11 @@ better-bibtex_export-options_worker = Exportation en arrière-plan better-bibtex_export-options_biblatexAPA = biblatex-apa better-bibtex_export-options_biblatexChicago = biblatex-chicago better-bibtex_item-pane_section_sidenav = - .tooltip = Clé de citation + .tooltip = { -citation-key } better-bibtex_item-pane_section_header = - .label = Clé de citation + .label = { -citation-key } better-bibtex_item-pane_info_citation-key = - .label = Clé de citation + .label = { -citation-key } better-bibtex_preferences_advanced_export_brace-protection = .label = Appliquer la protection de la casse aux mots en capitales en les insérant entre paires d'accolades better-bibtex_preferences_advanced_export_brace-protection_warning = Si vous n'êtes pas prêt à ignorer à la fois les meilleures pratiques BibTeX/BibLaTeX (voir la FAQ BBT) et les recommandations de Zotero sur le tire/phrase, vous pouvez désactiver cette option pour supprimer la protection automatique des accolades pour les mots avec des lettres capitales. @@ -329,10 +330,10 @@ better-bibtex_zotero-pane_add-citation-links = Graphique de citation : ajouter d better-bibtex_zotero-pane_citekey_pin_inspire-hep = Verrouiller les clés BibTeX de InspireHEP better-bibtex_zotero-pane_citekey_refresh = Rafraichir la clé de citation better-bibtex_zotero-pane_citekey_unpin = Déverrouiller la clé de citation -better-bibtex_zotero-pane_column_citekey = Clé de citation +better-bibtex_zotero-pane_column_citekey = { -citation-key } better-bibtex_zotero-pane_patch-dates = Copier date-added/date-modified à partir du champ extra better-bibtex_zotero-pane_sentence-case = BBT Casse de la phrase better-bibtex_zotero-pane_show_collection-key = Télécharger l'export de Better BibTeX... better-bibtex_zotero-pane_tag_duplicates = Tagguer les clés de citation doublons better-bibtex_zotero-pane_tex-studio = Envoyer les citations vers TeXstudio -betterbibtex-item-pane-header = Clé de citation +betterbibtex-item-pane-header = { -citation-key } diff --git a/locale/it-IT/better-bibtex.ftl b/locale/it-IT/better-bibtex.ftl index 8d5c28db01..bb7d3ee95a 100644 --- a/locale/it-IT/better-bibtex.ftl +++ b/locale/it-IT/better-bibtex.ftl @@ -1,3 +1,4 @@ +-citation-key = Citation key better-bibtex_auto-export_delete = Cancellazione esportazione automatica better-bibtex_auto-export_delete_confirm = Sei sicuro di voler cancellare questa esportazione automatica? L'operazione è irreversibile. better-bibtex_aux-scan_prompt = Nome tag @@ -59,11 +60,11 @@ better-bibtex_export-options_worker = Esportazione in background better-bibtex_export-options_biblatexAPA = biblatex-apa better-bibtex_export-options_biblatexChicago = biblatex-chicago better-bibtex_item-pane_section_sidenav = - .tooltip = Citation key + .tooltip = { -citation-key } better-bibtex_item-pane_section_header = - .label = Citation key + .label = { -citation-key } better-bibtex_item-pane_info_citation-key = - .label = Citation key + .label = { -citation-key } better-bibtex_preferences_advanced_export_brace-protection = .label = Includi le parole in maiuscolo tra graffe per preservare i caratteri così come scritti better-bibtex_preferences_advanced_export_brace-protection_warning = Se si vuole ignorare sia le buone pratiche di BibTeX/BibLaTeX (vedi le FAQ di BBT) e le raccomandazioni di Zotero sulle maiuscole, si può disattivare questa opzione per prevenire la protezione con graffe delle parole in maiuscolo. @@ -328,10 +329,10 @@ better-bibtex_zotero-pane_add-citation-links = Grafico di citazione: aggiungi li better-bibtex_zotero-pane_citekey_pin_inspire-hep = Fissa chiavi BibTeX da InspireHEP better-bibtex_zotero-pane_citekey_refresh = Aggiorna chiavi BibTeX better-bibtex_zotero-pane_citekey_unpin = Sblocca chiavi BibTeX -better-bibtex_zotero-pane_column_citekey = Citation Key +better-bibtex_zotero-pane_column_citekey = { -citation-key } better-bibtex_zotero-pane_patch-dates = Copia date-added/date-modified dal campo extra better-bibtex_zotero-pane_sentence-case = BBT Tutte le Iniziali Maiuscole better-bibtex_zotero-pane_show_collection-key = Scarica esportazione di Better BibTeX... better-bibtex_zotero-pane_tag_duplicates = Tagga chiavi di citazione duplicate better-bibtex_zotero-pane_tex-studio = Invia voci a TeXstudio -betterbibtex-item-pane-header = Citation key +betterbibtex-item-pane-header = { -citation-key } diff --git a/locale/pt-BR/better-bibtex.ftl b/locale/pt-BR/better-bibtex.ftl index cfa8354bb5..f9d650a7bb 100644 --- a/locale/pt-BR/better-bibtex.ftl +++ b/locale/pt-BR/better-bibtex.ftl @@ -1,3 +1,4 @@ +-citation-key = Citation key better-bibtex_auto-export_delete = Deleting auto-export better-bibtex_auto-export_delete_confirm = Are you sure you want to delete this auto-export? This cannot be undone. better-bibtex_aux-scan_prompt = Nome da etiqueta @@ -59,11 +60,11 @@ better-bibtex_export-options_worker = Background export better-bibtex_export-options_biblatexAPA = biblatex-apa better-bibtex_export-options_biblatexChicago = biblatex-chicago better-bibtex_item-pane_section_sidenav = - .tooltip = Citation key + .tooltip = { -citation-key } better-bibtex_item-pane_section_header = - .label = Citation key + .label = { -citation-key } better-bibtex_item-pane_info_citation-key = - .label = Citation key + .label = { -citation-key } better-bibtex_preferences_advanced_export_brace-protection = .label = Apply case-protection to capitalized words by enclosing them in braces better-bibtex_preferences_advanced_export_brace-protection_warning = If you're dead-set on ignoring both BibTeX/BibLaTeX best practice (see the BBT FAQ) and the Zotero recommendations on title/sentence casing, you can turn this off to suppress automatic brace-protection for words with uppercase letters. @@ -328,10 +329,10 @@ better-bibtex_zotero-pane_add-citation-links = Citation Graph: add citation link better-bibtex_zotero-pane_citekey_pin_inspire-hep = Fixar chave BibTeX do InspireHEP better-bibtex_zotero-pane_citekey_refresh = Atualizar chave BibTeX better-bibtex_zotero-pane_citekey_unpin = Des-fixar chave BibTeX -better-bibtex_zotero-pane_column_citekey = Chave de Citação +better-bibtex_zotero-pane_column_citekey = { -citation-key } better-bibtex_zotero-pane_patch-dates = Copy date-added/date-modified from extra field better-bibtex_zotero-pane_sentence-case = BBT Sentence-case better-bibtex_zotero-pane_show_collection-key = Download Better BibTeX export... better-bibtex_zotero-pane_tag_duplicates = Etiquetar chaves de citação duplicadas better-bibtex_zotero-pane_tex-studio = Push entries to TeXstudio -betterbibtex-item-pane-header = Citation key +betterbibtex-item-pane-header = { -citation-key } diff --git a/locale/zh-CN/better-bibtex.ftl b/locale/zh-CN/better-bibtex.ftl index dc407b9d77..c508792ef7 100644 --- a/locale/zh-CN/better-bibtex.ftl +++ b/locale/zh-CN/better-bibtex.ftl @@ -1,3 +1,4 @@ +-citation-key = Citation key better-bibtex_auto-export_delete = 正在删除自动导出 better-bibtex_auto-export_delete_confirm = 您确定要删除此项自动导出吗?该操作不可撤销。 better-bibtex_aux-scan_prompt = 标签名 @@ -59,11 +60,11 @@ better-bibtex_export-options_worker = 后台导出 better-bibtex_export-options_biblatexAPA = biblatex-apa better-bibtex_export-options_biblatexChicago = biblatex-chicago better-bibtex_item-pane_section_sidenav = - .tooltip = 引用 + .tooltip = { -citation-key } better-bibtex_item-pane_section_header = - .label = 引用 + .label = { -citation-key } better-bibtex_item-pane_info_citation-key = - .label = 引用 + .label = { -citation-key } better-bibtex_preferences_advanced_export_brace-protection = .label = 使用大括号括起首字母大写的单词以保持大小写格式 better-bibtex_preferences_advanced_export_brace-protection_warning = 若您坚持忽略 BibTeX/BibLaTeX 最佳做法(见 BBT FAQ)和 Zotero 关于标题/句子大小写格式的建议,您可以关闭该选项以禁止自动使用括号对含大写字母单词进行大小写保护。 @@ -329,10 +330,10 @@ better-bibtex_zotero-pane_add-citation-links = 引用图:添加引用链接… better-bibtex_zotero-pane_citekey_pin_inspire-hep = 固定来自 InspireHEP 的引用 better-bibtex_zotero-pane_citekey_refresh = 刷新 BibTeX 引用 better-bibtex_zotero-pane_citekey_unpin = 取消固定 BibTeX 引用 -better-bibtex_zotero-pane_column_citekey = 引用 +better-bibtex_zotero-pane_column_citekey = { -citation-key } better-bibtex_zotero-pane_patch-dates = 从“其他”字段复制添加日期/修改日期 better-bibtex_zotero-pane_sentence-case = BBT 句首大写 better-bibtex_zotero-pane_show_collection-key = 下载 Better BibTeX 导出… better-bibtex_zotero-pane_tag_duplicates = 标记重复的引用 better-bibtex_zotero-pane_tex-studio = 推送条目至 TeXstudio -betterbibtex-item-pane-header = 引用 +betterbibtex-item-pane-header = { -citation-key } From 13a1024755e7376dd51976c2bf0b09ef5e64fde1 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Tue, 7 May 2024 13:13:26 +0200 Subject: [PATCH 157/177] New translations better-bibtex.ftl (French) (#2870) --- locale/fr-FR/better-bibtex.ftl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/locale/fr-FR/better-bibtex.ftl b/locale/fr-FR/better-bibtex.ftl index 9be478d5b3..9b4a3ab398 100644 --- a/locale/fr-FR/better-bibtex.ftl +++ b/locale/fr-FR/better-bibtex.ftl @@ -1,4 +1,4 @@ --citation-key = Citation key +-citation-key = Clé de citation better-bibtex_auto-export_delete = Suppression de l'export automatique better-bibtex_auto-export_delete_confirm = Êtes-vous sûr de vouloir supprimer cette exportation automatique ? Cette opération est irréversible. better-bibtex_aux-scan_prompt = Nom de tag From bd66025b4faf711a18eafb7097495126c5f1aa64 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Tue, 7 May 2024 09:19:51 +0200 Subject: [PATCH 158/177] prep for serialization cache --- content/better-bibtex.ts | 2 +- content/{serializer.ts => item-export-format.ts} | 0 content/translators.ts | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) rename content/{serializer.ts => item-export-format.ts} (100%) diff --git a/content/better-bibtex.ts b/content/better-bibtex.ts index 7522e708e8..6e49507f1d 100644 --- a/content/better-bibtex.ts +++ b/content/better-bibtex.ts @@ -47,7 +47,7 @@ import { Events } from './events' import { Translators } from './translators' import { DB as Cache } from './db/cache' -import { Serializer } from './serializer' +import { Serializer } from './item-export-format' import { AutoExport, SQL as AE } from './auto-export' import { KeyManager } from './key-manager' import { TestSupport } from './test-support' diff --git a/content/serializer.ts b/content/item-export-format.ts similarity index 100% rename from content/serializer.ts rename to content/item-export-format.ts diff --git a/content/translators.ts b/content/translators.ts index 2cf48b7012..a740a6b570 100644 --- a/content/translators.ts +++ b/content/translators.ts @@ -17,7 +17,7 @@ import { Deferred } from './deferred' import type { Translators as Translator } from '../typings/translators' import { Preference } from './prefs' import { Preferences } from '../gen/preferences/meta' -import { Serializer } from './serializer' +import { Serializer } from './item-export-format' import { log } from './logger' import { DB as Cache } from './db/cache' import { flash } from './flash' From a82b25ffd49c30e78c388f64af18acb7585c9822 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Tue, 7 May 2024 16:51:57 +0200 Subject: [PATCH 159/177] ncu --- submodules/zotero | 2 +- typings/{puqeue/index.d.ts => puqeue.d.ts} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename typings/{puqeue/index.d.ts => puqeue.d.ts} (100%) diff --git a/submodules/zotero b/submodules/zotero index 7e225c4517..de9e7ff962 160000 --- a/submodules/zotero +++ b/submodules/zotero @@ -1 +1 @@ -Subproject commit 7e225c45175897fcf8a91353a7da3997a6ba4064 +Subproject commit de9e7ff9624c4bd08b4ecff486e789581732ecb3 diff --git a/typings/puqeue/index.d.ts b/typings/puqeue.d.ts similarity index 100% rename from typings/puqeue/index.d.ts rename to typings/puqeue.d.ts From f525aeb45232c66910b87cd48bfd74b8c1d7eb5a Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Tue, 7 May 2024 16:55:08 +0200 Subject: [PATCH 160/177] indexed --- content/db/indexed.ts | 77 +++++++++++++++++++++++++++++++++++ typings/async-indexed-db.d.ts | 34 ++++++++++++++++ 2 files changed, 111 insertions(+) create mode 100644 content/db/indexed.ts create mode 100644 typings/async-indexed-db.d.ts diff --git a/content/db/indexed.ts b/content/db/indexed.ts new file mode 100644 index 0000000000..7d2fbc8c0b --- /dev/null +++ b/content/db/indexed.ts @@ -0,0 +1,77 @@ +import { default as AsyncIndexedDB, AsyncIDBObjectStore } from 'async-indexed-db' + +export class Cache extends AsyncIndexedDB { + constructor() { + // eslint-disable-next-line @typescript-eslint/no-empty-function + super('better-bibtex:cache', async (_db: IDBDatabase) => {}, 1) + } + + async open(lastUpdated?: string): Promise { + if (this.db) return this + + return new Promise((resolve, reject) => { + const openRequest = indexedDB.open(this.name, 1) + + openRequest.onerror = openRequest.onblocked = (): void => { + const error = `could not open cache ${this.name}: ${openRequest.error?.message || 'Unknown error'}` + Zotero.debug(error) + reject(new Error(error)) + } + + openRequest.onsuccess = async () => { + try { + this.db = openRequest.result + const clear = lastUpdated && (lastUpdated > (Zotero.Prefs.get('translators.better-bibtex.cache.lastUpdated') || '')) + if (clear) { + await this.tx(['ExportFormat', 'Exported', 'ExportContext'], 'readwriteflush', async ({ ExportFormat, Exported, ExportContext }) => { + await Promise.all([ExportFormat.clear(), Exported.clear(), ExportContext.clear()]) + }) + } + resolve(this) + } + catch (err) { + reject(err) + } + } + + openRequest.onupgradeneeded = () => { + const cache = openRequest.result + const stores = { + ExportFormat: { keyPath: 'itemID', indices: undefined }, + /* + Exported: { keyPath: ['context', 'itemID'], indices: { // keyPath order matters for key retrieval! + itemID: { unique: false }, + context: { unique: false } + } }, + ExportContext:{ keyPath: 'id', autoIncrement: true, indices: { + properties: { unique: false, multiEntry: true }, + } } + */ + } + + for (const [name, config] of Object.entries(stores)) { + if (cache.objectStoreNames.contains(name)) cache.deleteObjectStore(name) + const indices = config.indices + delete config.indices + const store = cache.createObjectStore(name, config) + if (indices) { + for (const [index, setup] of Object.entries(indices)) { + store.createIndex(index, index, setup) + } + } + } + } + }) + } + + public async tx(stores: string | string[], mode: 'readonly' | 'readwrite' | 'readwriteflush' = 'readonly', handler: (stores: Record) => Promise): Promise { + if (typeof stores === 'string') stores = [ stores ] + const tx = this.db.transaction(stores, mode as IDBTransactionMode) + const env: Record = {} + for (const store of stores) { + env[store] = AsyncIndexedDB.proxy(tx.objectStore(store)) as AsyncIDBObjectStore + } + await handler(env) + tx.commit() + } +} diff --git a/typings/async-indexed-db.d.ts b/typings/async-indexed-db.d.ts new file mode 100644 index 0000000000..7f54dfe874 --- /dev/null +++ b/typings/async-indexed-db.d.ts @@ -0,0 +1,34 @@ +declare module 'async-indexed-db' { + class AsyncIndexedDB { + public name: string + public db: IDBDatabase + + constructor(name: string, schema: (db: IDBDatabase) => Promise, version: number) + + static proxy(obj: any): any + } + + export class AsyncIDBObjectStore { + name: string + keyPath: string | string[] | null + indexNames: DOMStringList + // transaction: IDBTransaction + autoIncrement: boolean + async add(value: any, key?: IDBValidKey | IDBKeyRange | null): Promise + clear(): Promise + // count(key?: IDBValidKey | IDBKeyRange | null): IDBRequest + // createIndex(name: string, keyPath: string | string[], options?: IDBIndexParameters): IDBIndex + // delete(key: IDBValidKey | IDBKeyRange): IDBRequest + // deleteIndex(indexName: string): void + // get(key: IDBValidKey | IDBKeyRange): IDBRequest + // getAll(query?: IDBValidKey | IDBKeyRange | null, count?: number): IDBRequest + // getAllKeys(query?: IDBValidKey | IDBKeyRange | null, count?: number): IDBRequest + // getKey(key: IDBValidKey | IDBKeyRange): IDBRequest + // index(name: string): IDBIndex + // openCursor(range?: IDBValidKey | IDBKeyRange | null, direction?: IDBCursorDirection): IDBRequest + // openKeyCursor(range?: IDBValidKey | IDBKeyRange | null, direction?: IDBCursorDirection): IDBRequest + // put(value: any, key?: IDBValidKey | IDBKeyRange | null): IDBRequest + } + + export = AsyncIndexedDB +} From 280d7f947e4e23dce8730a5b4a935bebc96d395c Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Tue, 7 May 2024 16:57:38 +0200 Subject: [PATCH 161/177] 6.7.185 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index f731a76b8d..91cc2d098f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "zotero-better-bibtex", - "version": "6.7.184", + "version": "6.7.185", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "zotero-better-bibtex", - "version": "6.7.184", + "version": "6.7.185", "license": "ISC", "dependencies": { "@artsy/to-title-case": "^1.1.0", diff --git a/package.json b/package.json index 34c83d09ca..65a1d52312 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "zotero-better-bibtex", - "version": "6.7.184", + "version": "6.7.185", "description": "Make Zotero useful for us LaTeX holdouts.", "homepage": "https://retorque.re/zotero-better-bibtex", "license": "ISC", From 82fbf25f019551503e78d60147e74baa634bdf36 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Wed, 8 May 2024 12:56:48 +0200 Subject: [PATCH 162/177] section icon --- content/better-bibtex.ts | 4 +- content/skin/citation-key.png | Bin 545 -> 0 bytes content/skin/citation-key.svg | 5329 +++++++++++++++++++++++++++++++++ package-lock.json | 217 +- package.json | 4 +- site/themes/relearn | 2 +- submodules/zotero | 2 +- 7 files changed, 5451 insertions(+), 107 deletions(-) delete mode 100644 content/skin/citation-key.png create mode 100644 content/skin/citation-key.svg diff --git a/content/better-bibtex.ts b/content/better-bibtex.ts index 6e49507f1d..5e9b48de95 100644 --- a/content/better-bibtex.ts +++ b/content/better-bibtex.ts @@ -856,11 +856,11 @@ export class BetterBibTeX { pluginID: 'better-bibtex@iris-advies.com', header: { l10nID: 'better-bibtex_item-pane_section_header', - icon: `${rootURI}content/skin/citation-key.png`, + icon: `${rootURI}content/skin/citation-key.svg`, }, sidenav: { l10nID: 'better-bibtex_item-pane_section_sidenav', - icon: `${rootURI}content/skin/citation-key.png`, + icon: `${rootURI}content/skin/citation-key.svg`, }, // bodyXHTML: 'Citation Key ', bodyXHTML: 'Citation Key ', diff --git a/content/skin/citation-key.png b/content/skin/citation-key.png deleted file mode 100644 index 176016cac18b7c5e0b4867d1939ffefc7a0cf0d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 545 zcmV++0^a?JP)iaa2SkC>T2^I7ym9-Xj#jRUH&X zmpbaMAO#oy1wTMb^V$*-#7XMQI}S;Rq^}}9sk!f)%BfSG0?KA!u zP`p=mb9LxR6h8;v2f&Sxv@sIqk3srIa5*4Lz?}fDnBT8EY8)B*QZ^gldH_CHa{J3@ zZu%!Uf$51#c zmge{kk}}aY*%O&4Oz + + + + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + 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 +cCqyj0YjnL1oBCAgCJ0ZAaveZgKCDDMCLDO6V2PyQLF6IEjriyt3Ye9MpQmCbsKnkQnHCBUtCMJj +BDhBkF4NkxUEGzICKN3HCNTnnuxMEGw5CoJijDBY200Q7D2OGAiKFyNUy86EMYI9UUJMO/TpxghY +rGcSA5CPEUYBQhAUwek8EExmkBE00QJBcHsosAgizw+UAAPqxo1dUjBOpTYARUd3k92qUhFRAq21 +QSyJqlJ5ItJUNaeOVeeWF0UzSi3CVpJtEzPFERQiTkRECJ1y1zVsd/z///v/72s1dcRusdmMgeO8 ++SxRAAAAACA+BGoELwcySo/ypeyns3/ylM5T8qyWeqNwlFylPKnOkra7nqeUFeWpM5W0Xsq1Wq8y +0m628sprpZW3K7+ML19aed/5rZQvpUfKV0pqK/9Lp1VSvs73a7vr4+wq+W+zpJbjne+1X84rnefT +GGWVPGeU7LVvjD6tRXHKPuOltV6Xk33SONl9Wp/15cfb/PVv15ef323Zzr9868uX/5fe+JXvtdej +39t2trXTsp33Sq4ShetkO1uyvXb+vH2n5Utnu8tG/vnNP9vbY/SPLdtd/Vf6e7uL+6d/5fnO7u2u +/ulPn5+y+23q1ONtpk+/n3qMfue1kdvrjBztnUzdttcbOX6Nbi/X6c71p6XebL2ytd+T3/71r9L7 +8vW23rf+der/3C+5qdPJ/Va25aY/+7lpnZW2uyR9lvQljU5ZUjkzaLhlgHJv/0f+n/xSVv63PSs/ +nZavlM63trvu7cm3Xq9+p7R0On2+zn6bznmvjdR2y2dvvv398XY77Shr3xjtPKnRvq2ULVtrT/zy +je0vtkb++7feG23kZ/o1Xlr9XtqW4335HG9b9httz8kenT3SOJ+v1xOm7+0zyq7fVPY3V9ruFIV/ +8jtlWy9l69Yt20q/65WTVukyXtvuovL/ervr+uW/Hfn6v/c797fz+zvTdq9P2W+ktdLoTi3Xnxxp +13rClb7Lp3NervQ2WyovpTLa+T5lvW5vx9uRny19Z9tyXnn7p6yyY5QfWUrp/lG2vTValjHWfsrS +Y8fuaO1//fq3296OND5lWf1Kpt/2Sktvy488bY3Sadfq9SXPaumVVE55Z2Rn9+fZkaltaXnSSnlS +K2cztbcvyvTINM6nlN3d2trttc5qK5XW1udpJ89obTvf+OyXNqXTX0opY3wbqY1xWudIaUeOsr6d +/9bKbvnP8t1S/0mprNXlfBrfaX1/adm7nem91/96rVfKlrE5NkfZNTbHSv8l5ShnlfTlrFNKphzt +bKbVvuVov9br/nT6bXqjZfr8tOPlf7mWr6Vt+f5PV/0au/Zp98/+p5dG71m95aQfmUZbfcb4/fHE +r3xLvbmn/Rt7TmtlS5ZT+mQpu/3WKGONlv32d7z9lmOfuHe7yyR6jRwjpT4tZfdm9zm/22dX+pSy +5ZezpXX+v9VGdn++dt5Lb7uNl/9/ulxG/2jtc42S3ksv19u2n/3e+5HptNcv/TrpbdsyUjqv/Hav +KPT2jLGN9E62c7Lflmz/p4ur9EmltTdGUU5mx2SVUbqMlHplv91c46yVnaulV3KtXbnW9zmrtLe+ +20irnZen5Optm6mjoPD8n/PK/+nKoOGVQcPJ0ziZ2vlT+v04/bY0sZfS224ybUxKSJm8KDX+dHHk ++O2uDBpQuDBpz6DBg0nfMmjIcWHSGihQZbQYm83FxEztRuvgRlvj9OnTxmLTntBIb+wk1jZ6TMZ6 +Mrv7xT8mpYzNk5MZs3bGJA3XZIOLzcWDiZtEEze5bdIzLkzapLYJDJdLbpMXGTSQcGEyIgWEk5gX +GlyMhwtk0OCBC5NoQoEJZNBAi7HVXFBsiDgo9XZlWa20Ju44HUyilE+fPlP6T9//K6X+1L2ju/+1 +rr/WFf/G7Ntc+SdM6Uf/iKv/1e1zpSgpJtKE+vTnfvr2ev3413LTtzAT+e6zXvtW1gwaYFysqE/n +xxmdZ31a37pelE6mb1+q+1uT/442JWCVzn6rIceEcmfQMMLknWWKDBpQ/O1bE/rXujSAYOImOTUm +0USEScygYYRJNaHSmtxvFDKJ4vfaKC9f+vZtNLG5mDCBkX2IcUN0wCCDhhWTxvv+Xqftn0wdhTp1 +yfHvS6axKDm+/Ejd5V+XNcpKI23pMtZ/2aW9XC/fv/f+8703xo9X3hnjjbFGj05ltDFOvzEZUdjW +yNa2pVLGrK3W2o5WUrY02v639/KdzpXWWKVyUqdNLdfaMcnVzu5Ze1JZo5192dtRauXa8a/7e+zE +XkrnT5c9V2Rga9tvafn76Xu3u7jnnDFWL9fp9s7YfSo9Tj9hSeOsdNJJbe1J3+lJP2WXX5nSOCml +kV5a49+ntyl92k+79q2Ru1ruWrvSyLHGSuvfpiwryssrq5VVsqx+7eTnOav16v3V0kq9Xr4vaW13 +0Vq5v9ZbUWr9a72fbY390i9vvbVjrfW/frR8a6w929L/yn3b3nYXX8nS0ucbrdvb7rLX3mnvvG4r +u538bi+l9vnfo+S39lpa+fvGGJ9+PPF62//G+f+X/fqclP3612if/2fkl5PWvy+52j+JX123Xr/3 +8r1+pbzy0nnbXfbOK+1z97Tct96+b9td19svW9tOna2lk6u1TttdlNo6213VtrtqtdE52vofHyXG +v21j/fo1Vp+y69u2t1Z6a63d7qrVa/dFqVXWdletz7HGGp9jrfK5a71Rtrssd213UaaXXqaX0lor +nUwpvdWdOm2XdF7blKtHbvrUvnu1lK27da9evd1puzt1r+4uqbvb6+7tbS1Ll+7VVurRSum2J9f2 +Wp9Wal3y3/m0udLItdZao19vdpf32V9onbPO+ZJrnX5SJz2R03Jl+pNrT8u158sbvX7kl/XlU0r5 +ynr5yiul5XrlV9tWVivtrbTdyjhdcqWynel9Kr/S+1I+O51P5V/L7i2pU3mvpNRldI8ncdbIVcoo +Z5TUerwt27nlvdH9xlmbZ430stfY0+lkGqeckmmkUUqmM0Z5UWIzpbdjtPO5L3tH945VNtP73S8v +fzdKrbep+70+q9c7pYx9UmX05tsdr7Vs7WT619vGZ0rvyW0rm2vPy7Wda7dXSufL6rZR+oSr9fa+ +3Shd+bbt6nwpZfs2RkvZotjY7rK1Y2Xb3862o/zb1LvdFXs+Vxk5xqfxzmhlbHfxjR+l9TvrdY+3 ++V722O6yNUYbbbR/uUb5fJ2tvLHGdtf8rpPyjfc233hj+0fJ1V5Z+SONHyn/x499W0ZbJ40c75wc +ZfuVst1ZBjBFPE/JAYPD4JFkBc4R1UsOEpYGrxsvHOBECUhVxgqOnMgEufqAxqgHgmwoiwVuh9UG +Nik44moxAZEPYD2KyHpyVx/UAIHBAjBuuGBbgCjxQCbpl3LDpKWCkwuukC31OtT0ODKTk7sCCnr6 +zfwMTa3YjKwkwALHEQikuPFCiix3JSTUtEX7WRKCqFFBEQOIEMHHC5yckhi3pCoQsR5IOtjoQPJi +2wFxdqC0dHyetnSAdkIaXBNQRs3ph+OREs52noYhbH5cYaAighUUYGIEUh1ifCgp+oCTEIMSthUI +oAIwImxIsSEkBA2SlQVSfiDJoIWPI6zyA4nLrKk3QtAQYQ0hIUIaDxMPKGiX5XJL6g== + + + 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 +PuUZw6ozYvSs14GC7St4fr48KZeZ04rWC6lj/NJPW673HNdhkuE3kyGXvqMEc5Niy34OnqgyCkiw +YjxOrz3o7NJZkF36CTJsDvP8oosYrdo06ASld55gbCXCLjsFIT/mDUS23Q4rVjAP39QZjBLs3pt6 ++Uyr2Q90bp0pcAKFCUGLFigIHSV1yBB8nzmy44ZNshpZahoBtNS0Aiyp7LiTo9WYDOGReCjInAdO +v/gTOFNjD0aU0Bd8JJ0ZYNG0wkDFJ1yj9NKFSDG9AhdmHANQQYUMjB/TGAVPEXsDFebWgxWm1gIw +hEwBQPFbUiAGEqsCTdAZaAVrm7AD5bJghnh0wjjE5WBCxTv0jNozjFdmM82vvQc197M/5XzT0JkP +c5w6C8FzhJZhfrnFHMd6m2V5T9MM4z2EWWctgFPyGmeXTYvIzTexKTpX0ALm2eEGm5WipJKzKLPQ +XJxgbS9MrhtI0SvtwwiG1puK35Tb71xE6fTegMYnDMEF68UQ4yPmoEU7hkAkyQWiJ6SewU6txVAa +yTmSTmPLrdg+ePXuc6hc+64qNu/xOeujhNpwT0DwuWt2nTdS0XPldH2vTt9xzytarmbKRUfxgzK7 +8LLU3mCz9NYgw9RekTP1fmFy5xBmeswgdIzaH8CnMxM4VG0QiEzBCoActzSIwZJlJJ3KXqZaaj5t +l5svG/bG3ILtT9u0DmiO5DyIHCqyEzxbaiJEsXnWOjbX9dNGgGOTnH8gA5iUEvxKMzrZcL6mWt+s +runUbblteSW/Lf289WJFY/2O35UbhM3SdygVp0mtbLsy2tY/pW++c9ru2zTF3GCMXTeWIthbSDEK +LgP1UrsgJ0SYSBFiiaJihYgUJVqsSLGTgYEHXvRI+EiwAJogAWyBQkWIXgkTLUKYMFECRYgWvBUn +Qvx8QJ4TK1AAOVQw8lRwMjsqgJTExPA4eUCiPC48QqWx4xfkOZZUQGGipOPnS/aGyJgRFTrwTLT4 +8Xq+nwoUvxIhSKzosQhRYkULFCFSmFjRC6Gi50PBwgc8oUJCw8ADPE4eEB8yJEMGByqo2Hf/3X/3 +3/13/91/99/9d//df/ff/Xf/3X/33/13/91/99/9d//df/ff/Xf/3X/33/13/91/99/9d//df/ff +/Xf/3X/33/13/91/99/9d//df/ff/Xf/3X/33/13/91/99/9d//df/ff/Xf/3X/33w== + + + /Xf/3X/33/13/91/99/9d//df/ff/Xf/3X/33/13/91/99/9d//df/ff/Xf/3X/33/13/91/99/9 +d//df/ff/Xf/3f////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////// +///////////////////u//////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////// +////////////////////////f/f///////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////// +////////////////////////////////S6IdgEQMFpsGHkJoBEo0uTh4eRojQtt1MMlvHQTPkxwF +yb3nMNN0RSe8xtGVbQBAV7I6lGEYfsUIvjulY3NUW7YOdkUzP4IYPeEII0xsEB5ZrxJc012rYwSw +Vtl1ITxbayd6V2YufllnQ6jaj7M880/weLGFqNFaW5ETRmdC5QJY0p4dgFplz8UwvdwoMIl2zfBd +xZt6ymhMq+u5GDswegQeT/AJJ1ptI2bAe5DfOe5KCE437QlrQ1FUKoccu8Z4TrR+BGjOs9gZ40Hc +YLVF8KE1d+SE7z1WMxpWrJrf4pdFVqSa80A+ajil1dxnweO+ueh123KY6H1QlozOaEsW18Si709t +GY/NsvtKqRtOex2j01rNOvA13XMdaqjQJLBImZHA8ZqbILl3G6g3L3IMazMpgue/5xkvrbrlpNY3 +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 +QYp/sFmK5zjB+A8iWBvRKa8RQ0arbQEVU+8DHdsxBC+eXw6wUHJZYEINpzC71myYXrcNHsclCUzM +RFuG33wFI9NwBShTMAUhU28GHdGwEjVKa5dk147DLPsBkKEFCkGGz4dFuWW2AofJjUFIdvxAR9IL +gRU5TAaEYMFWQKKsMkF6tZEMsdIogPFD8kDDtAYBer2t6EmdufhVpZmQYYqToHEqezAi7U6A0X6L +VLC+BM5SXAMVoLMJlyeyCyxTaxusHME52CDFVeQoyT3IKMEx0DDJV45f9Jsl2FyDC1GZAovQeQNM +0PlCzY9agpWoeASPUXtFGUUWY+gUv5BDRO5Vv9p4zoDvqLKoC1BAlo6A/gBhBwQhCHkIAxJoYBgG +AAgAgEBACASCgCAgeIBggIBZoLcFXKvEKFUH7O/MMEqRnyLv9sllfoXIwShtBqMqlOkp9bGOFzqS +IhO63/pTDjXFn5zjCJUWZSVTAqPq84SM2gkddTJKeVowkQE9TLg+fy2iPq6af1vHVaYR0wcGGBxj +nVAK+IgB/o7trbqgKpIflJ3HHZTyrXnb5ecTx5aWyPzEzZyTm7gzP+cmbt7P/tyZ/Jk3uxlvdnPf +5ObOxJncrDv7uW5y897s587Ez7yZm3mzO/cnd+4mzsTN3Nmbc5Mz72c/70x+1pvdzDO7uT9xczfh +TG7mnv2cO7l5P/NzZ/Jm3uzMvNnN+5ObdxNncmbu7Oe4yc3zs587Jz/zzm7mzdzcn5y5mzgmN3Pn +fs5N3byfvbkz+RlvdjPe7AyaRdAcevf4vAYAdAaHNzk2ZGY1ZGEtMzUyYS00OGE5LWFlODYtYTBl +ODgxOGQ5YTc3YWMwMTBlNDAtODczZC00MzQ3LTkzYWMtOGZjMmRjZmU3MTI5LTc5MTY2MTA3OTI4 +MjYybDYwMiA0MWgNCldRNC04HwBWyIRRrQOrSFgY1R42R7Xc4hF2YTSSBBbGXtANoxpB2tMYb4DR +KBDwYNIH6uDBBdKYmMYdakGrRxfrIQFeDYDrkvKA2C7bJj9UYxguGutiumMvNH2ObeSBjTLIaECX +1opqOlDgfGwwfU5NDq5kBgC0BNAxN2YtZTZiYi00ZjI5LTljNTQtOTM1MjZiMjU0MjZhMTFkODkw +ZC0xZmMwLTRhNjItYmY1Ny1hNDI4YjgzYjk3YTY2Mzc3MzY2NCIgoYQ5RmCEx0J8WiT/o8+hhgMA +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 + + + FrwFf8HeAXsvzdxLQeMpKrW4sLJ3o7XWn96uL6Az1ewMNlRnmNo6MzT0PqWUUspEsqWuA/QBX2yB +IPcXMwXsBGQFK92/ZHJZp8n/lVXlYudtVJxSYtp3xb/7vOv4W62TuSsne+fFybytk2n/XnZixdNO +lrwkEwp3svROplanTqaeLNMX+3q6ZGr3kz9xq35PqlWfalaYh2650nep2+stb4XtSvGWJ1veem/K +rjwd9dzV5Sdee8rPT8qflFWtTorVp6Rs/erS+fY/reqV1ub6VN+b1DpVyZTqXbWXrFklc7xVemnL +GQ9V0tP1ydwUJk3m6lWe5yf7/3z8tMfqau3J9jGZe7pd62mVJqdzX+vak2F7slVJMrkoT6bfmxSl +0ikF01OmzARRAbzwgBEV6CDFBigwwwpQwKGBQwNnAsLSVDBFO7TFFuEhKRS07kW5fJBMKBS0b2PK ++jXy0kTm9Fxr5a/HXKr5NlkHVbjJUKlUydebc/pfT12VzLpq+fUn6/LtU77WwkZ9PbQOitXXsetS +l71e/fpkysrPg0k7SSaPn//SxAiQYOQGQYgBBhIY6WwymhMcGjwsISVAUUcFQ8Im9krDZDAXmAwO +DZLJhUNDpiAAyeQD9TCfNTlLJh8uJvzQs/kyOyQ9tbY5peS/rH6lXmsp5/Psw1WiwwoJ6EPTZHXt +8Lu+23O52nv3brXJaB1S9dVpKu6+JMC410qQDpZpuFIy6eggmWRQmlcGZRF1KW/lnJqseMIKhoBC +BigYmQAHRiLQAhQpTFSwzBQ+LpTSPTelj/Ztq3LXUfltkkwexcRry3ufbuW0XKxaVTJ5NiWTR/1S +dPUqf61nfle2+tAXrp6qZN3Jqsr5yTzXvp7KX6v039SqTZvqajn1aTq09aqJSy11nnqrtmpKrfPN +yz3mXdR1usnLb6nKc9vzOllrWlXJ38k+L2262rXSdJOeskd8pdT1Pk/zP6VjU+8q1VhhWqce26vO +N0fvfX+lK9U/JZPL456i8+JtYjK1WJNK3vNMisv3ibfJXjGfSnP13ZaYloqZvZ5Xd1LmuW7v1TTd +eGku2/08d1NVU7meWWneSp3pMhUP0xhTVVWtw/Rp/WvSa33O60+M61KpzpTm6etPuf6pJJk8//fp +tjoVVc35OfHs/TwZ/8rOVH2Y1qnoy9urTNW6zKSJ10kl81Xdv6sd7/U4N9lnenVK+R93Gi+iKlx4 +uKZsvWTynKeZc5sa52K1fGNHPLZGvFxtZk3J5NncpdaYifiem/Aw2abeSqsJ1ZPueVLJSm/TKibF +Km9pWk9pninxVlp6mL3XyXTpYVKpynptsaKe+bJ1VLxVqZRzJ1MpmTyWuSmZPJ9KL9NyrWaUTC65 +SV3rJ0ulK9lnSr5OxpmW/zav2n+3tfy8PTxPVafS+m1a69TFe/M0tU6tY7VkvbZnW597SvEyWb/7 +J1Pc3+XNTOV4vXyoUk2V2lSbemu7yU+vk2eeys/k6pMleq9N9itZZ3K+TCrTX6r0U/abVpOltSZT +5eo2NZMl7qpb6VPPXtOuU5l5ypa6zNP7dD/dW6rHKpUrXlqnnSZT9T+V5rjrb3EXsqp9OtdfP5dM +Lrl7iUKJTiWECRWbzAfUIYNCiadTAZGRcVFRolMJoamU0OhQwQv7kCOZPKarVKa052kl82RKk6mV +bDVJJk9ua7KlkrnK1EmV5S71vYdpnEkyeTSZetZkuTKlrfSp5ynXdiXJ5Ekq7V0yeTwtl6kyhWqv +ksmTr9Z+Kpd3M/M2mUpLlQ5XMnk6MRln/rEaZ8rMlMmu0yWTS67yYeYLgIDCBSDEUCGZcGJcaPDA +kMCBiXGh4Z/DAjwYUUEMUuAgBClGQIMZODAuJAGunp+byn1z8ziXM7N7nXl93d3TNf1aU1OztVVr +dncvbXXXTV/f9G1N3sze7c3N1Nubm6m3N7v1ujMzV2Zrayuraqtqq6qqqqqqqqqysqqqqrZqq3ar +aqu2qqq2trbqZu5u5q6qXvWnunT/F7v3dzdiVr2PG/3trdpdXLoXzadbbbfq7O6lrrs76u721u9+ +Viv7/qboUbqRPx97+rou+0a/r7Y3+TLnLudv8uZrM7MmP++/qW7Vdzd3V/FupFZV6kZKVXm0f6q5 +VDP1rrV47eLFvbpTcSsnVqw48WLFihWzs2LFrJ4Vq+RWarUuzbR4ceKlKzkvZmY+Xrw4LcZezP2L +mX3x8eLE3Mv6zc/i293k3VxrlWbEu7o1XaPM9k9GZ2dndkZ0XO6vKZm9+505vxWrfebjiJmP+Z9Z +k79qKvc+t76+il71vTta36+Pa9V51Tv/77vS3l1lZfbb31/dT8aFvZ7/PZnKSz7/zq9WtbOzymVd +pfqdz61YH3eVj5WzcnW7q8wqF1VVOl6VmJNZsxUrpbJZl391/i/Virl4+avqpKx4V5W3e/XVVzUv +r2TJmCYqWHI0EmC8cHN9MpWZK61kaEJ1Zafq/8/0zN3s5dU8xlWZJBNOAgxNMjkhIyMZYm7YoAAL +IxSoAIoZACEGW8aCCVL8QAIoKjYsBzeQgQIpSEGBCqBwAAtkSEzG0qlsOhwLCCTCw7IpAQRjsUQa +i0ODZIKGl8gmOg/0sYFCRNAJS4i+GKSplOCYBybEMN9V/9DXasdX6dceVXdl+pX2U7PbE39JJhe1 +9p7LnG33JZOLkkw8fKxsTr88l7bS1ZIJRbVZXaKftm0jn5pya3LcZra0LJlQmDXZ9JP58n3yXUqd +JnulLJlQNFm+fq5lW0/+pmhu/m47Z6crXsW10vlxle7/tvKhXqtmPrratZxrSn0u5H0K/rJPtbtr +ra2W1Zjtt3WNV7U65FN+uK2L5+195tsqs71PtfN+M/K69X3JhJKfbK6QXXmpV/6rVl/7LlNrX71T +UFP/9VOVr/Jc7ft3X68WXir7z1+8VWvZSk1lbWvxTf26xcrU7x8m9ZocL39XKfd3tVp9mTP/q7O7 +pqfz62Wbv2fqzlXqePE63NTMbXVtVU+/VOmufFW1tb39q5amysxsRlXcnJb4rwpvveXSpYeNyeyX +p7guk9q0LpvTdsK1uxKvXMk7b6VTSXUyxfSNntyTUv7naXliTO/7ZM++nPbx1namRM7rxJ80+SfF +65Nn9+99KudyVT1cbn/H9bQ8fVdT6k6par1PO63c9blJOznpXqdm9qbupldNSvl+FdMntWltusQ9 +VZxW6lO/tFXdcmJOmn75urVUqidjTM2HKaHbpeJ8VutbjU2TOXMnJ7fFtCQTihqrnm6yTV3f9ys1 +rUomlN60qaq+kHPdqWU2Tb2sy73J7yUTCnarb2qbcspLv6ZkEkIxxlSl5mrtS99ck5GVK36nv7/S +T/v6+snyf5NkQnlTlfDTO+f6vrZbY0q7x2qartnIq2vv23LtL0tNm+tr+fD3+fT1mdHT1r4xZrMe +cvpNTsZv+2r3ub/51y1O52+rrg61X3WfX/fCVVPev5mq9U/1WugJF/nRnf1buc09SSaUbU3lSfm+ +0+J+3l+6KXHCRk68Ntn2rbXpfZNv9h9bZlrcvvXrXFVCZQEg4EGKF7wQAxA6kOIFMJDB0NqT4bLF +gxdQOICFtm60NHO1tbVBC1K88IARW+y0rJBMwAQoXnjAiHVWSCaYygcOD0xIRgRHo7UGhWOFTaXD +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 +plk2hUhZXisi/Y9R9N0= + + + diff --git a/package-lock.json b/package-lock.json index 91cc2d098f..8b751e7af9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -83,7 +83,7 @@ "dom-parser": "^1.1.5", "dotenv": "^16.4.5", "ejs": "^3.1.10", - "esbuild": "^0.21.0", + "esbuild": "^0.21.1", "eslint": "^8.57.0", "estrace": "^5.0.1", "eta": "^3.4.0", @@ -117,7 +117,7 @@ "process": "^0.11.10", "properties-reader": "^2.3.0", "pug": "^3.0.2", - "putout": "^35.21.0", + "putout": "^35.22.2", "recast": "^0.23.6", "regenerate": "^1.4.2", "rimraf": "^5.0.5", @@ -420,9 +420,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.0.tgz", - "integrity": "sha512-kB8I77Onff4y6hAREwsjF11ifM+xi8bBIq/viMO5NFZDX2vKlF0/mevHJYb4sNfb55jIREeUztkUfIgOFtSzdw==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.1.tgz", + "integrity": "sha512-O7yppwipkXvnEPjzkSXJRk2g4bS8sUx9p9oXHq9MU/U7lxUzZVsnFZMDTmeeX9bfQxrFcvOacl/ENgOh0WP9pA==", "cpu": [ "ppc64" ], @@ -436,9 +436,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.0.tgz", - "integrity": "sha512-8OvDALSbmoLJ79KCs0hxoki5I3qJA7JQMhJO6aq5O8G+pi7TPnGICdQRQcgdzwZaVc4ptp5SX7Phg6jKzvSEBg==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.1.tgz", + "integrity": "sha512-hh3jKWikdnTtHCglDAeVO3Oyh8MaH8xZUaWMiCCvJ9/c3NtPqZq+CACOlGTxhddypXhl+8B45SeceYBfB/e8Ow==", "cpu": [ "arm" ], @@ -452,9 +452,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.0.tgz", - "integrity": "sha512-SDGbrIOL6P6WTIbDcCa2sbFgznp8o6ztjGWrA+js8JZ9HhBXavN3gPrEqUqB4+bV4AdsqlZG1tK2F06BOPNpZg==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.1.tgz", + "integrity": "sha512-jXhccq6es+onw7x8MxoFnm820mz7sGa9J14kLADclmiEUH4fyj+FjR6t0M93RgtlI/awHWhtF0Wgfhqgf9gDZA==", "cpu": [ "arm64" ], @@ -468,9 +468,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.0.tgz", - "integrity": "sha512-G4fkcHqDtIbiE9b3KFJP+ay+TiCOHmenT5GYVi0fuHxFbX0CJ3lpTQbFuWR5s5AlYZZ1j4yY2hbggSUkaBK0pg==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.1.tgz", + "integrity": "sha512-NPObtlBh4jQHE01gJeucqEhdoD/4ya2owSIS8lZYS58aR0x7oZo9lB2lVFxgTANSa5MGCBeoQtr+yA9oKCGPvA==", "cpu": [ "x64" ], @@ -484,9 +484,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.0.tgz", - "integrity": "sha512-XMcLA6siz67AoEOl8WOot2Y3TOSClT15AqJdQz/sx98Dpv3oTbcv0BoqvHAhpBPgC8iyIKM98vVj6th7lA4DFg==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.1.tgz", + "integrity": "sha512-BLT7TDzqsVlQRmJfO/FirzKlzmDpBWwmCUlyggfzUwg1cAxVxeA4O6b1XkMInlxISdfPAOunV9zXjvh5x99Heg==", "cpu": [ "arm64" ], @@ -500,9 +500,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.0.tgz", - "integrity": "sha512-+dmvTVqVkAArjJyIbo4Rl2S4I4A/yRuivTPR9Igw0QMBVSJegJqixKxZvKLCh8xi6n8tePdq3EpfbFYH2KNNiw==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.1.tgz", + "integrity": "sha512-D3h3wBQmeS/vp93O4B+SWsXB8HvRDwMyhTNhBd8yMbh5wN/2pPWRW5o/hM3EKgk9bdKd9594lMGoTCTiglQGRQ==", "cpu": [ "x64" ], @@ -516,9 +516,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.0.tgz", - "integrity": "sha512-g8/wBRLbsjryMBo4PGg050I1fn4qrJobkxpT1OekO6I4H2HVQfVfBAvGPhwzc9tr8CUVu0pSGSz9oDPGIjhLNw==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.1.tgz", + "integrity": "sha512-/uVdqqpNKXIxT6TyS/oSK4XE4xWOqp6fh4B5tgAwozkyWdylcX+W4YF2v6SKsL4wCQ5h1bnaSNjWPXG/2hp8AQ==", "cpu": [ "arm64" ], @@ -532,9 +532,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.0.tgz", - "integrity": "sha512-uwRL7kSN9tfFBpa7o9HQjEgxPsQsSmOz2ALQ30dxMNT22xS49s8nUtFi7bJ+kM/pcTHcnhyJwJPCY7cwlbQbWQ==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.1.tgz", + "integrity": "sha512-paAkKN1n1jJitw+dAoR27TdCzxRl1FOEITx3h201R6NoXUojpMzgMLdkXVgCvaCSCqwYkeGLoe9UVNRDKSvQgw==", "cpu": [ "x64" ], @@ -548,9 +548,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.0.tgz", - "integrity": "sha512-8s/YeLaUV3QTaGzwDqiTpb78Nw/DdIaUdIlRZItGgWf/8UZHsYUIWj9RfsEXVJB5qvtrg835Dgz/gf+GmFGa7w==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.1.tgz", + "integrity": "sha512-tRHnxWJnvNnDpNVnsyDhr1DIQZUfCXlHSCDohbXFqmg9W4kKR7g8LmA3kzcwbuxbRMKeit8ladnCabU5f2traA==", "cpu": [ "arm" ], @@ -564,9 +564,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.0.tgz", - "integrity": "sha512-mgOuJBbV8Uexb3BmeVl1q2preJMu0aDiwiFxIfsQhE2+rqxVAEcIrllb7SulkH9G244O/ZN1VVILdZb2NPSvpw==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.1.tgz", + "integrity": "sha512-G65d08YoH00TL7Xg4LaL3gLV21bpoAhQ+r31NUu013YB7KK0fyXIt05VbsJtpqh/6wWxoLJZOvQHYnodRrnbUQ==", "cpu": [ "arm64" ], @@ -580,9 +580,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.0.tgz", - "integrity": "sha512-7pVhVYBt3/R8x0Um9p4V8eMiQcnk6/IHkOo6tkfLnDqPn+NS6lnbfWysAYeDAqFKt6INQKtVxejh6ccbVYLBwQ==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.1.tgz", + "integrity": "sha512-tt/54LqNNAqCz++QhxoqB9+XqdsaZOtFD/srEhHYwBd3ZUOepmR1Eeot8bS+Q7BiEvy9vvKbtpHf+r6q8hF5UA==", "cpu": [ "ia32" ], @@ -596,9 +596,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.0.tgz", - "integrity": "sha512-P8Lse7CXV83ARWVaq6KwV6w86ABeViyUvw6s++tYsUuqUEZgG5697Un72usafkuD7AfOyBdFX6JqZSvIQAU0yQ==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.1.tgz", + "integrity": "sha512-MhNalK6r0nZD0q8VzUBPwheHzXPr9wronqmZrewLfP7ui9Fv1tdPmg6e7A8lmg0ziQCziSDHxh3cyRt4YMhGnQ==", "cpu": [ "loong64" ], @@ -612,9 +612,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.0.tgz", - "integrity": "sha512-lUvMkXlUMrx5vnspMWohma6vuWh+Z/mPV6DdbXW07fNgF2Tlg6SLSqqzDXv5XYV4og5awNFYcPXpgqOVsqdx7Q==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.1.tgz", + "integrity": "sha512-YCKVY7Zen5rwZV+nZczOhFmHaeIxR4Zn3jcmNH53LbgF6IKRwmrMywqDrg4SiSNApEefkAbPSIzN39FC8VsxPg==", "cpu": [ "mips64el" ], @@ -628,9 +628,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.0.tgz", - "integrity": "sha512-wLi9VRnLDRg1Gudic24gcT5aa5LZGBwLi4aYghQ9bVb8z0qYHrZnRTNxulErFvOsSgijUWS5uNLCUaLwj+tvIQ==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.1.tgz", + "integrity": "sha512-bw7bcQ+270IOzDV4mcsKAnDtAFqKO0jVv3IgRSd8iM0ac3L8amvCrujRVt1ajBTJcpDaFhIX+lCNRKteoDSLig==", "cpu": [ "ppc64" ], @@ -644,9 +644,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.0.tgz", - "integrity": "sha512-MOjonqpNtns0Y32NwvMZiZXw94g8EqeqI+4BQtIHj07xX61vOyqlBsJH3UbjkWvaewie1VP9IoiX2Ja/P2XCJw==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.1.tgz", + "integrity": "sha512-ARmDRNkcOGOm1AqUBSwRVDfDeD9hGYRfkudP2QdoonBz1ucWVnfBPfy7H4JPI14eYtZruRSczJxyu7SRYDVOcg==", "cpu": [ "riscv64" ], @@ -660,9 +660,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.0.tgz", - "integrity": "sha512-Gz/gafubuM3L1D29LnqaxcGg16aa2XES/uFTFdcvrwsRpMxkLiowaUvIiWJfatf/oCyyZu5CT8SrlMy37dGc7A==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.1.tgz", + "integrity": "sha512-o73TcUNMuoTZlhwFdsgr8SfQtmMV58sbgq6gQq9G1xUiYnHMTmJbwq65RzMx89l0iya69lR4bxBgtWiiOyDQZA==", "cpu": [ "s390x" ], @@ -676,9 +676,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.0.tgz", - "integrity": "sha512-OGorpObKLm8XlhoJlxtdwECfnESXu3kd8mU1yZ5Xk0vmh0d2xoJjEXJi7y7mjFpc3+XfGQRgHq/gqyIkbufnvA==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.1.tgz", + "integrity": "sha512-da4/1mBJwwgJkbj4fMH7SOXq2zapgTo0LKXX1VUZ0Dxr+e8N0WbS80nSZ5+zf3lvpf8qxrkZdqkOqFfm57gXwA==", "cpu": [ "x64" ], @@ -692,9 +692,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.0.tgz", - "integrity": "sha512-AwkJoff9D5Px7+lHafSSgDK3JreyeyPtwTsOfxhlk5NZ+bMGlvSfHkA6DKv9vD0gmGrBPTMv/uIePkNaVsDq7w==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.1.tgz", + "integrity": "sha512-CPWs0HTFe5woTJN5eKPvgraUoRHrCtzlYIAv9wBC+FAyagBSaf+UdZrjwYyTGnwPGkThV4OCI7XibZOnPvONVw==", "cpu": [ "x64" ], @@ -708,9 +708,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.0.tgz", - "integrity": "sha512-wqv7KSmRA4qf0lFZ2Abjp2boO9tDe7YwNLZ7DNUI5rsluS0/TF78CtPUUAePukgE6b2HcXYZYuL5F2yXdQIqIg==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.1.tgz", + "integrity": "sha512-xxhTm5QtzNLc24R0hEkcH+zCx/o49AsdFZ0Cy5zSd/5tOj4X2g3/2AJB625NoadUuc4A8B3TenLJoYdWYOYCew==", "cpu": [ "x64" ], @@ -724,9 +724,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.0.tgz", - "integrity": "sha512-3qAZFC752nZZQOI+OG4KIawvLfdD5yMFCeIFz0OhedMpYgq9AOKygW45Ojy0E5upBqns2fUaMFk1CnNSkvJaYw==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.1.tgz", + "integrity": "sha512-CWibXszpWys1pYmbr9UiKAkX6x+Sxw8HWtw1dRESK1dLW5fFJ6rMDVw0o8MbadusvVQx1a8xuOxnHXT941Hp1A==", "cpu": [ "x64" ], @@ -740,9 +740,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.0.tgz", - "integrity": "sha512-06BY4wjQQ2bPjayuvKWXr5X3V+ZGnoTOX1+doLoQBUSyCDb9JZgX7o0N3t3rRNmEiMY/DuxXwu+EE+U32B4ErA==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.1.tgz", + "integrity": "sha512-jb5B4k+xkytGbGUS4T+Z89cQJ9DJ4lozGRSV+hhfmCPpfJ3880O31Q1srPCimm+V6UCbnigqD10EgDNgjvjerQ==", "cpu": [ "arm64" ], @@ -756,9 +756,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.0.tgz", - "integrity": "sha512-uTLz9mPOMkl3bfuGnSQumrUN7U1aPb8MCOdjQJOWPGdXTZhkK6Z2lLHxdTjX6C51jxXWWAo64tcRwiAYOkQhJw==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.1.tgz", + "integrity": "sha512-PgyFvjJhXqHn1uxPhyN1wZ6dIomKjiLUQh1LjFvjiV1JmnkZ/oMPrfeEAZg5R/1ftz4LZWZr02kefNIQ5SKREQ==", "cpu": [ "ia32" ], @@ -772,9 +772,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.0.tgz", - "integrity": "sha512-XT0oCVNRjmrMTz/Xd+9L2eOI83gUQZg9Viiv3cuT/8VNlXVMn6QsxyBMDNFsYX+wmQRD31VMKNtkZaXvS3/JiA==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.1.tgz", + "integrity": "sha512-W9NttRZQR5ehAiqHGDnvfDaGmQOm6Fi4vSlce8mjM75x//XKuVAByohlEX6N17yZnVXxQFuh4fDRunP8ca6bfA==", "cpu": [ "x64" ], @@ -6633,9 +6633,9 @@ } }, "node_modules/esbuild": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.0.tgz", - "integrity": "sha512-eyK64lASNug3Wo2+bQEBnYngjh9rkXUfOus403+OeVZteMon6moIhcEYbrSvcgBN6RsrRWCMoWcKDDK6UEsTOQ==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.1.tgz", + "integrity": "sha512-GPqx+FX7mdqulCeQ4TsGZQ3djBJkx5k7zBGtqt9ycVlWNg8llJ4RO9n2vciu8BN2zAEs6lPbPl0asZsAh7oWzg==", "dev": true, "hasInstallScript": true, "bin": { @@ -6645,29 +6645,29 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.0", - "@esbuild/android-arm": "0.21.0", - "@esbuild/android-arm64": "0.21.0", - "@esbuild/android-x64": "0.21.0", - "@esbuild/darwin-arm64": "0.21.0", - "@esbuild/darwin-x64": "0.21.0", - "@esbuild/freebsd-arm64": "0.21.0", - "@esbuild/freebsd-x64": "0.21.0", - "@esbuild/linux-arm": "0.21.0", - "@esbuild/linux-arm64": "0.21.0", - "@esbuild/linux-ia32": "0.21.0", - "@esbuild/linux-loong64": "0.21.0", - "@esbuild/linux-mips64el": "0.21.0", - "@esbuild/linux-ppc64": "0.21.0", - "@esbuild/linux-riscv64": "0.21.0", - "@esbuild/linux-s390x": "0.21.0", - "@esbuild/linux-x64": "0.21.0", - "@esbuild/netbsd-x64": "0.21.0", - "@esbuild/openbsd-x64": "0.21.0", - "@esbuild/sunos-x64": "0.21.0", - "@esbuild/win32-arm64": "0.21.0", - "@esbuild/win32-ia32": "0.21.0", - "@esbuild/win32-x64": "0.21.0" + "@esbuild/aix-ppc64": "0.21.1", + "@esbuild/android-arm": "0.21.1", + "@esbuild/android-arm64": "0.21.1", + "@esbuild/android-x64": "0.21.1", + "@esbuild/darwin-arm64": "0.21.1", + "@esbuild/darwin-x64": "0.21.1", + "@esbuild/freebsd-arm64": "0.21.1", + "@esbuild/freebsd-x64": "0.21.1", + "@esbuild/linux-arm": "0.21.1", + "@esbuild/linux-arm64": "0.21.1", + "@esbuild/linux-ia32": "0.21.1", + "@esbuild/linux-loong64": "0.21.1", + "@esbuild/linux-mips64el": "0.21.1", + "@esbuild/linux-ppc64": "0.21.1", + "@esbuild/linux-riscv64": "0.21.1", + "@esbuild/linux-s390x": "0.21.1", + "@esbuild/linux-x64": "0.21.1", + "@esbuild/netbsd-x64": "0.21.1", + "@esbuild/openbsd-x64": "0.21.1", + "@esbuild/sunos-x64": "0.21.1", + "@esbuild/win32-arm64": "0.21.1", + "@esbuild/win32-ia32": "0.21.1", + "@esbuild/win32-x64": "0.21.1" } }, "node_modules/esbuild-node-builtins": { @@ -16059,9 +16059,9 @@ "integrity": "sha512-EkCRMV2w15w+9wylcpabacKK9VvTRX3TvhVQJBwIk4ThvllI2M6RlvdEZvJLhxsxy4x8IEDZneQhlGU0Pk5keg==" }, "node_modules/putout": { - "version": "35.21.0", - "resolved": "https://registry.npmjs.org/putout/-/putout-35.21.0.tgz", - "integrity": "sha512-Z5aFJ2J5yE9wThvz06jS5uipYdS1lmCDtBYS7IN3K8xxDzcPJvlFDAb5FlVbulLzZi/av/qQdgQYjf3B6KeuIg==", + "version": "35.22.2", + "resolved": "https://registry.npmjs.org/putout/-/putout-35.22.2.tgz", + "integrity": "sha512-9WZ9Aa6s+DJTh85aYzT1+qtM2kCJ8EuDMWqVWLQbqCSUyzZRDyey0DDkeeWbLNdmlJrIeUP/HQbXI3yEbzXnOg==", "dev": true, "dependencies": { "@putout/babel": "^2.0.0", @@ -16147,7 +16147,7 @@ "@putout/plugin-nodejs": "^11.0.0", "@putout/plugin-npmignore": "^5.0.0", "@putout/plugin-package-json": "^7.0.0", - "@putout/plugin-promises": "^14.0.0", + "@putout/plugin-promises": "^15.0.0", "@putout/plugin-putout": "^19.0.0", "@putout/plugin-putout-config": "^5.0.0", "@putout/plugin-regexp": "^8.0.0", @@ -16229,6 +16229,21 @@ "node": ">=18" } }, + "node_modules/putout/node_modules/@putout/plugin-promises": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@putout/plugin-promises/-/plugin-promises-15.0.0.tgz", + "integrity": "sha512-tFHFUOBRNdQdABwmx3jqWbdHvjoYfoAieJmouv6HhMGBkf3nflwUFPdY248KmrwvEVHCR0p3WaovT5EQOUr9vQ==", + "dev": true, + "dependencies": { + "fullstore": "^3.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "putout": ">=35" + } + }, "node_modules/putout/node_modules/chalk": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", diff --git a/package.json b/package.json index 65a1d52312..c5ad866218 100644 --- a/package.json +++ b/package.json @@ -137,7 +137,7 @@ "dom-parser": "^1.1.5", "dotenv": "^16.4.5", "ejs": "^3.1.10", - "esbuild": "^0.21.0", + "esbuild": "^0.21.1", "eslint": "^8.57.0", "estrace": "^5.0.1", "eta": "^3.4.0", @@ -171,7 +171,7 @@ "process": "^0.11.10", "properties-reader": "^2.3.0", "pug": "^3.0.2", - "putout": "^35.21.0", + "putout": "^35.22.2", "recast": "^0.23.6", "regenerate": "^1.4.2", "rimraf": "^5.0.5", diff --git a/site/themes/relearn b/site/themes/relearn index ff35016bca..21b4289ecf 160000 --- a/site/themes/relearn +++ b/site/themes/relearn @@ -1 +1 @@ -Subproject commit ff35016bcab2294334b14839e15287ba3dee91b1 +Subproject commit 21b4289ecf44cead65bbe8427724e1769aedca7d diff --git a/submodules/zotero b/submodules/zotero index de9e7ff962..85f58cc97d 160000 --- a/submodules/zotero +++ b/submodules/zotero @@ -1 +1 @@ -Subproject commit de9e7ff9624c4bd08b4ecff486e789581732ecb3 +Subproject commit 85f58cc97d2b73af7777c2d6e632dc7b2631531c From de69d560ae071743da1e429fd54b01d87a66521c Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Wed, 8 May 2024 12:57:22 +0200 Subject: [PATCH 163/177] 6.7.186 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8b751e7af9..c5fb3ade52 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "zotero-better-bibtex", - "version": "6.7.185", + "version": "6.7.186", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "zotero-better-bibtex", - "version": "6.7.185", + "version": "6.7.186", "license": "ISC", "dependencies": { "@artsy/to-title-case": "^1.1.0", diff --git a/package.json b/package.json index c5ad866218..cdf396f75b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "zotero-better-bibtex", - "version": "6.7.185", + "version": "6.7.186", "description": "Make Zotero useful for us LaTeX holdouts.", "homepage": "https://retorque.re/zotero-better-bibtex", "license": "ISC", From f452c07ab051e2e2af72b524b276a0e1b02d3820 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Wed, 8 May 2024 21:53:52 +0200 Subject: [PATCH 164/177] New translations better-bibtex.ftl (Chinese Simplified) (#2874) --- locale/zh-CN/better-bibtex.ftl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/locale/zh-CN/better-bibtex.ftl b/locale/zh-CN/better-bibtex.ftl index c508792ef7..9a11c656f3 100644 --- a/locale/zh-CN/better-bibtex.ftl +++ b/locale/zh-CN/better-bibtex.ftl @@ -1,4 +1,4 @@ --citation-key = Citation key +-citation-key = 引用 better-bibtex_auto-export_delete = 正在删除自动导出 better-bibtex_auto-export_delete_confirm = 您确定要删除此项自动导出吗?该操作不可撤销。 better-bibtex_aux-scan_prompt = 标签名 From fa63785f52e3396479d03f199e7b591580598d8a Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Thu, 9 May 2024 18:22:27 +0200 Subject: [PATCH 165/177] attachments now accepts library ID/name --- content/json-rpc.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/content/json-rpc.ts b/content/json-rpc.ts index a984451b76..724f8399fc 100644 --- a/content/json-rpc.ts +++ b/content/json-rpc.ts @@ -227,8 +227,10 @@ class NSItem { * * @param citekey The citekey to search for */ - public async attachments(citekey: string) { - const key = Zotero.BetterBibTeX.KeyManager.first({ where: { citationKey: citekey.replace(/^@/, '') } }) + public async attachments(citekey: string, library?: string | number) { + const where : Query = { citationKey: citekey.replace(/^@/, '') } + if (typeof library !== 'undefined') where.libraryID = Library.get(library).libraryID + const key = Zotero.BetterBibTeX.KeyManager.first({ where }) if (!key) throw { code: INVALID_PARAMETERS, message: `${citekey} not found` } const item = await getItemsAsync(key.itemID) const attachments = await getItemsAsync(item.getAttachments()) From c81ea354bbdd6ea1c9bee6d350e1d3ca14d5a280 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Thu, 9 May 2024 18:22:56 +0200 Subject: [PATCH 166/177] 6.7.187 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index c5fb3ade52..b6216a2213 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "zotero-better-bibtex", - "version": "6.7.186", + "version": "6.7.187", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "zotero-better-bibtex", - "version": "6.7.186", + "version": "6.7.187", "license": "ISC", "dependencies": { "@artsy/to-title-case": "^1.1.0", diff --git a/package.json b/package.json index cdf396f75b..5f4e0d00fd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "zotero-better-bibtex", - "version": "6.7.186", + "version": "6.7.187", "description": "Make Zotero useful for us LaTeX holdouts.", "homepage": "https://retorque.re/zotero-better-bibtex", "license": "ISC", From 055e3f3f9d0eb65b4d6d7ce79e5069c299ecb48e Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Thu, 9 May 2024 18:26:35 +0200 Subject: [PATCH 167/177] default to user lib --- content/json-rpc.ts | 2 +- content/library.ts | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/content/json-rpc.ts b/content/json-rpc.ts index 724f8399fc..e17ccf6147 100644 --- a/content/json-rpc.ts +++ b/content/json-rpc.ts @@ -229,7 +229,7 @@ class NSItem { */ public async attachments(citekey: string, library?: string | number) { const where : Query = { citationKey: citekey.replace(/^@/, '') } - if (typeof library !== 'undefined') where.libraryID = Library.get(library).libraryID + if (library !== '*') where.libraryID = Library.get(library).libraryID const key = Zotero.BetterBibTeX.KeyManager.first({ where }) if (!key) throw { code: INVALID_PARAMETERS, message: `${citekey} not found` } const item = await getItemsAsync(key.itemID) diff --git a/content/library.ts b/content/library.ts index 24c8ae0b90..b3f0066967 100644 --- a/content/library.ts +++ b/content/library.ts @@ -1,6 +1,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-return, @typescript-eslint/explicit-module-boundary-types */ -export function get(name: string | number) { +export function get(name?: string | number) { + if (typeof name === 'undefined') return Zotero.Libraries.userLibraryID const num = typeof name === 'number' ? name : parseInt(name) if (!isNaN(num)) return Zotero.Libraries.get(num || Zotero.Libraries.userLibraryID) From 306e501588b8c99618b97831d548e6077e30ab4e Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Thu, 9 May 2024 18:26:42 +0200 Subject: [PATCH 168/177] 6.7.188 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index b6216a2213..1d3f7687c9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "zotero-better-bibtex", - "version": "6.7.187", + "version": "6.7.188", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "zotero-better-bibtex", - "version": "6.7.187", + "version": "6.7.188", "license": "ISC", "dependencies": { "@artsy/to-title-case": "^1.1.0", diff --git a/package.json b/package.json index 5f4e0d00fd..4905f5f743 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "zotero-better-bibtex", - "version": "6.7.187", + "version": "6.7.188", "description": "Make Zotero useful for us LaTeX holdouts.", "homepage": "https://retorque.re/zotero-better-bibtex", "license": "ISC", From 94bcb4d94f6b18825327c1411820b5b75f1bd3d2 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Thu, 9 May 2024 21:20:11 +0200 Subject: [PATCH 169/177] library object --- content/library.ts | 4 ++-- submodules/translators | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/content/library.ts b/content/library.ts index b3f0066967..29a492e7cb 100644 --- a/content/library.ts +++ b/content/library.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-return, @typescript-eslint/explicit-module-boundary-types */ -export function get(name?: string | number) { - if (typeof name === 'undefined') return Zotero.Libraries.userLibraryID +export function get(name?: string | number): number { + if (typeof name === 'undefined') name = Zotero.Libraries.userLibraryID const num = typeof name === 'number' ? name : parseInt(name) if (!isNaN(num)) return Zotero.Libraries.get(num || Zotero.Libraries.userLibraryID) diff --git a/submodules/translators b/submodules/translators index ffb252e58b..d0e7827d06 160000 --- a/submodules/translators +++ b/submodules/translators @@ -1 +1 @@ -Subproject commit ffb252e58b2ff0a6344e06d2f8928828ef9c0e7f +Subproject commit d0e7827d061329d9830675ef9effafe590f0b06d From 8968c2f1b308ac9a94acd34181b2a518d6fb5b6b Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Thu, 9 May 2024 21:20:43 +0200 Subject: [PATCH 170/177] 6.7.189 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1d3f7687c9..772d013eec 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "zotero-better-bibtex", - "version": "6.7.188", + "version": "6.7.189", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "zotero-better-bibtex", - "version": "6.7.188", + "version": "6.7.189", "license": "ISC", "dependencies": { "@artsy/to-title-case": "^1.1.0", diff --git a/package.json b/package.json index 4905f5f743..4a7f507c94 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "zotero-better-bibtex", - "version": "6.7.188", + "version": "6.7.189", "description": "Make Zotero useful for us LaTeX holdouts.", "homepage": "https://retorque.re/zotero-better-bibtex", "license": "ISC", From c6b620d87b4797a856dd00f60b993c49a0bf9de9 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Thu, 9 May 2024 21:27:02 +0200 Subject: [PATCH 171/177] querytype --- content/json-rpc.ts | 6 ++---- content/library.ts | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/content/json-rpc.ts b/content/json-rpc.ts index e17ccf6147..4fff606407 100644 --- a/content/json-rpc.ts +++ b/content/json-rpc.ts @@ -25,9 +25,7 @@ const INVALID_PARAMETERS = -32602 // Invalid method parameter(s). const INTERNAL_ERROR = -32603 // Internal JSON-RPC error. type QueryPrimitive = number | boolean | string -type Query - = Record> - | Record +type Query = Record> function getStyle(id: string): any { const style = Zotero.Styles.get(id) @@ -447,7 +445,7 @@ class NSItem { * @param libraryID ID of library to select the items from. When omitted, assume 'My Library' */ public async export(citekeys: string[], translator: string, libraryID?: string | number) { - const where : Query = { + const where: Query = { libraryID: Library.get(libraryID).libraryID, } citekeys = citekeys.map(citekey => citekey.replace('@', '')) diff --git a/content/library.ts b/content/library.ts index 29a492e7cb..dc6b2635ae 100644 --- a/content/library.ts +++ b/content/library.ts @@ -1,6 +1,6 @@ /* eslint-disable @typescript-eslint/no-unsafe-return, @typescript-eslint/explicit-module-boundary-types */ -export function get(name?: string | number): number { +export function get(name?: string | number): { name: string, libraryID: number } { if (typeof name === 'undefined') name = Zotero.Libraries.userLibraryID const num = typeof name === 'number' ? name : parseInt(name) if (!isNaN(num)) return Zotero.Libraries.get(num || Zotero.Libraries.userLibraryID) From 188b68f4182046a3514c6008d768497b808c0339 Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Thu, 9 May 2024 21:27:12 +0200 Subject: [PATCH 172/177] 6.7.190 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 772d013eec..e843972949 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "zotero-better-bibtex", - "version": "6.7.189", + "version": "6.7.190", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "zotero-better-bibtex", - "version": "6.7.189", + "version": "6.7.190", "license": "ISC", "dependencies": { "@artsy/to-title-case": "^1.1.0", diff --git a/package.json b/package.json index 4a7f507c94..607f596c30 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "zotero-better-bibtex", - "version": "6.7.189", + "version": "6.7.190", "description": "Make Zotero useful for us LaTeX holdouts.", "homepage": "https://retorque.re/zotero-better-bibtex", "license": "ISC", From 97d39d024d7c02c67f805ca0a884dbc3486e377e Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Mon, 13 May 2024 11:01:09 +0200 Subject: [PATCH 173/177] allow disabling http server --- content/cayw.ts | 3 ++- content/json-rpc.ts | 3 ++- content/pull-export.ts | 9 +++++---- submodules/babel | 2 +- submodules/biber | 2 +- submodules/translators | 2 +- submodules/zotero | 2 +- 7 files changed, 13 insertions(+), 10 deletions(-) diff --git a/content/cayw.ts b/content/cayw.ts index 25b46aa437..cc131bd944 100644 --- a/content/cayw.ts +++ b/content/cayw.ts @@ -10,6 +10,7 @@ import { TeXstudio } from './tex-studio' import * as escape from './escape' import { flash } from './flash' import { log } from './logger' +import { Server } from './server' /* eslint-disable max-classes-per-file */ @@ -398,7 +399,7 @@ function getStyle(id): { url: string } { } } -Zotero.Server.Endpoints['/better-bibtex/cayw'] = class { +Server.Endpoints['/better-bibtex/cayw'] = class { public supportedMethods = ['GET'] public OK = 200 public SERVER_ERROR = 500 diff --git a/content/json-rpc.ts b/content/json-rpc.ts index 4fff606407..71f69ea1d5 100644 --- a/content/json-rpc.ts +++ b/content/json-rpc.ts @@ -8,6 +8,7 @@ import { get as getCollection } from './collection' import * as Library from './library' import { log } from './logger' import { Preference } from './prefs' +import { Server } from './server' import methods from '../gen/api/json-rpc.json' import { validator, noncoercing } from './ajv' @@ -702,7 +703,7 @@ const api = new class API { } } -Zotero.Server.Endpoints['/better-bibtex/json-rpc'] = class { +Server.Endpoints['/better-bibtex/json-rpc'] = class { public supportedMethods = ['GET', 'POST'] public supportedDataTypes = ['application/json'] public permitBookmarklet = false diff --git a/content/pull-export.ts b/content/pull-export.ts index 5a2e69a49d..9abcc6f1a6 100644 --- a/content/pull-export.ts +++ b/content/pull-export.ts @@ -10,6 +10,7 @@ import { get as getCollection } from './collection' import { get as getLibrary } from './library' import { getItemsAsync } from './get-items-async' import { fromPairs } from './object' +import { Server } from './server' function displayOptions(request) { const isTrue = new Set([ 'y', 'yes', 'true' ]) @@ -22,7 +23,7 @@ function displayOptions(request) { } } -Zotero.Server.Endpoints['/better-bibtex/export/collection'] = Zotero.Server.Endpoints['/better-bibtex/collection'] = class { +Server.Endpoints['/better-bibtex/export/collection'] = Server.Endpoints['/better-bibtex/collection'] = class { public supportedMethods = ['GET'] public async init(request) { @@ -49,7 +50,7 @@ Zotero.Server.Endpoints['/better-bibtex/export/collection'] = Zotero.Server.Endp } } -Zotero.Server.Endpoints['/better-bibtex/export/library'] = Zotero.Server.Endpoints['/better-bibtex/library'] = class { +Server.Endpoints['/better-bibtex/export/library'] = Server.Endpoints['/better-bibtex/library'] = class { public supportedMethods = ['GET'] public async init(request) { @@ -76,7 +77,7 @@ Zotero.Server.Endpoints['/better-bibtex/export/library'] = Zotero.Server.Endpoin } } -Zotero.Server.Endpoints['/better-bibtex/export/selected'] = Zotero.Server.Endpoints['/better-bibtex/select'] = class { +Server.Endpoints['/better-bibtex/export/selected'] = Server.Endpoints['/better-bibtex/select'] = class { public supportedMethods = ['GET'] public async init(request) { @@ -109,7 +110,7 @@ Zotero.Server.Endpoints['/better-bibtex/export/selected'] = Zotero.Server.Endpoi function isSet(v) { return v ? 1 : 0 } -Zotero.Server.Endpoints['/better-bibtex/export/item'] = class { +Server.Endpoints['/better-bibtex/export/item'] = class { public supportedMethods = ['GET'] public async init(request) { diff --git a/submodules/babel b/submodules/babel index d4d55826cd..3e19161863 160000 --- a/submodules/babel +++ b/submodules/babel @@ -1 +1 @@ -Subproject commit d4d55826cd264220b7a8d92b453748564affea54 +Subproject commit 3e19161863841cbd7909374d5b1351df06392b1d diff --git a/submodules/biber b/submodules/biber index 48314c0d33..8743daaa37 160000 --- a/submodules/biber +++ b/submodules/biber @@ -1 +1 @@ -Subproject commit 48314c0d336a3e883d701fe9a41ff5a99179b71c +Subproject commit 8743daaa37e148103f33bb7579773c2b44e5f68d diff --git a/submodules/translators b/submodules/translators index d0e7827d06..c46011097e 160000 --- a/submodules/translators +++ b/submodules/translators @@ -1 +1 @@ -Subproject commit d0e7827d061329d9830675ef9effafe590f0b06d +Subproject commit c46011097e3c599a295d1846bf6beefc89c05647 diff --git a/submodules/zotero b/submodules/zotero index 85f58cc97d..31616af2af 160000 --- a/submodules/zotero +++ b/submodules/zotero @@ -1 +1 @@ -Subproject commit 85f58cc97d2b73af7777c2d6e632dc7b2631531c +Subproject commit 31616af2af78ca0cdbfcf02539675d18bea4be8d From b7f444f15261960d3bc9915040c4bb1228c8ccfb Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Mon, 13 May 2024 11:01:14 +0200 Subject: [PATCH 174/177] 6.7.191 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index e843972949..4b148df764 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "zotero-better-bibtex", - "version": "6.7.190", + "version": "6.7.191", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "zotero-better-bibtex", - "version": "6.7.190", + "version": "6.7.191", "license": "ISC", "dependencies": { "@artsy/to-title-case": "^1.1.0", diff --git a/package.json b/package.json index 607f596c30..691b33096d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "zotero-better-bibtex", - "version": "6.7.190", + "version": "6.7.191", "description": "Make Zotero useful for us LaTeX holdouts.", "homepage": "https://retorque.re/zotero-better-bibtex", "license": "ISC", From 00396251edc8e47463270925b0de48488a87edcc Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Mon, 13 May 2024 11:03:59 +0200 Subject: [PATCH 175/177] server --- content/server.ts | 1 + 1 file changed, 1 insertion(+) create mode 100644 content/server.ts diff --git a/content/server.ts b/content/server.ts new file mode 100644 index 0000000000..f1b756957c --- /dev/null +++ b/content/server.ts @@ -0,0 +1 @@ +export const Server = Zotero.Prefs.get('translators.better-bibtex.disableHTTP') ? { Endpoints: {} } : Zotero.Server From 5612b92a247fee389f4dceff299de36f8a8d5b5c Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Mon, 13 May 2024 11:04:01 +0200 Subject: [PATCH 176/177] 6.7.192 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4b148df764..215a39678f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "zotero-better-bibtex", - "version": "6.7.191", + "version": "6.7.192", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "zotero-better-bibtex", - "version": "6.7.191", + "version": "6.7.192", "license": "ISC", "dependencies": { "@artsy/to-title-case": "^1.1.0", diff --git a/package.json b/package.json index 691b33096d..eef08bb626 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "zotero-better-bibtex", - "version": "6.7.191", + "version": "6.7.192", "description": "Make Zotero useful for us LaTeX holdouts.", "homepage": "https://retorque.re/zotero-better-bibtex", "license": "ISC", From 06e739713985616a7e701ca5e04d3fffde853cca Mon Sep 17 00:00:00 2001 From: Emiliano Heyns Date: Mon, 13 May 2024 22:06:13 +0200 Subject: [PATCH 177/177] prep for estree-toolkit converter --- package-lock.json | 10 ++++++++++ package.json | 1 + setup/extract-apis.ts | 10 +++++++++- 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 215a39678f..adbf6baa71 100644 --- a/package-lock.json +++ b/package-lock.json @@ -107,6 +107,7 @@ "kuroshiro-analyzer-kuromoji": "^1.1.0", "lodash.template": "^4.5.0", "lokijs": "^1.5.12", + "meriyah": "^4.4.2", "moment": "^2.30.1", "node-eta": "^0.9.0", "npm-run-all": "^4.1.5", @@ -11213,6 +11214,15 @@ "node": ">= 8" } }, + "node_modules/meriyah": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/meriyah/-/meriyah-4.4.2.tgz", + "integrity": "sha512-fENZIbs4tscI3IGRGtPrCoW4H4oGzVQrQCVCGRv+92kFXKkvxr52ZNR684ICvDC/UBWg9ioGc2X6pMnWOtRYwA==", + "dev": true, + "engines": { + "node": ">=10.4.0" + } + }, "node_modules/micromark": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", diff --git a/package.json b/package.json index eef08bb626..5a00f88587 100644 --- a/package.json +++ b/package.json @@ -161,6 +161,7 @@ "kuroshiro-analyzer-kuromoji": "^1.1.0", "lodash.template": "^4.5.0", "lokijs": "^1.5.12", + "meriyah": "^4.4.2", "moment": "^2.30.1", "node-eta": "^0.9.0", "npm-run-all": "^4.1.5", diff --git a/setup/extract-apis.ts b/setup/extract-apis.ts index 33169cee76..fa42b436d7 100755 --- a/setup/extract-apis.ts +++ b/setup/extract-apis.ts @@ -6,6 +6,7 @@ import * as fs from 'fs' import stringify from 'fast-safe-stringify' import _ from 'lodash' import jsesc from 'jsesc' +import { parseScript } from 'meriyah' import Showdown from 'showdown' const showdown = new Showdown.Converter() @@ -24,7 +25,7 @@ class FormatterAPI { const key = name.toLowerCase() if (this.signature[key]) throw new Error(`duplicate ${kind} ${key}`) - this.signature[name.toLowerCase()] = _.cloneDeep({ + this.signature[key] = _.cloneDeep({ name, parameters: method.parameters.map(p => p.name), defaults: method.parameters.map(p => p.default), @@ -32,6 +33,13 @@ class FormatterAPI { schema: method.schema, }) if (!this.signature[key].rest) delete this.signature[key].rest + const defaults = parseScript(jsesc(this.signature[key].defaults)).body[0] + if (defaults.type === 'ExpressionStatement' && defaults.expression.type === 'ArrayExpression') { + this.signature[key].ast = defaults.expression.elements + } + else { + throw new Error(jsesc(this.signature[key].defaults)) + } const description = method.parameters.find(param => param.doc) let params = method.parameters.map(p => {