@muil/templates-renderer
Advanced tools
Comparing version 1.5.4 to 2.0.0
{ | ||
"name": "@muil/templates-renderer", | ||
"version": "1.5.4", | ||
"version": "2.0.0", | ||
"license": "MIT", | ||
@@ -17,23 +17,20 @@ "main": "src/index.js", | ||
"@nestjs/common": "^7.5.3", | ||
"@sparticuz/chromium": "^123.0.1", | ||
"he": "^1.2.0", | ||
"html-minifier": "^4.0.0", | ||
"juice": "^7.0.0", | ||
"puppeteer-core": "^14.0.0", | ||
"puppeteer-core": "^22.6.1", | ||
"react": "^18.3.1", | ||
"react-dom": "^18.3.1", | ||
"reflect-metadata": "^0.1.13", | ||
"rxjs": "^6.5.4", | ||
"uuid": "^8.3.1", | ||
"vm2": "3.9.19" | ||
"styled-components": "^6.1.11", | ||
"uuid": "^8.3.1" | ||
}, | ||
"peerDependencies": { | ||
"react": "^17.0.1", | ||
"react-dom": "^17.0.1", | ||
"styled-components": "^5.2.0" | ||
}, | ||
"devDependencies": { | ||
"@types/he": "^1.1.2", | ||
"@types/html-minifier": "^4.0.0", | ||
"@types/puppeteer-core": "^5.4.0", | ||
"@types/require-from-string": "^1.2.0" | ||
}, | ||
"gitHead": "44c1d31698cb6988b295e7b5c660b62f4e173338" | ||
"gitHead": "eaccfeb02fc6c121d295ee9533b0315be0f1aa45" | ||
} |
@@ -1,2 +0,2 @@ | ||
declare type Options = { | ||
type Options = { | ||
css?: string; | ||
@@ -3,0 +3,0 @@ styles?: string; |
/// <reference types="node" /> | ||
import puppeteer from 'puppeteer-core'; | ||
import * as puppeteer from 'puppeteer-core'; | ||
export declare const generatePdf: (html: string, format?: puppeteer.PaperFormat, orientation?: 'portrait' | 'landscape') => Promise<Buffer>; | ||
export declare const generatePng: (html: string) => Promise<string | Buffer>; | ||
export declare const generatePng: (html: string) => Promise<Buffer>; |
"use strict"; | ||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | ||
if (k2 === undefined) k2 = k; | ||
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); | ||
var desc = Object.getOwnPropertyDescriptor(m, k); | ||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { | ||
desc = { enumerable: true, get: function() { return m[k]; } }; | ||
} | ||
Object.defineProperty(o, k2, desc); | ||
}) : (function(o, m, k, k2) { | ||
@@ -26,4 +30,4 @@ if (k2 === undefined) k2 = k; | ||
exports.generatePng = exports.generatePdf = void 0; | ||
const fs = __importStar(require("fs")); | ||
const puppeteer_core_1 = __importDefault(require("puppeteer-core")); | ||
const chromium_1 = __importDefault(require("@sparticuz/chromium")); | ||
const puppeteer = __importStar(require("puppeteer-core")); | ||
const pageSize = { | ||
@@ -42,28 +46,22 @@ a0: { height: '118.9cm', width: '84.1cm' }, | ||
}; | ||
let executablePath = '/usr/bin/chromium-browser'; | ||
let product = 'chrome'; | ||
if (process.platform === 'win32') { | ||
if (fs.existsSync('C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe')) { | ||
executablePath = 'C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe'; | ||
const getBrowser = async () => { | ||
const isProd = process.env.NODE_ENV === 'production'; | ||
let browser; | ||
if (isProd) { | ||
browser = await puppeteer.launch({ | ||
args: chromium_1.default.args, | ||
defaultViewport: chromium_1.default.defaultViewport, | ||
executablePath: await chromium_1.default.executablePath(), | ||
ignoreHTTPSErrors: true, | ||
}); | ||
} | ||
else if (fs.existsSync('C:\\Program Files\\Mozilla Firefox\\firefox.exe')) { | ||
product = 'firefox'; | ||
executablePath = 'C:\\Program Files\\Mozilla Firefox\\firefox.exe'; | ||
else { | ||
browser = await puppeteer.launch({ | ||
executablePath: '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome', | ||
}); | ||
} | ||
} | ||
else if (process.platform === 'darwin') { | ||
if (fs.existsSync('/Applications/Google Chrome.app/Contents/MacOS/Google Chrome')) { | ||
executablePath = '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome'; | ||
} | ||
else if (fs.existsSync('/Applications/Firefox.app/Contents/MacOS/firefox')) { | ||
product = 'firefox'; | ||
executablePath = '/Applications/Firefox.app/Contents/MacOS/firefox'; | ||
} | ||
} | ||
return browser; | ||
}; | ||
const generatePdf = async (html, format = 'a4', orientation = 'portrait') => { | ||
const browser = await puppeteer_core_1.default.launch({ | ||
executablePath: process.env.PUPPETEER_EXECUTABLE_PATH || executablePath, | ||
product, | ||
args: product === 'chrome' ? ['--no-sandbox'] : undefined, | ||
}); | ||
const browser = await getBrowser(); | ||
try { | ||
@@ -86,7 +84,3 @@ const page = await browser.newPage(); | ||
const generatePng = async (html) => { | ||
const browser = await puppeteer_core_1.default.launch({ | ||
executablePath: process.env.PUPPETEER_EXECUTABLE_PATH || executablePath, | ||
product, | ||
args: product === 'chrome' ? ['--no-sandbox'] : undefined, | ||
}); | ||
const browser = await getBrowser(); | ||
try { | ||
@@ -93,0 +87,0 @@ const page = await browser.newPage(); |
"use strict"; | ||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | ||
if (k2 === undefined) k2 = k; | ||
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); | ||
var desc = Object.getOwnPropertyDescriptor(m, k); | ||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { | ||
desc = { enumerable: true, get: function() { return m[k]; } }; | ||
} | ||
Object.defineProperty(o, k2, desc); | ||
}) : (function(o, m, k, k2) { | ||
@@ -25,2 +29,3 @@ if (k2 === undefined) k2 = k; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const react_1 = require("react"); | ||
const fs = __importStar(require("fs")); | ||
@@ -30,4 +35,4 @@ const he_1 = __importDefault(require("he")); | ||
const juice_1 = __importDefault(require("juice")); | ||
const server_1 = require("react-dom/server"); | ||
const uuid_1 = require("uuid"); | ||
const vm2_1 = require("vm2"); | ||
const emailTemplate_1 = __importDefault(require("./emailTemplate")); | ||
@@ -37,42 +42,11 @@ const puppeteer_1 = require("./puppeteer"); | ||
const createReactElement = async (templatePath, props) => { | ||
const reactElementVm = new vm2_1.NodeVM({ | ||
timeout: 5000, | ||
sandbox: { | ||
props, | ||
}, | ||
require: { | ||
external: ['react', 'react-dom'], | ||
}, | ||
}); | ||
const tempFileName = `./.muil/temp/${uuid_1.v4()}.js`; | ||
var _a; | ||
const tempFileName = `./.muil/temp/${(0, uuid_1.v4)()}.js`; | ||
await fs.promises.mkdir('./.muil/temp', { recursive: true }); | ||
await fs.promises.copyFile(templatePath, tempFileName); | ||
const ReactElement = reactElementVm.run(` | ||
const {createElement} = require('react'); | ||
const ReactComponent = require('${tempFileName}'); | ||
const ReactElement = createElement(ReactComponent.default, props); | ||
module.exports = ReactElement; | ||
`, 'renderTemplate.js'); | ||
const ReactComponent = await (_a = tempFileName, Promise.resolve().then(() => __importStar(require(_a)))); | ||
const ReactElement = (0, react_1.createElement)(ReactComponent.default, props); | ||
await fs.promises.unlink(tempFileName); | ||
return ReactElement; | ||
}; | ||
const renderToStaticMarkup = (ReactElement) => { | ||
const contentVm = new vm2_1.NodeVM({ | ||
timeout: 5000, | ||
sandbox: { | ||
ReactElement, | ||
}, | ||
require: { | ||
external: ['react-dom'], | ||
}, | ||
}); | ||
const content = contentVm.run(` | ||
const { renderToStaticMarkup } = require('react-dom/server'); | ||
const content = renderToStaticMarkup(ReactElement); | ||
module.exports = content; | ||
`, 'renderTemplate.js'); | ||
return content; | ||
}; | ||
const renderTemplate = async ({ type = 'html', templatePath, templateCssPath = null, props = {}, styleCollectors = [styleCollectors_1.styledComponentsStyleCollector], shadowSupport = false, inlineCss = true, minifyHtml = true, pdfFormat = 'a4', pdfOrientation = 'portrait', }) => { | ||
@@ -82,7 +56,7 @@ if (!templatePath) | ||
const ReactElement = await createReactElement(templatePath, props); | ||
const content = renderToStaticMarkup(ReactElement); | ||
const content = (0, server_1.renderToStaticMarkup)(ReactElement); | ||
const templateCss = templateCssPath && fs.existsSync(templateCssPath) | ||
? fs.readFileSync(templateCssPath, 'utf-8') | ||
: null; | ||
let html = emailTemplate_1.default({ | ||
let html = (0, emailTemplate_1.default)({ | ||
css: templateCss, | ||
@@ -94,3 +68,3 @@ styles: (await Promise.all(styleCollectors.map((collector) => collector(ReactElement)))).join('\n'), | ||
if (type === 'html' && inlineCss) { | ||
html = juice_1.default(html); | ||
html = (0, juice_1.default)(html); | ||
} | ||
@@ -101,3 +75,3 @@ html = he_1.default.encode(html.toString(), { | ||
if (minifyHtml) { | ||
html = html_minifier_1.minify(html, { | ||
html = (0, html_minifier_1.minify)(html, { | ||
preventAttributesEscaping: true, | ||
@@ -112,6 +86,6 @@ minifyCSS: true, | ||
case 'png': { | ||
return puppeteer_1.generatePng(html); | ||
return (0, puppeteer_1.generatePng)(html); | ||
} | ||
case 'pdf': { | ||
return puppeteer_1.generatePdf(html, pdfFormat, pdfOrientation); | ||
return (0, puppeteer_1.generatePdf)(html, pdfFormat, pdfOrientation); | ||
} | ||
@@ -118,0 +92,0 @@ default: { |
import { ReactNode } from 'react'; | ||
export declare const styledComponentsStyleCollector: (ReactElement: ReactNode) => any; | ||
export declare const styledComponentsStyleCollector: (ReactElement: ReactNode) => string; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.styledComponentsStyleCollector = void 0; | ||
const vm2_1 = require("vm2"); | ||
const styled_components_1 = require("styled-components"); | ||
const server_1 = require("react-dom/server"); | ||
const styledComponentsStyleCollector = (ReactElement) => { | ||
const vm = new vm2_1.NodeVM({ | ||
timeout: 5000, | ||
sandbox: { | ||
ReactElement, | ||
}, | ||
require: { | ||
external: ['react', 'react-dom', 'styled-components'], | ||
}, | ||
}); | ||
const styleTags = vm.run(` | ||
const { renderToStaticMarkup } = require('react-dom/server'); | ||
const { ServerStyleSheet } = require('styled-components'); | ||
const sheet = new ServerStyleSheet(); | ||
renderToStaticMarkup(sheet.collectStyles(ReactElement)); | ||
module.exports = sheet.getStyleTags(); | ||
`, 'styleCollectors.js'); | ||
return styleTags; | ||
const sheet = new styled_components_1.ServerStyleSheet(); | ||
(0, server_1.renderToStaticMarkup)(sheet.collectStyles(ReactElement)); | ||
return sheet.getStyleTags(); | ||
}; | ||
exports.styledComponentsStyleCollector = styledComponentsStyleCollector; | ||
//# sourceMappingURL=styleCollectors.js.map |
@@ -15,3 +15,3 @@ "use strict"; | ||
TemplatesRendererModule = __decorate([ | ||
common_1.Module({ | ||
(0, common_1.Module)({ | ||
providers: [templates_renderer_service_1.TemplatesRendererService], | ||
@@ -18,0 +18,0 @@ exports: [templates_renderer_service_1.TemplatesRendererService], |
@@ -17,3 +17,3 @@ "use strict"; | ||
async render({ type = 'html', templatePath, templateCssPath = null, props = {}, shadowSupport = false, inlineCss = true, minifyHtml = true, pdfFormat = 'a4', pdfOrientation = 'portrait', }) { | ||
return renderTemplate_1.default({ | ||
return (0, renderTemplate_1.default)({ | ||
type, | ||
@@ -32,5 +32,5 @@ templatePath, | ||
TemplatesRendererService = __decorate([ | ||
common_1.Injectable() | ||
(0, common_1.Injectable)() | ||
], TemplatesRendererService); | ||
exports.TemplatesRendererService = TemplatesRendererService; | ||
//# sourceMappingURL=templates-renderer.service.js.map |
import { PaperFormat } from 'puppeteer-core'; | ||
export declare type RenderOptions = { | ||
export type RenderOptions = { | ||
type?: 'html' | 'png' | 'pdf'; | ||
@@ -4,0 +4,0 @@ templatePath: string; |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Debug access
Supply chain riskUses debug, reflection and dynamic code execution features.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
3
4
88328
334
+ Added@sparticuz/chromium@^123.0.1
+ Addedreact@^18.3.1
+ Addedreact-dom@^18.3.1
+ Addedstyled-components@^6.1.11
+ Added@emotion/is-prop-valid@1.2.2(transitive)
+ Added@emotion/memoize@0.8.1(transitive)
+ Added@emotion/unitless@0.8.1(transitive)
+ Added@puppeteer/browsers@2.3.0(transitive)
+ Added@sparticuz/chromium@123.0.1(transitive)
+ Added@tootallnate/quickjs-emscripten@0.23.0(transitive)
+ Added@types/stylis@4.2.5(transitive)
+ Addedagent-base@7.1.1(transitive)
+ Addedansi-regex@5.0.1(transitive)
+ Addedansi-styles@4.3.0(transitive)
+ Addedast-types@0.13.4(transitive)
+ Addedb4a@1.6.6(transitive)
+ Addedbare-events@2.4.2(transitive)
+ Addedbare-fs@2.3.5(transitive)
+ Addedbare-os@2.4.4(transitive)
+ Addedbare-path@2.1.3(transitive)
+ Addedbare-stream@2.3.0(transitive)
+ Addedbasic-ftp@5.0.5(transitive)
+ Addedchromium-bidi@0.6.3(transitive)
+ Addedcliui@8.0.1(transitive)
+ Addedcolor-convert@2.0.1(transitive)
+ Addedcolor-name@1.1.4(transitive)
+ Addedcsstype@3.1.3(transitive)
+ Addeddata-uri-to-buffer@6.0.2(transitive)
+ Addeddebug@4.3.7(transitive)
+ Addeddegenerator@5.0.1(transitive)
+ Addeddevtools-protocol@0.0.1312386(transitive)
+ Addedemoji-regex@8.0.0(transitive)
+ Addedescodegen@2.1.0(transitive)
+ Addedesprima@4.0.1(transitive)
+ Addedestraverse@5.3.0(transitive)
+ Addedesutils@2.0.3(transitive)
+ Addedfast-fifo@1.3.2(transitive)
+ Addedfs-extra@11.2.0(transitive)
+ Addedget-caller-file@2.0.5(transitive)
+ Addedget-uri@6.0.3(transitive)
+ Addedgraceful-fs@4.2.11(transitive)
+ Addedhttp-proxy-agent@7.0.2(transitive)
+ Addedhttps-proxy-agent@7.0.5(transitive)
+ Addedip-address@9.0.5(transitive)
+ Addedis-fullwidth-code-point@3.0.0(transitive)
+ Addedjsbn@1.1.0(transitive)
+ Addedjsonfile@6.1.0(transitive)
+ Addedlru-cache@7.18.3(transitive)
+ Addedmitt@3.0.1(transitive)
+ Addedms@2.1.3(transitive)
+ Addednanoid@3.3.7(transitive)
+ Addednetmask@2.0.2(transitive)
+ Addednode-fetch@2.7.0(transitive)
+ Addedpac-proxy-agent@7.0.2(transitive)
+ Addedpac-resolver@7.0.1(transitive)
+ Addedpostcss@8.4.38(transitive)
+ Addedproxy-agent@6.4.0(transitive)
+ Addedpuppeteer-core@22.15.0(transitive)
+ Addedqueue-tick@1.0.1(transitive)
+ Addedreact@18.3.1(transitive)
+ Addedreact-dom@18.3.1(transitive)
+ Addedrequire-directory@2.1.1(transitive)
+ Addedscheduler@0.23.2(transitive)
+ Addedsemver@7.6.3(transitive)
+ Addedsmart-buffer@4.2.0(transitive)
+ Addedsocks@2.8.3(transitive)
+ Addedsocks-proxy-agent@8.0.4(transitive)
+ Addedsource-map-js@1.2.1(transitive)
+ Addedsprintf-js@1.1.3(transitive)
+ Addedstreamx@2.20.1(transitive)
+ Addedstring-width@4.2.3(transitive)
+ Addedstrip-ansi@6.0.1(transitive)
+ Addedstyled-components@6.1.13(transitive)
+ Addedstylis@4.3.2(transitive)
+ Addedtar-fs@3.0.6(transitive)
+ Addedtar-stream@3.1.7(transitive)
+ Addedtext-decoder@1.2.0(transitive)
+ Addedtslib@2.6.2(transitive)
+ Addeduniversalify@2.0.1(transitive)
+ Addedurlpattern-polyfill@10.0.0(transitive)
+ Addedwrap-ansi@7.0.0(transitive)
+ Addedws@8.18.0(transitive)
+ Addedy18n@5.0.8(transitive)
+ Addedyargs@17.7.2(transitive)
+ Addedyargs-parser@21.1.1(transitive)
+ Addedzod@3.23.8(transitive)
- Removedvm2@3.9.19
- Removed@ampproject/remapping@2.3.0(transitive)
- Removed@babel/code-frame@7.24.7(transitive)
- Removed@babel/compat-data@7.25.4(transitive)
- Removed@babel/core@7.25.2(transitive)
- Removed@babel/generator@7.25.6(transitive)
- Removed@babel/helper-annotate-as-pure@7.24.7(transitive)
- Removed@babel/helper-compilation-targets@7.25.2(transitive)
- Removed@babel/helper-module-imports@7.24.7(transitive)
- Removed@babel/helper-module-transforms@7.25.2(transitive)
- Removed@babel/helper-plugin-utils@7.24.8(transitive)
- Removed@babel/helper-simple-access@7.24.7(transitive)
- Removed@babel/helper-string-parser@7.24.8(transitive)
- Removed@babel/helper-validator-identifier@7.24.7(transitive)
- Removed@babel/helper-validator-option@7.24.8(transitive)
- Removed@babel/helpers@7.25.6(transitive)
- Removed@babel/highlight@7.24.7(transitive)
- Removed@babel/parser@7.25.6(transitive)
- Removed@babel/plugin-syntax-jsx@7.24.7(transitive)
- Removed@babel/template@7.25.0(transitive)
- Removed@babel/traverse@7.25.6(transitive)
- Removed@babel/types@7.25.6(transitive)
- Removed@emotion/is-prop-valid@1.3.0(transitive)
- Removed@emotion/memoize@0.9.0(transitive)
- Removed@emotion/stylis@0.8.5(transitive)
- Removed@emotion/unitless@0.7.5(transitive)
- Removed@jridgewell/gen-mapping@0.3.5(transitive)
- Removed@jridgewell/resolve-uri@3.1.2(transitive)
- Removed@jridgewell/set-array@1.2.1(transitive)
- Removed@jridgewell/sourcemap-codec@1.5.0(transitive)
- Removed@jridgewell/trace-mapping@0.3.25(transitive)
- Removedacorn@8.12.1(transitive)
- Removedacorn-walk@8.3.4(transitive)
- Removedagent-base@6.0.2(transitive)
- Removedansi-styles@3.2.1(transitive)
- Removedbabel-plugin-styled-components@2.1.4(transitive)
- Removedbalanced-match@1.0.2(transitive)
- Removedbl@4.1.0(transitive)
- Removedbrace-expansion@1.1.11(transitive)
- Removedbrowserslist@4.23.3(transitive)
- Removedcaniuse-lite@1.0.30001662(transitive)
- Removedchalk@2.4.2(transitive)
- Removedchownr@1.1.4(transitive)
- Removedcolor-convert@1.9.3(transitive)
- Removedcolor-name@1.1.3(transitive)
- Removedconcat-map@0.0.1(transitive)
- Removedconvert-source-map@2.0.0(transitive)
- Removedcross-fetch@3.1.5(transitive)
- Removeddebug@4.3.4(transitive)
- Removeddevtools-protocol@0.0.1001819(transitive)
- Removedelectron-to-chromium@1.5.25(transitive)
- Removedescape-string-regexp@1.0.5(transitive)
- Removedfind-up@4.1.0(transitive)
- Removedfs-constants@1.0.0(transitive)
- Removedfs.realpath@1.0.0(transitive)
- Removedgensync@1.0.0-beta.2(transitive)
- Removedglob@7.2.3(transitive)
- Removedglobals@11.12.0(transitive)
- Removedhas-flag@3.0.0(transitive)
- Removedhoist-non-react-statics@3.3.2(transitive)
- Removedhttps-proxy-agent@5.0.1(transitive)
- Removedinflight@1.0.6(transitive)
- Removedinherits@2.0.4(transitive)
- Removedjsesc@2.5.2(transitive)
- Removedjson5@2.2.3(transitive)
- Removedlocate-path@5.0.0(transitive)
- Removedlodash@4.17.21(transitive)
- Removedlru-cache@5.1.1(transitive)
- Removedminimatch@3.1.2(transitive)
- Removedmkdirp-classic@0.5.3(transitive)
- Removedms@2.1.2(transitive)
- Removednode-fetch@2.6.7(transitive)
- Removednode-releases@2.0.18(transitive)
- Removedobject-assign@4.1.1(transitive)
- Removedp-limit@2.3.0(transitive)
- Removedp-locate@4.1.0(transitive)
- Removedp-try@2.2.0(transitive)
- Removedpath-exists@4.0.0(transitive)
- Removedpath-is-absolute@1.0.1(transitive)
- Removedpicomatch@2.3.1(transitive)
- Removedpkg-dir@4.2.0(transitive)
- Removedpuppeteer-core@14.4.1(transitive)
- Removedreact@17.0.2(transitive)
- Removedreact-dom@17.0.2(transitive)
- Removedreact-is@16.13.118.3.1(transitive)
- Removedreadable-stream@3.6.2(transitive)
- Removedrimraf@3.0.2(transitive)
- Removedsafe-buffer@5.2.1(transitive)
- Removedscheduler@0.20.2(transitive)
- Removedsemver@6.3.1(transitive)
- Removedstring_decoder@1.3.0(transitive)
- Removedstyled-components@5.3.11(transitive)
- Removedsupports-color@5.5.0(transitive)
- Removedtar-fs@2.1.1(transitive)
- Removedtar-stream@2.2.0(transitive)
- Removedto-fast-properties@2.0.0(transitive)
- Removedupdate-browserslist-db@1.1.0(transitive)
- Removedutil-deprecate@1.0.2(transitive)
- Removedvm2@3.9.19(transitive)
- Removedws@8.7.0(transitive)
- Removedyallist@3.1.1(transitive)
Updatedpuppeteer-core@^22.6.1