darkreader 4.9.86 → 4.9.89

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +53 -23
  2. package/darkreader.js +70 -37
  3. package/package.json +25 -20
package/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  <p align="center"><a href="https://darkreader.org" target="_blank" rel="noreferrer noopener"><img width="250" alt="Dark Reader's mascot" src="https://raw.githubusercontent.com/darkreader/darkreader.github.io/master/images/darkreader-mascot.svg"></a></p>
2
2
  <p align="center">Dark Reader <strong>analyzes</strong> web pages and aims to <strong>reduce eyestrain</strong> while browsing the web.</p>
3
3
  <br/>
4
- <p align="center"><a rel="noreferrer noopener" href="https://chrome.google.com/webstore/detail/dark-reader/eimadpbcbfnmbkopoojfekhnkhdbieeh/"><img alt="Chrome Web Store" src="https://img.shields.io/badge/Chrome-141e24.svg?&style=for-the-badge&logo=google-chrome&logoColor=white"></a> <a rel="noreferrer noopener" href="https://addons.mozilla.org/firefox/addon/darkreader/"><img alt="Firefox Add-ons" src="https://img.shields.io/badge/Firefox-141e24.svg?&style=for-the-badge&logo=firefox-browser&logoColor=white"></a> <a rel="noreferrer noopener" href="https://darkreader.org/safari/"><img alt="Apple App Store" src="https://img.shields.io/badge/Safari-141e24.svg?&style=for-the-badge&logo=safari&logoColor=white"></a> <a rel="noreferrer noopener" href="https://microsoftedge.microsoft.com/addons/detail/dark-reader/ifoakfbpdcdoeenechcleahebpibofpc/"><img alt="Edge Addons" src="https://img.shields.io/badge/Edge-141e24.svg?&style=for-the-badge&logo=microsoft-edge&logoColor=white"></a> <a el="noreferrer noopener" href="https://addons.thunderbird.net/thunderbird/addon/darkreader"><img alt="Thunderbird" src="https://img.shields.io/badge/Thunderbird-141e24.svg?&style=for-the-badge&logo=thunderbird&logoColor=white"></a>
4
+ <p align="center"><a rel="noreferrer noopener" href="https://chromewebstore.google.com/detail/dark-reader/eimadpbcbfnmbkopoojfekhnkhdbieeh"><img alt="Chrome Web Store" src="https://img.shields.io/badge/Chrome-141e24.svg?&style=for-the-badge&logo=google-chrome&logoColor=white"></a> <a rel="noreferrer noopener" href="https://addons.mozilla.org/firefox/addon/darkreader/"><img alt="Firefox Add-ons" src="https://img.shields.io/badge/Firefox-141e24.svg?&style=for-the-badge&logo=firefox-browser&logoColor=white"></a> <a rel="noreferrer noopener" href="https://darkreader.org/safari/"><img alt="Apple App Store" src="https://img.shields.io/badge/Safari-141e24.svg?&style=for-the-badge&logo=safari&logoColor=white"></a> <a rel="noreferrer noopener" href="https://microsoftedge.microsoft.com/addons/detail/dark-reader/ifoakfbpdcdoeenechcleahebpibofpc/"><img alt="Edge Addons" src="https://img.shields.io/badge/Edge-141e24.svg?&style=for-the-badge&logo=microsoft-edge&logoColor=white"></a> <a el="noreferrer noopener" href="https://addons.thunderbird.net/thunderbird/addon/darkreader"><img alt="Thunderbird" src="https://img.shields.io/badge/Thunderbird-141e24.svg?&style=for-the-badge&logo=thunderbird&logoColor=white"></a>
5
5
 
6
6
  <h2 align="center">Dark Reader</h2>
7
7
  <br/>
@@ -50,9 +50,9 @@ Dark Reader repository contains these digital signatures and you can add them to
50
50
  npm run build -- --firefox --version=4.9.63
