gemercheung 3 年 前
コミット
164d93d913

+ 4 - 1
packages/core/package.json

@@ -14,7 +14,7 @@
   "scripts": {
     "build": "pnpm run clean && pnpm run compile",
     "clean": "rimraf -rf ./dist",
-    "compile": "tsc -p tsconfig.build.json",
+    "compile": "rollup -c",
     "prepublishOnly": "pnpm run build"
   },
   "dependencies": {
@@ -24,7 +24,10 @@
     "uuidv4": "^6.2.13"
   },
   "devDependencies": {
+    "@rollup/plugin-typescript": "~8.3.0",
     "rimraf": "~3.0.2",
+    "rollup": "~2.77.0",
+    "rollup-plugin-terser": "^7.0.2",
     "typescript": "~4.7.4"
   }
 }

+ 21 - 0
packages/core/rollup.config.js

@@ -0,0 +1,21 @@
+import typescript from '@rollup/plugin-typescript';
+import { terser } from 'rollup-plugin-terser';
+import pkg from './package.json';
+
+export default [
+    {
+        input: 'src/index.ts',
+        external: Object.keys(pkg.dependencies),
+        plugins: [
+            typescript({
+                tsconfig: './tsconfig.build.json',
+            }),
+            terser({
+                compress: {
+                    drop_console: false,
+                },
+            }),
+        ],
+        output: [{ dir: './dist', format: 'esm', sourcemap: true }],
+    },
+];

+ 18 - 3
packages/core/src/basicTrack.ts

@@ -1,7 +1,22 @@
 import { IBaseAction } from '@medici/types';
+import type { SDKInitConfig, PlatformType, SDKConfigType } from './sdk';
+import type { IHistory } from './history';
 
 export class BaseTrack implements IBaseAction {
-    constructor() {}
-    public trackView(url: string, referrer: string, uuid: string): void {}
-    public TrackEvent(value: string, type: string, url: string, uuid: string): void {}
+    protected _platform: PlatformType;
+    protected _config: SDKInitConfig;
+    protected _history: IHistory;
+
+    constructor(params: SDKConfigType) {
+        this._config = params.config;
+        this._platform = params.platform;
+    }
+    public trackView(url: string, referrer: string, uuid: string): void {
+        console.log('BaseTrack-trackView', url, referrer, uuid);
+        console.log('111-playload', this._history.playload);
+    }
+
+    public TrackEvent(value: string, type: string, url: string, uuid: string): void {
+        console.log('BaseTrack-TrackEvent');
+    }
 }

+ 0 - 19
packages/core/src/config.ts

@@ -1,19 +0,0 @@
-import { BehaviorSubject } from 'rxjs';
-// import * as pjson from '../package.json';
-
-export interface ProjectConfigType {
-    serverUrl: string;
-    appId?: string | number;
-    user?: string;
-    version?: string;
-}
-
-export const projectConfig = new BehaviorSubject<ProjectConfigType>({
-    serverUrl: '',
-    appId: '',
-    version: '',
-});
-
-export function getProjectConfig(): ProjectConfigType {
-    return projectConfig.value;
-}

+ 4 - 1
packages/core/src/event.ts

@@ -1,3 +1,6 @@
 import { GlobalEventType } from '@medici/types';
 // export
-export class Eventer {}
+export class Eventer {
+    constructor() {
+    }
+}

+ 67 - 49
packages/core/src/history.ts

@@ -3,79 +3,97 @@ import { SDK } from './sdk';
 import { HistoryEvent } from '@medici/types';
 
 const global = getGlobalObject<Window>();
