diff --git a/.babelrc b/.babelrc new file mode 100644 index 0000000..661d78e --- /dev/null +++ b/.babelrc @@ -0,0 +1,3 @@ +{ + "presets": ["@babel/preset-env", "@babel/preset-react"] +} \ No newline at end of file diff --git a/package.json b/package.json index 3e527f8..a7288c7 100644 --- a/package.json +++ b/package.json @@ -12,11 +12,16 @@ "license": "MIT", "dependencies": { "@excalidraw/excalidraw": "0.6.0", - "react": "17.0.0", - "react-dom": "17.0.0", + "aakansha-excalidraw": "0.7.0-libs2", + "react": "17.0.1", + "react-dom": "17.0.1", "react-scripts": "4.0.1" }, "devDependencies": { + "@babel/core": "^7.3.3", + "@babel/preset-env": "^7.3.1", + "@babel/preset-react": "^7.0.0", + "@rollup/plugin-babel": "5.3.0", "@rollup/plugin-commonjs": "^15.1.0", "@rollup/plugin-node-resolve": "^9.0.0", "@rollup/plugin-typescript": "^6.0.0", @@ -30,6 +35,7 @@ "rollup-plugin-minify": "1.0.3", "rollup-plugin-postcss": "^4.0.0", "tslib": "^2.0.3", - "typescript": "^4.0.3" + "typescript": "^4.0.3", + "webpack-bundle-analyzer": "^4.4.1" } } diff --git a/rollup.config.js b/rollup.config.js index 959633f..483ea52 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -3,9 +3,8 @@ import { nodeResolve } from '@rollup/plugin-node-resolve'; import commonjs from '@rollup/plugin-commonjs'; import postcss from 'rollup-plugin-postcss'; import copy from 'rollup-plugin-copy'; -//import uglify from 'rollup-plugin-uglify'; -//import minify from "rollup-plugin-minify" import { env } from "process"; +import babel from '@rollup/plugin-babel'; import replace from "@rollup/plugin-replace"; const isProd = (process.env.NODE_ENV === "production"); @@ -29,6 +28,9 @@ export default { preventAssignment: true, "process.env.NODE_ENV": JSON.stringify(env.NODE_ENV), }), + babel({ + exclude: "node_modules/**" + }), commonjs(), postcss({ plugins: [] diff --git a/src/ExcalidrawView.ts b/src/ExcalidrawView.ts index f6075e0..92ca9a9 100644 --- a/src/ExcalidrawView.ts +++ b/src/ExcalidrawView.ts @@ -1,39 +1,43 @@ import { TextFileView, WorkspaceLeaf } from "obsidian"; import * as React from "react"; import * as ReactDOM from "react-dom"; -import Excalidraw, {exportToSvg} from "@excalidraw/excalidraw"; +//import Excalidraw, {exportToSvg} from "@excalidraw/excalidraw"; import { ExcalidrawElement } from "@excalidraw/excalidraw/types/element/types"; import { AppState } from "@excalidraw/excalidraw/types/types"; -import {VIEW_TYPE_EXCALIDRAW, EXCALIDRAW_FILE_EXTENSION, ICON_NAME} from './constants'; +import Excalidraw, {exportToSvg} from "aakansha-excalidraw"; +import {VIEW_TYPE_EXCALIDRAW, EXCALIDRAW_FILE_EXTENSION, ICON_NAME} from './constants'; export default class ExcalidrawView extends TextFileView { private getScene: any; + private excalidrawRef: React.MutableRefObject; constructor(leaf: WorkspaceLeaf) { super(leaf); this.getScene = null; + this.excalidrawRef = null; } - async onClose() { - this.requestSave(); - } - - // clear the view content - clear() { - ReactDOM.unmountComponentAtNode(this.contentEl); - this.getScene = null; - } + + // onload() { + + // } + + // onunload() { + + // } + // get the new file content getViewData () { - if(this.getScene) return this.getScene(); - else return ''; + console.log("getViewData"); + if(this.getScene) + return this.getScene(); + else return this.data; } - - setViewData (data: string, clear: boolean) { + console.log("setViewData", this.leaf); if (this.app.workspace.layoutReady) { this.loadDrawing(data,clear); } else { @@ -41,7 +45,8 @@ export default class ExcalidrawView extends TextFileView { } } - private loadDrawing (data:string, clear:boolean) :void { + private loadDrawing (data:string, clear:boolean) :void { + console.log("loadDrawing clear?",clear,data); if(clear) this.clear(); const excalidrawData = JSON.parse(data); this.instantiateExcalidraw({ @@ -73,9 +78,23 @@ export default class ExcalidrawView extends TextFileView { return ICON_NAME; } + // clear the view content + clear() { + + //this.excalidrawRef.resetScene(); + return; + console.log("clear"); + if(this.containerEl.hasChildNodes) { + console.log("unmount ReactDOM"); + ReactDOM.unmountComponentAtNode(this.contentEl); + this.getScene = null; + } + } + private instantiateExcalidraw(initdata: any) { - ReactDOM.render(React.createElement(() => { - let previousSceneVersion = 0; + //this.clear(); + console.log("this.instantiateExcalidraw"); + const reactElement = React.createElement(() => { const excalidrawRef = React.useRef(null); const excalidrawWrapperRef = React.useRef(null); const [dimensions, setDimensions] = React.useState({ @@ -83,6 +102,8 @@ export default class ExcalidrawView extends TextFileView { height: undefined }); + this.excalidrawRef = excalidrawRef; + React.useEffect(() => { setDimensions({ width: this.contentEl.clientWidth, @@ -100,14 +121,17 @@ export default class ExcalidrawView extends TextFileView { return () => window.removeEventListener("resize", onResize); }, [excalidrawWrapperRef]); - this.getScene = function() { + this.getScene = () => { + if(!excalidrawRef?.current) { + return null; + } const el: ExcalidrawElement[] = excalidrawRef.current.getSceneElements(); const st: AppState = excalidrawRef.current.getAppState(); return JSON.stringify({ "type": "excalidraw", "version": 2, "source": "https://excalidraw.com", - "elements": el.filter(e => !e.isDeleted), + "elements": el, "appState": { "theme": st.theme, "viewBackgroundColor": st.viewBackgroundColor, @@ -116,7 +140,7 @@ export default class ExcalidrawView extends TextFileView { } }); }; - + return React.createElement( React.Fragment, null, @@ -124,7 +148,7 @@ export default class ExcalidrawView extends TextFileView { "div", { className: "excalidraw-wrapper", - ref: excalidrawWrapperRef + ref: excalidrawWrapperRef, }, React.createElement(Excalidraw.default, { ref: excalidrawRef, @@ -141,7 +165,8 @@ export default class ExcalidrawView extends TextFileView { }) ) ); - }),(this as any).contentEl); + }); + ReactDOM.render(reactElement,(this as any).contentEl); } public static getSVG(data:string):SVGSVGElement { diff --git a/yarn.lock b/yarn.lock index 60bc7fb..5d291b8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -28,7 +28,7 @@ "resolved" "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.15.tgz" "version" "7.13.15" -"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.13.0", "@babel/core@^7.4.0-0", "@babel/core@^7.7.5", "@babel/core@^7.8.4", "@babel/core@^7.9.0", "@babel/core@7 || ^7.0.0-rc.2": +"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.13.0", "@babel/core@^7.3.3", "@babel/core@^7.4.0-0", "@babel/core@^7.7.5", "@babel/core@^7.8.4", "@babel/core@^7.9.0", "@babel/core@7 || ^7.0.0-rc.2": "integrity" "sha512-6GXmNYeNjS2Uz+uls5jalOemgIhnTMeaXo+yBUA72kC2uX/8VW6XyhVIo2L8/q0goKQA3EVKx0KOQpVKSeWadQ==" "resolved" "https://registry.npmjs.org/@babel/core/-/core-7.13.15.tgz" "version" "7.13.15" @@ -176,7 +176,7 @@ dependencies: "@babel/types" "^7.13.12" -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.1", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.13.12": +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.1", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.13.12": "integrity" "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==" "resolved" "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz" "version" "7.13.12" @@ -914,7 +914,7 @@ "@babel/helper-create-regexp-features-plugin" "^7.12.13" "@babel/helper-plugin-utils" "^7.12.13" -"@babel/preset-env@^7.8.4", "@babel/preset-env@^7.9.5": +"@babel/preset-env@^7.3.1", "@babel/preset-env@^7.8.4", "@babel/preset-env@^7.9.5": "integrity" "sha512-D4JAPMXcxk69PKe81jRJ21/fP/uYdcTZ3hJDF5QX2HSI9bBxxYw/dumdR6dGumhjxlprHPE4XWoPaqzZUVy2MA==" "resolved" "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.13.15.tgz" "version" "7.13.15" @@ -1072,7 +1072,7 @@ "@babel/types" "^7.4.4" "esutils" "^2.0.2" -"@babel/preset-react@^7.9.4": +"@babel/preset-react@^7.0.0", "@babel/preset-react@^7.9.4": "integrity" "sha512-gx+tDLIE06sRjKJkVtpZ/t3mzCDOnPG+ggHZG9lffUbX8+wC739x20YQc9V35Do6ZAxaUc/HhVHIiOzz5MvDmA==" "resolved" "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.13.13.tgz" "version" "7.13.13" @@ -1455,6 +1455,19 @@ "schema-utils" "^2.6.5" "source-map" "^0.7.3" +"@polka/url@^1.0.0-next.9": + "integrity" "sha512-6RglhutqrGFMO1MNUXp95RBuYIuc8wTnMAV5MUhLmjTOy78ncwOw7RgeQ/HeymkKXRhZd0s2DNrM1rL7unk3MQ==" + "resolved" "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.12.tgz" + "version" "1.0.0-next.12" + +"@rollup/plugin-babel@5.3.0": + "integrity" "sha512-9uIC8HZOnVLrLHxayq/PTzw+uS25E14KPUBh5ktF+18Mjo5yK0ToMMx6epY0uEgkjwJw0aBW4x2horYXh8juWw==" + "resolved" "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.0.tgz" + "version" "5.3.0" + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@rollup/pluginutils" "^3.1.0" + "@rollup/plugin-commonjs@^15.1.0": "integrity" "sha512-xCQqz4z/o0h2syQ7d9LskIMvBSH4PX5PjYdpSSvgS+pQik3WahkQVNWg3D8XJeYjZoVWnIUQYDghuEMRGrmQYQ==" "resolved" "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-15.1.0.tgz" @@ -1646,7 +1659,7 @@ "resolved" "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz" "version" "1.3.1" -"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7", "@types/babel__core@^7.1.9": "integrity" "sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g==" "resolved" "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.14.tgz" "version" "7.1.14" @@ -2143,6 +2156,11 @@ "resolved" "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz" "version" "4.2.2" +"aakansha-excalidraw@0.7.0-libs2": + "integrity" "sha512-R8PxtpKsenPeVH5ZVzKrtzCcLpCu2pCWD5j7fOMjmKu0uh69w4wvTbTX7oLtab/ajgbfDSeeffNz70YZrQ0R0w==" + "resolved" "https://registry.npmjs.org/aakansha-excalidraw/-/aakansha-excalidraw-0.7.0-libs2.tgz" + "version" "0.7.0-libs2" + "abab@^2.0.3", "abab@^2.0.5": "integrity" "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==" "resolved" "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz" @@ -2174,6 +2192,11 @@ "resolved" "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz" "version" "7.2.0" +"acorn-walk@^8.0.0": + "integrity" "sha512-+bpA9MJsHdZ4bgfDcpk0ozQyhhVct7rzOmO0s1IIr0AGGgKBljss8n2zp11rRP2wid5VGeh04CgeKzgat5/25A==" + "resolved" "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.0.2.tgz" + "version" "8.0.2" + "acorn@^6.0.0 || ^7.0.0 || ^8.0.0", "acorn@^7.1.0", "acorn@^7.1.1", "acorn@^7.4.0": "integrity" "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" "resolved" "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" @@ -2184,6 +2207,11 @@ "resolved" "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz" "version" "6.4.2" +"acorn@^8.0.4": + "integrity" "sha512-xYiIVjNuqtKXMxlRMDc6mZUhXehod4a3gbZ1qRlM7icK4EbxUFNLhWoPblCvFtB2Y9CIqHP3CF/rdxLItaQv8g==" + "resolved" "https://registry.npmjs.org/acorn/-/acorn-8.1.1.tgz" + "version" "8.1.1" + "acorn@^8.1.0": "integrity" "sha512-xYiIVjNuqtKXMxlRMDc6mZUhXehod4a3gbZ1qRlM7icK4EbxUFNLhWoPblCvFtB2Y9CIqHP3CF/rdxLItaQv8g==" "resolved" "https://registry.npmjs.org/acorn/-/acorn-8.1.1.tgz" @@ -3469,6 +3497,11 @@ "resolved" "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz" "version" "4.1.1" +"commander@^6.2.0": + "integrity" "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==" + "resolved" "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz" + "version" "6.2.1" + "common-tags@^1.8.0": "integrity" "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==" "resolved" "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz" @@ -4323,7 +4356,7 @@ "resolved" "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz" "version" "8.2.0" -"duplexer@^0.1.1": +"duplexer@^0.1.1", "duplexer@^0.1.2": "integrity" "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" "resolved" "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz" "version" "0.1.2" @@ -5504,6 +5537,13 @@ "resolved" "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz" "version" "1.3.0" +"gzip-size@^6.0.0": + "integrity" "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==" + "resolved" "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "duplexer" "^0.1.2" + "gzip-size@5.1.1": "integrity" "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==" "resolved" "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz" @@ -7427,6 +7467,11 @@ dependencies: "mime-db" "1.47.0" +"mime@^2.3.1": + "integrity" "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==" + "resolved" "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz" + "version" "2.5.2" + "mime@^2.4.4": "integrity" "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==" "resolved" "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz" @@ -7940,6 +7985,11 @@ "is-docker" "^2.0.0" "is-wsl" "^2.1.1" +"opener@^1.5.2": + "integrity" "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==" + "resolved" "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz" + "version" "1.5.2" + "opn@^5.5.0": "integrity" "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==" "resolved" "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz" @@ -9424,14 +9474,14 @@ "strip-ansi" "6.0.0" "text-table" "0.2.0" -"react-dom@^17.0.1", "react-dom@17.0.0": - "integrity" "sha512-OGnFbxCjI2TMAZYMVxi4hqheJiN8rCEVVrL7XIGzCB6beNc4Am8M47HtkvxODZw9QgjmAPKpLba9FTu4fC1byA==" - "resolved" "https://registry.npmjs.org/react-dom/-/react-dom-17.0.0.tgz" - "version" "17.0.0" +"react-dom@^17.0.1", "react-dom@17.0.1": + "integrity" "sha512-6eV150oJZ9U2t9svnsspTMrWNyHc6chX0KzDeAOXftRa8bNeOKTTfCJ7KorIwenkHd2xqVTBTCZd79yk/lx/Ug==" + "resolved" "https://registry.npmjs.org/react-dom/-/react-dom-17.0.1.tgz" + "version" "17.0.1" dependencies: "loose-envify" "^1.1.0" "object-assign" "^4.1.1" - "scheduler" "^0.20.0" + "scheduler" "^0.20.1" "react-error-overlay@^6.0.9": "integrity" "sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==" @@ -9519,10 +9569,10 @@ optionalDependencies: "fsevents" "^2.1.3" -"react@^17.0.1", "react@17.0.0": - "integrity" "sha512-rG9bqS3LMuetoSUKHN8G3fMNuQOePKDThK6+2yXFWtoeTDLVNh/QCaxT+Jr+rNf4lwNXpx+atdn3Aa0oi8/6eQ==" - "resolved" "https://registry.npmjs.org/react/-/react-17.0.0.tgz" - "version" "17.0.0" +"react@^17.0.1", "react@17.0.1": + "integrity" "sha512-lG9c9UuMHdcAexXtigOZLX8exLWkW0Ku29qPRU8uhF2R9BN96dLCt0psvzPLlHc5OWkgymP3qwTRgbnw5BKx3w==" + "resolved" "https://registry.npmjs.org/react/-/react-17.0.1.tgz" + "version" "17.0.1" dependencies: "loose-envify" "^1.1.0" "object-assign" "^4.1.1" @@ -10205,7 +10255,7 @@ dependencies: "xmlchars" "^2.2.0" -"scheduler@^0.20.0": +"scheduler@^0.20.1": "integrity" "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==" "resolved" "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz" "version" "0.20.2" @@ -10458,6 +10508,15 @@ dependencies: "is-arrayish" "^0.3.1" +"sirv@^1.0.7": + "integrity" "sha512-SR36i3/LSWja7AJNRBz4fF/Xjpn7lQFI30tZ434dIy+bitLYSP+ZEenHg36i23V2SGEz+kqjksg0uOGZ5LPiqg==" + "resolved" "https://registry.npmjs.org/sirv/-/sirv-1.0.11.tgz" + "version" "1.0.11" + dependencies: + "@polka/url" "^1.0.0-next.9" + "mime" "^2.3.1" + "totalist" "^1.0.0" + "sisteransi@^1.0.5": "integrity" "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" "resolved" "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" @@ -11202,6 +11261,11 @@ "resolved" "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz" "version" "1.0.0" +"totalist@^1.0.0": + "integrity" "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==" + "resolved" "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz" + "version" "1.1.0" + "tough-cookie@^2.3.3": "integrity" "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==" "resolved" "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz" @@ -11690,6 +11754,21 @@ "resolved" "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz" "version" "6.1.0" +"webpack-bundle-analyzer@^4.4.1": + "integrity" "sha512-j5m7WgytCkiVBoOGavzNokBOqxe6Mma13X1asfVYtKWM3wxBiRRu1u1iG0Iol5+qp9WgyhkMmBAcvjEfJ2bdDw==" + "resolved" "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.4.1.tgz" + "version" "4.4.1" + dependencies: + "acorn" "^8.0.4" + "acorn-walk" "^8.0.0" + "chalk" "^4.1.0" + "commander" "^6.2.0" + "gzip-size" "^6.0.0" + "lodash" "^4.17.20" + "opener" "^1.5.2" + "sirv" "^1.0.7" + "ws" "^7.3.1" + "webpack-dev-middleware@^3.7.2": "integrity" "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==" "resolved" "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz" @@ -12081,7 +12160,7 @@ dependencies: "async-limiter" "~1.0.0" -"ws@^7.4.4": +"ws@^7.3.1", "ws@^7.4.4": "integrity" "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==" "resolved" "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz" "version" "7.4.4"