51
51
  ```
52
52
 
53
- Please note that only Firefox Add-ons store signatures are present in the repositiry right now. Also, due to NodeJS and TypeScript version compatibility, one might have to first check out the old revision (commit), then build the extension files, then check out the recent commit and create the bundle (by running only `signature` and `zip` steps).
53
+ Please note that only Firefox Add-ons store signatures are present in the repository right now. Also, due to NodeJS and TypeScript version compatibility, one might have to first check out the old revision (commit), then build the extension files, then check out the recent commit and create the bundle (by running only `signature` and `zip` steps).
54
54
 
55
- ## Using Dark Reader for a website
55
+ ## Using Dark Reader on a website
56
56
 
57
57
  You can use Dark Reader to enable dark mode on your website!
58
58
 
@@ -117,46 +117,76 @@ Be aware that Dark Reader will add the `chrome` object onto the `window` object.
117
117
 
118
118
  ## Site fixes
119
119
 
120
- Automatically syncing the site fixes to every Dark Reader user was disabled because the GitHub team does not allow using GitHub as a CDN. The storage of these files would be expensive, and making requests to other resources would look suspicious. Each new release of Dark Reader will include these changes.
120
+ Automatically syncing the site fixes for every Dark Reader user was disabled because the GitHub team does not allow using GitHub as a content delivery network (CDN). The storage of these files would be expensive, and making requests to other resources would look suspicious. Each new release of Dark Reader will include the new changes.
121
121
 
122
- However, this can be enabled using the following steps:
122
+ However, this can be manually enabled with the following steps:
123
123
 
124
- - Click on the Dark Reader icon.
125
- - Click on the `Dev tools` button (in the bottom-right corner).
126
- - Click on the `Preview new design` button.
127
- - Enable the `Synchronize site fixes` setting under `Settings` -> `Manage settings`.
124
+ 1. Click on the Dark Reader extension icon.
125
+ 2. Click on the `Dev tools` button (in the bottom-right corner).
126
+ 3. Go to `Advanced` and click on the `Preview new design` button.
127
+ 4. Close the developer tools window and click on the Dark Reader extension icon again.
128
+ 5. Go to `Settings` -> `Advanced` and enable the `Synchronize sites fixes` setting.
128
129
 
129
130
  To force a synchronization of the sites fixes (when the corresponding setting is enabled), perform the following steps:
130
131
 
131
- - Click on the Dark Reader icon.
132
- - Click on the `Dev tools` button (in the bottom-right corner).
133
- - Click on the `Reset` button. This will remove any custom site fixes you may have.
132
+ 1. Click on the Dark Reader extension icon.
133
+ 2. Go to `Settings` -> `Advanced` -> `Dev tools`.
134
+ 3. For each "Editor" section, click on `Reset changes`, confirm with `OK`, and then click on `Apply`. Afterwards, close the developer tools window and reload the desired page(s).
134
135
 
135
- ## Enable Dark Reader for restricted websites on Firefox
136
+ ## Enable Dark Reader on restricted pages on Mozilla Firefox
136
137
 
137
138
  By default, Dark Reader does not work on some websites due to **security restrictions** enforced by Mozilla.
138
139
 
139
- The following instructions will guide you on how to bypass those restrictions.
140
+ The following instructions will guide you on how to disable those restrictions.
140
141
 
141
142
  **Proceed with caution. This exposes you to a security risk if you do not know what you are doing.**
142
143
 
144
+ **Be sure that you do not have any suspicious or malicious-looking extension installed before proceeding.**
145
+
143
146
  **These settings will apply to all extensions, and not just Dark Reader.**
144
147
 
145
148
  Step 1: change Dark Reader's settings.
146
149
 
147
- - Click on the Dark Reader icon.
148
- - Click on the `Dev tools` button (in the bottom-right corner).
149
- - Click on the `Preview new design button`.
150
- - Enable the `Enable on restricted pages` setting under `Settings` -> `Advanced`.
150
+ 1. Click on the Dark Reader extension icon.
151
+ 2. Click on the `Dev tools` button (in the bottom-right corner).
152
+ 3. Go to `Advanced` and click on the `Preview new design` button.
153
+ 4. Close the developer tools window and click on the Dark Reader extension icon again.
154
+ 5. Go to `Settings` -> `Advanced` and enable the `Enable on restricted pages` setting.
151
155
 
152
156
  Step 2: change Firefox's settings.
153
157
 
154
158
  - Type `about:config` in the address bar and press Enter.
155
- A warning page may appear. Click `Accept the Risk and Continue` to proceed.
156
- - Search for and set `extensions.webextensions.restrictedDomains` to an empty value.
157
- - Create `extensions.webextensions.addons-restricted-domains@mozilla.com.disabled` with `boolean` as type and set its value to `true`.
158
- - Set `privacy.resistFingerprinting.block_mozAddonManager` to `true`.
159
- - Restart Firefox.
159
+ - A warning page may appear. Click `Accept the Risk and Continue` to proceed.
160
+ - Search for and set `extensions.webextensions.restrictedDomains` to an empty value (if the preference does not exist, create with it `String` as the type).
161
+ - Set `privacy.resistFingerprinting.block_mozAddonManager` to `true` (if the preference does not exist, create with it `Boolean` as the type).
162
+
163
+ After changing the necessary settings for both Dark Reader and Firefox, reload the desired page(s).
164
+
165
+ **If you had previously changed any of the following preferences, please reset them to their default values as they are only related to security and are not necessary for Dark Reader to work on restricted websites.**
166
+ To reset them, click on the reset (or delete icon, if present) icon at the most-right corner of the preference line in `about:config`.
167
+ - `extensions.webextensions.addons-restricted-domains@mozilla.com.disabled`
168
+ - `extensions.quarantinedDomains.enabled`
169
+ - `extensions.quarantinedDomains.list`
170
+
171
+ ### Clarification about quarantined domains ("Run on sites with restrictions" option)
172
+ <details><summary>Quarantined domains and Dark Reader — an explanation</summary>
173
+
174
+ The option "Run on sites with restrictions", present in some extensions, is only related to quarantined domains, and is not needed for Dark Reader to work on restricted websites.
175
+
176
+ More information about quarantined domains: [Why are some add-ons not allowed on sites restricted by Mozilla?](https://support.mozilla.org/en-US/kb/quarantined-domains)
177
+
178
+ For Dark Reader, the option is not shown because Dark Reader is a [Recommended](https://support.mozilla.org/en-US/kb/recommended-extensions-program) extension by Mozilla.
179
+
180
+ Due to it being a Recommended extension, it means it meets the "highest standards of security, functionality, and user experience". The quarantined domains are only related to security, and because Dark Reader is considered secure by Mozilla, that option is not shown, meaning **it will always run even on quarantined domains**.
181
+
182
+ [From Firefox's source code:](https://searchfox.org/mozilla-central/source/toolkit/components/extensions/Extension.sys.mjs#2937-2938)
183
+
184
+ ```
185
+ // Privileged extensions and any extensions with a recommendation state are
186
+ // exempt from the quarantined domains.
187
+ ```
188
+
189
+ </details>
160
190
 
161
191
  <h2 align="center">Contributors</h2>
162
192
  <br/>
package/darkreader.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Dark Reader v4.9.86
2
+ * Dark Reader v4.9.89
3
3
  * https://darkreader.org/
4
4
  */
5
5
 
@@ -389,6 +389,7 @@
389
389
  longitude: null
390
390
  },
391
391
  previewNewDesign: false,
392
+ previewNewestDesign: false,
392
393
  enableForPDF: true,
393
394
  enableForProtectedPages: false,
394
395
  enableContextMenus: false,
@@ -1935,12 +1936,6 @@
1935
1936
  fnCache.set(id, color);
1936
1937
  return color;
1937
1938
  }
1938
- function noopHSL(hsl) {
1939
- return hsl;
1940
- }
1941
- function modifyColor(rgb, theme) {
1942
- return modifyColorWithCache(rgb, theme, noopHSL);
1943
- }
1944
1939
  function modifyLightSchemeColor(rgb, theme) {
1945
1940
  const poleBg = getBgPole(theme);
1946
1941
  const poleFg = getFgPole(theme);
@@ -2996,6 +2991,9 @@
2996
2991
  isCancelled
2997
2992
  ) {
2998
2993
  try {
2994
+ if (shouldIgnoreImage(rule.selectorText, ignoreImageSelectors)) {
2995
+ return value;
2996
+ }
2999
2997
  const gradients = parseGradient(value);
3000
2998
  const urls = getMatches(cssURLRegex, value);
3001
2999
  if (urls.length === 0 && gradients.length === 0) {
@@ -3052,11 +3050,6 @@
3052
3050
  };
3053
3051
  };
3054
3052
  const getURLModifier = (urlValue) => {
3055
- if (
3056
- shouldIgnoreImage(rule.selectorText, ignoreImageSelectors)
3057
- ) {
3058
- return null;
3059
- }
3060
3053
  let url = getCSSURLValue(urlValue);
3061
3054
  const isURLEmpty = url.length === 0;
3062
3055
  const {parentStyleSheet} = rule;
@@ -3646,7 +3639,7 @@
3646
3639
  const modified = modify();
3647
3640
  if (unknownVars.size > 0) {
3648
3641
  const isFallbackResolved = modified.match(
3649
- /^var\(.*?, var\(--darkreader-bg--.*\)\)$/
3642
+ /^var\(.*?, (var\(--darkreader-bg--.*\))|(#[0-9A-Fa-f]+)|([a-z]+)|(rgba?\(.+\))|(hsla?\(.+\))\)$/
3650
3643
  );
3651
3644
  if (isFallbackResolved) {
3652
3645
  return modified;
@@ -4489,8 +4482,8 @@
4489
4482
  }
4490
4483
  const isSVGElement = element instanceof SVGElement;
4491
4484
  const svg = isSVGElement
4492
- ? element.ownerSVGElement ??
4493
- (element instanceof SVGSVGElement ? element : null)
4485
+ ? (element.ownerSVGElement ??
4486
+ (element instanceof SVGSVGElement ? element : null))
4494
4487
  : null;
4495
4488
  if (isSVGElement && theme.mode === 1 && svg) {
4496
4489
  if (svgInversionCache.has(svg)) {
@@ -6347,7 +6340,19 @@
6347
6340
  document.addEventListener(type, listener, options);
6348
6341
  cleaners.push(() => document.removeEventListener(type, listener));
6349
6342
  }
6343
+ function disableConflictingPlugins() {
6344
+ const disableWPDarkMode = () => {
6345
+ if (window?.WPDarkMode?.deactivate) {
6346
+ window.WPDarkMode.deactivate();
6347
+ }
6348
+ };
6349
+ disableWPDarkMode();
6350
+ }
6350
6351
  documentEventListener("__darkreader__cleanUp", cleanUp);
6352
+ documentEventListener(
6353
+ "__darkreader__disableConflictingPlugins",
6354
+ disableConflictingPlugins
6355
+ );
6351
6356
  function overrideProperty(cls, prop, overrides) {
6352
6357
  const proto = cls.prototype;
6353
6358
  const oldDescriptor = Object.getOwnPropertyDescriptor(proto, prop);
@@ -6878,29 +6883,18 @@
6878
6883
  setupNodePositionWatcher(overrideStyle, "override");
6879
6884
  const variableStyle = createOrUpdateStyle("darkreader--variables");
6880
6885
  const selectionColors = getSelectionColor(theme);
6881
- const {
6882
- darkSchemeBackgroundColor,
6883
- darkSchemeTextColor,
6884
- lightSchemeBackgroundColor,
6885
- lightSchemeTextColor,
6886
- mode
6887
- } = theme;
6888
- let schemeBackgroundColor =
6889
- mode === 0 ? lightSchemeBackgroundColor : darkSchemeBackgroundColor;
6890
- let schemeTextColor =
6891
- mode === 0 ? lightSchemeTextColor : darkSchemeTextColor;
6892
- schemeBackgroundColor = modifyBackgroundColor(
6893
- parseColorWithCache(schemeBackgroundColor),
6886
+ const neutralBackgroundColor = modifyBackgroundColor(
6887
+ parseColorWithCache("#ffffff"),
6894
6888
  theme
6895
6889
  );
6896
- schemeTextColor = modifyForegroundColor(
6897
- parseColorWithCache(schemeTextColor),
6890
+ const neutralTextColor = modifyForegroundColor(
6891
+ parseColorWithCache("#000000"),
6898
6892
  theme
6899
6893
  );
6900
6894
  variableStyle.textContent = [
6901
6895
  `:root {`,
6902
- ` --darkreader-neutral-background: ${schemeBackgroundColor};`,
6903
- ` --darkreader-neutral-text: ${schemeTextColor};`,
6896
+ ` --darkreader-neutral-background: ${neutralBackgroundColor};`,
6897
+ ` --darkreader-neutral-text: ${neutralTextColor};`,
6904
6898
  ` --darkreader-selection-background: ${selectionColors.backgroundColorSelection};`,
6905
6899
  ` --darkreader-selection-text: ${selectionColors.foregroundColorSelection};`,
6906
6900
  `}`
@@ -6987,7 +6981,11 @@
6987
6981
  return $cssText.replace(/\${(.+?)}/g, (_, $color) => {
6988
6982
  const color = parseColorWithCache($color);
6989
6983
  if (color) {
6990
- return modifyColor(color, theme);
6984
+ const lightness = getSRGBLightness(color.r, color.g, color.b);
6985
+ if (lightness > 0.5) {
6986
+ return modifyBackgroundColor(color, theme);
6987
+ }
6988
+ return modifyForegroundColor(color, theme);
6991
6989
  }
6992
6990
  return $color;
6993
6991
  });
@@ -7326,10 +7324,10 @@
7326
7324
  metaElement.content = INSTANCE_ID;
7327
7325
  document.head.appendChild(metaElement);
7328
7326
  }
7327
+ function isDRLocked() {
7328
+ return document.querySelector('meta[name="darkreader-lock"]') != null;
7329
+ }
7329
7330
  function isAnotherDarkReaderInstanceActive() {
7330
- if (document.querySelector('meta[name="darkreader-lock"]')) {
7331
- return true;
7332
- }
7333
7331
  const meta = document.querySelector('meta[name="darkreader"]');
7334
7332
  if (meta) {
7335
7333
  if (meta.content !== INSTANCE_ID) {
@@ -7359,6 +7357,38 @@
7359
7357
  success();
7360
7358
  });
7361
7359
  }
7360
+ function disableConflictingPlugins() {
7361
+ if (document.documentElement.hasAttribute("data-wp-dark-mode-preset")) {
7362
+ const disableWPDarkMode = () => {
7363
+ document.dispatchEvent(
7364
+ new CustomEvent("__darkreader__disableConflictingPlugins")
7365
+ );
7366
+ document.documentElement.classList.remove(
7367
+ "wp-dark-mode-active"
7368
+ );
7369
+ document.documentElement.removeAttribute(
7370
+ "data-wp-dark-mode-active"
7371
+ );
7372
+ };
7373
+ disableWPDarkMode();
7374
+ const observer = new MutationObserver(() => {
7375
+ if (
7376
+ document.documentElement.classList.contains(
7377
+ "wp-dark-mode-active"
7378
+ ) ||
7379
+ document.documentElement.hasAttribute(
7380
+ "data-wp-dark-mode-active"
7381
+ )
7382
+ ) {
7383
+ disableWPDarkMode();
7384
+ }
7385
+ });
7386
+ observer.observe(document.documentElement, {
7387
+ attributes: true,
7388
+ attributeFilter: ["class", "data-wp-dark-mode-active"]
7389
+ });
7390
+ }
7391
+ }
7362
7392
  function createOrUpdateDynamicThemeInternal(
7363
7393
  themeConfig,
7364
7394
  dynamicThemeFixes,
@@ -7387,6 +7417,7 @@
7387
7417
  isIFrame$1 = iframe;
7388
7418
  const ready = () => {
7389
7419
  const success = () => {
7420
+ disableConflictingPlugins();
7390
7421
  document.documentElement.setAttribute(
7391
7422
  "data-darkreader-mode",
7392
7423
  "dynamic"
@@ -7400,7 +7431,9 @@
7400
7431
  const failure = () => {
7401
7432
  removeDynamicTheme();
7402
7433
  };
7403
- if (isAnotherDarkReaderInstanceActive()) {
7434
+ if (isDRLocked()) {
7435
+ removeNode(document.querySelector(".darkreader--fallback"));
7436
+ } else if (isAnotherDarkReaderInstanceActive()) {
7404
7437
  interceptOldScript({
7405
7438
  success,
7406
7439
  failure
package/package.json CHANGED
@@ -1,18 +1,21 @@
1
1
  {
2
2
  "name": "darkreader",
3
- "version": "4.9.86",
3
+ "version": "4.9.89",
4
4
  "description": "Dark mode for every website",
5
5
  "scripts": {
6
6
  "api": "node --max-old-space-size=3072 tasks/cli.js build --api",
7
7
  "build": "node --max-old-space-size=3072 tasks/cli.js build --release",
8
8
  "build:all": "node --max-old-space-size=3072 tasks/cli.js build --debug --release --api",
9
+ "build:plus": "node --max-old-space-size=3072 tasks/cli.js build --plus --release",
9
10
  "code-style": "npm run lint",
10
11
  "debug": "node --max-old-space-size=3072 tasks/cli.js build --debug",
11
12
  "debug:watch": "node --max-old-space-size=3072 tasks/cli.js build --debug --watch --chrome --firefox",
12
13
  "debug:watch:mv3": "node --max-old-space-size=3072 tasks/cli.js build --debug --watch --chrome-mv3",
14
+ "debug:watch:plus": "node --max-old-space-size=3072 tasks/cli.js build --debug --watch --plus --chrome",
13
15
  "dependencies:upgrade": "node tasks/dependencies.js",
14
16
  "lint": "eslint --ignore-pattern '!.eslint-plugin-local.js' -- 'src/**/*.ts' 'src/**/*.tsx' 'tasks/**/*.js' 'tests/[!coverage]**/*.js' 'tests/**/*.ts' '.eslintrc.js' 'index.d.ts'",
15
17
  "lint:bundle": "(node ./tasks/check-exists.js ./build/debug/chrome || node tasks/build.js --debug --api --chrome) && eslint -- 'build/debug/chrome/**/*.js' 'darkreader.js'",
18
+ "plus-link": "cd src && ln -s ../../darkreader-plus plus",
16
19
  "prepublishOnly": "npm test && npm run api",
17
20
  "release": "npm test && npm run lint && node tasks/cli.js build --release",
18
21
  "test": "npm run test:unit",
@@ -55,30 +58,33 @@
55
58
  "type": "opencollective",
56
59
  "url": "https://opencollective.com/darkreader/donate"
57
60
  },
61
+ "dependencies": {
62
+ "malevic": "0.20.2"
63
+ },
58
64
  "devDependencies": {
59
65
  "@rollup/plugin-node-resolve": "15.2.3",
60
- "@rollup/plugin-replace": "5.0.5",
66
+ "@rollup/plugin-replace": "5.0.7",
61
67
  "@rollup/plugin-typescript": "11.1.6",
62
- "@types/chrome": "0.0.268",
68
+ "@types/chrome": "0.0.269",
63
69
  "@types/eslint": "8.56.10",
64
70
  "@types/jasmine": "5.1.4",
65
71
  "@types/jest": "29.5.12",
66
72
  "@types/karma": "6.3.8",
67
73
  "@types/karma-coverage": "2.0.3",
68
- "@types/node": "20.12.12",
69
- "@types/ws": "8.5.10",
70
- "@typescript-eslint/eslint-plugin": "7.9.0",
71
- "@typescript-eslint/parser": "7.9.0",
74
+ "@types/node": "22.2.0",
75
+ "@types/ws": "8.5.12",
76
+ "@typescript-eslint/eslint-plugin": "7.16.0",
77
+ "@typescript-eslint/parser": "7.16.0",
72
78
  "chokidar": "3.6.0",
73
79
  "eslint": "8.57.0",
74
- "eslint-plugin-compat": "4.2.0",
80
+ "eslint-plugin-compat": "5.0.0",
75
81
  "eslint-plugin-import": "2.29.1",
76
82
  "eslint-plugin-local": "4.2.2",
77
- "globby": "14.0.1",
78
- "jasmine-core": "5.1.2",
83
+ "globby": "14.0.2",
84
+ "jasmine-core": "5.2.0",
79
85
  "jest": "29.7.0",
80
86
  "jest-extended": "4.0.2",
81
- "karma": "6.4.3",
87
+ "karma": "6.4.4",
82
88
  "karma-chrome-launcher": "3.2.0",
83
89
  "karma-coverage": "2.2.1",
84
90
  "karma-firefox-launcher": "2.1.3",
@@ -87,16 +93,15 @@
87
93
  "karma-safari-launcher": "1.0.0",
88
94
  "karma-spec-reporter": "0.0.36",
89
95
  "less": "4.2.0",
90
- "malevic": "0.20.1",
91
- "prettier": "3.2.5",
92
- "puppeteer-core": "22.8.2",
93
- "rollup": "4.17.2",
96
+ "prettier": "3.3.3",
97
+ "puppeteer-core": "23.0.2",
98
+ "rollup": "4.20.0",
94
99
  "rollup-plugin-istanbul": "5.0.0",
95
- "ts-jest": "29.1.2",
96
- "tslib": "2.6.2",
97
- "typescript": "5.4.5",
98
- "web-ext": "7.11.0",
99
- "ws": "8.17.0",
100
+ "ts-jest": "29.2.4",
101
+ "tslib": "2.6.3",
102
+ "typescript": "5.5.4",
103
+ "web-ext": "8.2.0",
104
+ "ws": "8.18.0",
100
105
  "yazl": "2.5.1"
101
106
  }
102
107
  }