-export class History {
+
+export interface playloadType {
+    website: string;
+    hostname: string;
+    screen: string;
+    language: string;
+    url: string;
+}
+export class IHistory {
     protected _sdk: SDK;
+    protected _playload: playloadType;
     private currentRef: string;
     private currentUrl: string;
 
-    constructor(sdk: SDK) {
+    constructor(sdk: SDK, appId?: string) {
         this._sdk = sdk;
         this.init();
+        this._playload.website = appId;
+    }
+
+    get playload(): playloadType {
+        return this._playload;
     }
 
     init(): void {
         console.log('history init');
-        global.document.addEventListener('readystatechange', this.handleReadystatechange, true);
-        global.history.pushState = hook(global.history, 'pushState', this.handlePushState);
-        global.history.replaceState = hook(global.history, 'replaceState', this.handlePushState);
+        global.document.addEventListener('readystatechange', this.handleReadystatechange.bind(this), true);
+        global.history.pushState = hook(global.history, 'pushState', this.handlePushState.bind(this));
+        global.history.replaceState = hook(global.history, 'replaceState', this.handlePushState.bind(this));
         const {
             screen: { width, height },
             navigator: { language },
             location: { hostname, pathname, search },
-            localStorage,
-            document,
-            history,
+            // localStorage,
+            // document,
+            // history,
         } = global;
+
+        const screen = `${width}x${height}`;
         this.currentUrl = `${pathname}${search}`;
         this.currentRef = global.document.referrer;
+        this._playload = {
+            website: '',
+            hostname: hostname,
+            screen: screen,
+            language: language,
+            url: this.currentUrl,
+        };
     }
 
     handleReadystatechange(): void {
-        console.log('handleReadystatechange');
+        if (global.document.readyState === 'complete') {
+            console.log('handleReadystatechange');
+            this.observeDocument();
+        }
     }
 
     handlePushState(data: any, unused: string, url?: string | URL): void {
-        console.log('handlePushState', data, unused, url);
-        if (!url) return;
-        this.currentRef = this.currentUrl;
-        const newUrl = url.toString();
-        if (newUrl.substring(0, 4) === 'http') {
-            this.currentUrl = '/' + newUrl.split('/').splice(3).join('/');
-        } else {
-            this.currentUrl = newUrl;
-        }
-        console.log('this.currentUrl', this.currentUrl);
-        console.log('this.currentRef', this.currentRef);
-
-        if (this.currentUrl !== this.currentRef) {
-            console.log('trackView');
-            //   trackView();
+        try {
+            if (!url) return;
+            this.currentRef = this.currentUrl;
+            const newUrl = url.toString();
+            if (newUrl.substring(0, 4) === 'http') {
+                this.currentUrl = '/' + newUrl.split('/').splice(3).join('/');
+            } else {
+                this.currentUrl = newUrl;
+            }
+            console.log('diff', this.currentUrl !== this.currentRef);
+            if (this.currentUrl !== this.currentRef) {
+                console.log('trackView', data, unused, url);
+                this._sdk.trackView(this.currentUrl, this.currentRef, this._playload.website);
+                //   trackView();
+            }
+        } catch (error) {
+            console.log('error', error);
         }
     }
-    handleReplaceState(data: any, unused: string, url?: string | URL): void {
-        console.log('handleReplaceState', data, unused, url);
+    /**
+     * observe Document css Event
+     */
+    observeDocument(): void {
+        const monitorMutate = (mutations: MutationRecord[]) => {
+            mutations.forEach((mutation: MutationRecord) => {
+                const element = mutation.target;
+                console.log('element', element);
+                //   addEvent(element);
+                //   addEvents(element);
+            });
+        };
+
+        const observer = new MutationObserver(monitorMutate);
+        observer.observe(global.document, { childList: true, subtree: true });
     }
 }
-// const handlePush = (state, title, url) => {
-//     if (!url) return;
-
-//     currentRef = currentUrl;
-//     const newUrl = url.toString();
-
-//     if (newUrl.substring(0, 4) === 'http') {
-//       currentUrl = '/' + newUrl.split('/').splice(3).join('/');
-//     } else {
-//       currentUrl = newUrl;
-//     }
-
-//     if (currentUrl !== currentRef) {
-//       trackView();
-//     }
-//   };
-
-// export const InitHistoryListener = () => {
-//     const global = getGlobalObject<Window>();
-//     global.document.addEventListener('readystatechange', () => { })
-//     global.history.pushState =
-
-// }

+ 0 - 0
packages/core/src/node.ts


+ 10 - 13
packages/core/src/sdk.ts

@@ -1,22 +1,18 @@
 // import { getGlobalObject } from '@medici/utils';
-// import { projectConfig, ProjectConfigType } from './config';
-import { BaseTrack } from './basicTrack';
-import { History } from './history';
+// import { BehaviorSubject } from 'rxjs';
 
-// export function init(config: ProjectConfigType) {
-//     const global = getGlobalObject<Window>();
-//     console.log('global', global);
-//     projectConfig.next(config);
-// }
+import { BaseTrack } from './basicTrack';
+import { IHistory } from './history';
 
 export type PlatformType = 'web' | 'miniApp';
 
 export interface SDKInitConfig {
     user?: string;
     version?: string; //client version
-    endPoint?: string;
 }
 export interface SDKConfigType {
+    endPoint: URL;
+    appId: string;
     platform?: PlatformType;
     autoTrack?: boolean;
     config?: SDKInitConfig;
@@ -24,11 +20,12 @@ export interface SDKConfigType {
 export class SDK extends BaseTrack {
     protected _platform: PlatformType;
     protected _config: SDKInitConfig;
-    protected _history = new History(this);
+    // private _history: IHistory;
 
     constructor(params: SDKConfigType) {
-        super();
-        this._config = params.config;
-        this._platform = params.platform;
+        super(params);
+        console.log('params.appId', params.appId);
+        this._history = new IHistory(this, params.appId);
+        super._history = this._history;
     }
 }

+ 1 - 1
packages/types/src/history.ts

@@ -1,4 +1,4 @@
 export interface HistoryEvent {
-    handlePush(state: string, title: string, url: string): void;
+    handlePushState(state: string, title: string, url: string): void;
     addEvent(): void;
 }

+ 6 - 0
play/src/App.vue

@@ -6,6 +6,12 @@ import { SDK } from '@medici/core';
 
 const medici = new SDK({
     platform: 'web',
+    appId: 'xx129192919',
+    endPoint: 'https://google.com', //服务器
+    config: {
+        user: 'testUser',
+        version: '1',
+    },
 });
 console.log('medici', medici);
 </script>

+ 147 - 34
pnpm-lock.yaml

@@ -30,7 +30,10 @@ importers:
     specifiers:
       '@medici/types': workspace:^0.0.1
       '@medici/utils': workspace:^0.0.1
+      '@rollup/plugin-typescript': ~8.3.0
       rimraf: ~3.0.2
+      rollup: ~2.77.0
+      rollup-plugin-terser: ^7.0.2
       rxjs: ^7.5.6
       typescript: ~4.7.4
       uuidv4: ^6.2.13
@@ -40,41 +43,10 @@ importers:
       rxjs: 7.5.6
       uuidv4: 6.2.13
     devDependencies:
+      '@rollup/plugin-typescript': 8.3.4_oo3i3f3qmqiztdz5qgxrrjmd5e
       rimraf: 3.0.2
-      typescript: 4.7.4
-
-  packages/core1:
-    specifiers:
-      '@medici/types': workspace:^0.0.1
-      '@medici/utils': workspace:^0.0.1
-      rimraf: ~3.0.2
-      rxjs: ^7.5.6
-      typescript: ~4.7.4
-      uuidv4: ^6.2.13
-    dependencies:
-      '@medici/types': link:../types
-      '@medici/utils': link:../utils
-      rxjs: 7.5.6
-      uuidv4: 6.2.13
-    devDependencies:
-      rimraf: 3.0.2
-      typescript: 4.7.4
-
-  packages/core1/dist:
-    specifiers:
-      '@medici/types': workspace:^0.0.1
-      '@medici/utils': workspace:^0.0.1
-      rimraf: ~3.0.2
-      rxjs: ^7.5.6
-      typescript: ~4.7.4
-      uuidv4: ^6.2.13
-    dependencies:
-      '@medici/types': link:../../types
-      '@medici/utils': link:../../utils
-      rxjs: 7.5.6
-      uuidv4: 6.2.13
-    devDependencies:
-      rimraf: 3.0.2
+      rollup: 2.77.2
+      rollup-plugin-terser: 7.0.2_rollup@2.77.2
       typescript: 4.7.4
 
   packages/foo:
@@ -400,6 +372,43 @@ packages:
     resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==}
     dev: true
 
+  /@jridgewell/gen-mapping/0.3.2:
+    resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==}
+    engines: {node: '>=6.0.0'}
+    dependencies:
+      '@jridgewell/set-array': 1.1.2
+      '@jridgewell/sourcemap-codec': 1.4.14
+      '@jridgewell/trace-mapping': 0.3.14
+    dev: true
+
+  /@jridgewell/resolve-uri/3.1.0:
+    resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==}
+    engines: {node: '>=6.0.0'}
+    dev: true
+
+  /@jridgewell/set-array/1.1.2:
+    resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
+    engines: {node: '>=6.0.0'}
+    dev: true
+
+  /@jridgewell/source-map/0.3.2:
+    resolution: {integrity: sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==}
+    dependencies:
+      '@jridgewell/gen-mapping': 0.3.2
+      '@jridgewell/trace-mapping': 0.3.14
+    dev: true
+
+  /@jridgewell/sourcemap-codec/1.4.14:
+    resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==}
+    dev: true
+
+  /@jridgewell/trace-mapping/0.3.14:
+    resolution: {integrity: sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==}
+    dependencies:
+      '@jridgewell/resolve-uri': 3.1.0
+      '@jridgewell/sourcemap-codec': 1.4.14
+    dev: true
+
   /@manypkg/find-root/1.1.0:
     resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==}
     dependencies:
@@ -441,6 +450,35 @@ packages:
       fastq: 1.13.0
     dev: true
 
+  /@rollup/plugin-typescript/8.3.4_oo3i3f3qmqiztdz5qgxrrjmd5e:
+    resolution: {integrity: sha512-wt7JnYE9antX6BOXtsxGoeVSu4dZfw0dU3xykfOQ4hC3EddxRbVG/K0xiY1Wup7QOHJcjLYXWAn0Kx9Z1SBHHg==}
+    engines: {node: '>=8.0.0'}
+    peerDependencies:
+      rollup: ^2.14.0
+      tslib: '*'
+      typescript: '>=3.7.0'
+    peerDependenciesMeta:
+      tslib:
+        optional: true
+    dependencies:
+      '@rollup/pluginutils': 3.1.0_rollup@2.77.2
+      resolve: 1.22.1
+      rollup: 2.77.2
+      typescript: 4.7.4
+    dev: true
+
+  /@rollup/pluginutils/3.1.0_rollup@2.77.2:
+    resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==}
+    engines: {node: '>= 8.0.0'}
+    peerDependencies:
+      rollup: ^1.20.0||^2.0.0
+    dependencies:
+      '@types/estree': 0.0.39
+      estree-walker: 1.0.1
+      picomatch: 2.3.1
+      rollup: 2.77.2
+    dev: true
+
   /@textlint/ast-node-types/12.2.1:
     resolution: {integrity: sha512-NXYza6aG1+LdZ4g83gjRhDht+gdrTjJYkdcQhpvzNCtTar/sVpaykkauRcAKLhkIWrQpfb311pfMlU6qNDW76Q==}
     dev: true
@@ -460,6 +498,10 @@ packages:
       - supports-color
     dev: true
 
+  /@types/estree/0.0.39:
+    resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==}
+    dev: true
+
   /@types/is-ci/3.0.0:
     resolution: {integrity: sha512-Q0Op0hdWbYd1iahB+IFNQcWXFq4O0Q5MwQP7uN0souuQ4rPg1vEYcnIOfr1gY+M+6rc8FGoRaBO1mOOvL29sEQ==}
     dependencies:
@@ -877,6 +919,10 @@ packages:
       wcwidth: 1.0.1
     dev: true
 
+  /buffer-from/1.1.2:
+    resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+    dev: true
+
   /call-bind/1.0.2:
     resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==}
     dependencies:
@@ -986,6 +1032,10 @@ packages:
     resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
     dev: true
 
+  /commander/2.20.3:
+    resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+    dev: true
+
   /concat-map/0.0.1:
     resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
     dev: true
@@ -1673,6 +1723,10 @@ packages:
     engines: {node: '>=4.0'}
     dev: true
 
+  /estree-walker/1.0.1:
+    resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==}
+    dev: true
+
   /estree-walker/2.0.2:
     resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
 
@@ -2195,6 +2249,15 @@ packages:
     resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
     dev: true
 
+  /jest-worker/26.6.2:
+    resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==}
+    engines: {node: '>= 10.13.0'}
+    dependencies:
+      '@types/node': 12.20.55
+      merge-stream: 2.0.0
+      supports-color: 7.2.0
+    dev: true
+
   /js-tokens/4.0.0:
     resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
     dev: true
@@ -2448,6 +2511,10 @@ packages:
       yargs-parser: 18.1.3
     dev: true
 
+  /merge-stream/2.0.0:
+    resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
+    dev: true
+
   /merge2/1.4.1:
     resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
     engines: {node: '>= 8'}
@@ -2848,6 +2915,12 @@ packages:
     engines: {node: '>=8'}
     dev: true
 
+  /randombytes/2.1.0:
+    resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+    dependencies:
+      safe-buffer: 5.2.1
+    dev: true
+
   /read-pkg-up/7.0.1:
     resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==}
     engines: {node: '>=8'}
@@ -2981,6 +3054,18 @@ packages:
       glob: 7.2.3
     dev: true
 
+  /rollup-plugin-terser/7.0.2_rollup@2.77.2:
+    resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==}
+    peerDependencies:
+      rollup: ^2.0.0
+    dependencies:
+      '@babel/code-frame': 7.18.6
+      jest-worker: 26.6.2
+      rollup: 2.77.2
+      serialize-javascript: 4.0.0
+      terser: 5.14.2
+    dev: true
+
   /rollup/2.77.2:
     resolution: {integrity: sha512-m/4YzYgLcpMQbxX3NmAqDvwLATZzxt8bIegO78FZLl+lAgKJBd1DRAOeEiZcKOIOPjxE6ewHWHNgGEalFXuz1g==}
     engines: {node: '>=10.0.0'}
@@ -3001,6 +3086,10 @@ packages:
       tslib: 2.4.0
     dev: false
 
+  /safe-buffer/5.2.1:
+    resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+    dev: true
+
   /safer-buffer/2.1.2:
     resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
     dev: true
@@ -3018,6 +3107,12 @@ packages:
       lru-cache: 6.0.0
     dev: true
 
+  /serialize-javascript/4.0.0:
+    resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==}
+    dependencies:
+      randombytes: 2.1.0
+    dev: true
+
   /set-blocking/2.0.0:
     resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
     dev: true
@@ -3080,6 +3175,13 @@ packages:
     resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
     engines: {node: '>=0.10.0'}
 
+  /source-map-support/0.5.21:
+    resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+    dependencies:
+      buffer-from: 1.1.2
+      source-map: 0.6.1
+    dev: true
+
   /source-map/0.6.1:
     resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
     engines: {node: '>=0.10.0'}
@@ -3199,6 +3301,17 @@ packages:
     engines: {node: '>=8'}
     dev: true
 
+  /terser/5.14.2:
+    resolution: {integrity: sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==}
+    engines: {node: '>=10'}
+    hasBin: true
+    dependencies:
+      '@jridgewell/source-map': 0.3.2
+      acorn: 8.7.1
+      commander: 2.20.3
+      source-map-support: 0.5.21
+    dev: true
+
   /text-table/0.2.0:
     resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
     dev: true