前端工程化之模块化开发 & webpack

模块化开发 & webpack

webpack面试相关

  1. 从0-1使用 webpack(vite) 进行项目搭建,不管是 vue,react 项目
  2. 对 webpack 过程的理解
  3. 常用的 loader 作用,原理
    原理:涉及 ast,比如 babel-loader 的作用,原理,将高级的语法通过ast转换成es5的语法
    还要具备 自定义loader 的能力
    像跨端解决方案
  4. 常用的plugins,loader作用和plugins作用,自定义自己的插件,插件机制,事件机制
    使用tapable,通过发布-订阅模式实现事件中心的机制,包含事件的注册,事件的触发等,插件提供apply的方法,在其当中对某个节点进行监听,等触发这个节点时候,webpack进入到当前回调当中,执行产品的逻辑。
  5. 异步组件,import 原理
  6. 优化
    (1)体积优化
    (2)构建速度优化

常用的构建工具:webpack,vite,rollup,esbuild,rspack

webpack

webpack 执行过程

  • 基本概念
    entry 入口,配置入口
  • module 模块
    从entry开始递归出所有的模块,需要组成chunk

webpack 世界里,一切皆模块

  • chunk 代码块,一个chunk是由多个模块所组成的
  • loader 模块转换器,像vue会调用vue-loader来进行转换,less调用less-loader,css调用css-loader
  • plugins 扩展插件,在特定时期广播相关事件,插件监听事件,在特定时期做对应的事情

webpack流程

  1. 初始化参数

    运行一个脚本

    webpack --watch

    传入相关参数,给到 webpack.config.js 文件当中,最终创建 webpack 实例化,会初始化参数,初始化参数后,会进行参数的合并,将当前脚本的参数和webpack参数进行合并,得出最终options

  2. 开始编译

    通过上一步得到的 options,触发 Compiler 实例,new Compiler(options)
    加载所有配置插件,进行初始化,相当于调用插件的 apply 方法,添加对某些事件的监听

    执行Compiler的 run 方法,开始执行编译,编译会分为如下几个阶段

    (1)确定入口 entry:{main: './src/index.js' }

    查找相关模块,根据不同模块,调用不同loader来对模块进行翻译处理,再通过递归的方式找出模块所依赖的模块,再递归的调用这样的步骤,调用不同loader解析当前loader,通过这样的过程形成模块的依赖树

    (2)make 阶段 => 形成模块依赖树的过程(modulegraph),每个模块调用 loader 处理=> seal 阶段 => 根据模块树来形成chunk树(chunkgraph),如果入口只有一个的话,所有的模块都会成为在chunkgraph子集 => emit 输出阶段 => 对每个chunk通过模板输出对应的文件内容 assets 到文件系统当中,最终形成 bundle资源

  3. 完成编译,输出了资源

整个过程流程图:

源码上看是经历了以下内容:

调用createCompiler,在new Compiler传入对应options,创建compiler实例

compiler实例后,会判断当前options是否是一个数组,如果是数组的话,会遍历当前插件列表,如果是function就call对应的方法,如果不是function的话,就调用apply方法传入对应的compiler

webpack还会执行相关的hook

webpack配置

  • entry:

    • string类型,'./app/entry' --- 一个入口
    • array类型:['./loaders/entry','./plugins/entry'] --- 多个入口
    • object类型:{a:'./app',b:'./src'} --- 多个入口
  • chunk的名称:(webpack会为每生成一个chunk而取一个名称,与entry配置是有关系的,如果entry配置string或array,就会只生成一个chunk,默认的名称是main)

    • entry Object,多chunk,根据object key命名生成chunk名称
    • chunk相关命名name:通过name的方式修改
      • hash值
        hash值与文件缓存是有一定关系的
        根据文件命名可以用强缓存,协商缓存
        后续需要减少更名,更名的话,文件缓存则失效,失效则要重新发送请求
        • hash 项目级别(非常少的使用)
          项目级别的hash,像js,css资源都用的同一个hash,那么其中一个改变了,整个hash都要改
        • chunkhash chunk级别的,针对每个代码块这样生成一个hash值,与js是相关联的
        • contenthash 文件内容级别,单文件内容生成hash,针对css文件
          => js文件使用chunkhash,css文件使用contenthash,这样互相则不影响,便于更好的利用浏览器缓存
  • publicPath

    提供一个url,作为其他地址引用的前缀

  • libraryTarget library 描述当前打包后的规范(commonJS,umd,module)

    • 基础包 或者类库 可能会用到
    • library 库的名字,像antd
      => 现在使用 rollup 来打基础包
  • module 针对模块处理的配置

    • 配置 rules,使用 test 匹配文件后缀,然后使用不同的 loader,做 use,include,exclude
  • resolve 在webpack启动时候如何找到所依赖的模块

    • alias
      {
      '@':'·/src'
      }
  • extensions:针对文件后缀的扩展,import文件后没有指定文件的后缀,这里制定了规则进行优先级解析

    例:extensions:['.js','.json'],使用 require('./data')

  • modules 在哪些目录去找第三方模块

    例:modules:['node_modules','./src/components']

  • output:输出文件内容,输出文件名等相关文件配置

总结

  • entry:配置入口,告诉webpack从哪里开始构建
  • output:配置输出文件内容,输出文件名等相关文件配置
  • resolve:如何寻找模块,配置相关的策略
  • module:文件解析和转换文件策略
  • plugins:大部分需求通过插件方式去实现

我们为什么需要对文件进行打包?

  • 对文件进行转换,为了更好地兼容性,研发进行提效,需要使用 es6/7/8 相关的语法,在某些浏览器上不支持,有各自的兼容性,需要进行降级处理,因此要引入 babel,polyfill 对语法进行兼容性处理
  • 针对不同的资源,需要打包到生产环境中进行处理
  • 对产物进行优化,代码丑化,出于安全性考虑,避免代码泄露,减少文件体积等

webpack打包实例

package.json

yaml 复制代码
{
  "name": "webpack-test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "build": "webpack --watch",
    "buildJson": "webpack --profile --json > stat.json"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "@babel/core": "7.24.3",
    "@babel/preset-env": "7.24.3",
    "@babel/preset-typescript": "7.24.1",
    "babel-loader": "9.1.3",
    "css-loader": "6.10.0",
    "html-loader": "^5.1.0",
    "html-webpack-plugin": "^5.6.0",
    "lodash-webpack-plugin": "0.11.6",
    "marked": "^14.1.1",
    "mini-css-extract-plugin": "^2.9.1",
    "style-loader": "3.3.4",
    "ts-loader": "^9.5.1",
    "typescript": "5.4.3",
    "webpack": "5.91.0",
    "webpack-bundle-analyzer": "4.10.1",
    "webpack-cli": "5.1.4",
    "webpack-dev-server": "^5.1.0",
    "thread-loader": "^4.0.2"
  },
  "dependencies": {
    "lodash": "^4.17.21"
  }
}

public/index.html

html 复制代码
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title><%= htmlWebpackPlugin.options.title %></title>
  </head>
  <body>
    <div id="app"></div>
  </body>
</html>

webpack配置分解

第一步
webpack.config.js
javascript 复制代码
module.exports = {
  mode: 'production', //模式
  entry: {
    main: './src/index.js', //配置入口
  },
  // 配置出口
  output: {
    clean: true, //每次打包前清除上次打包的内容
    filename: '[name]-[chunkhash:8].js', //使用chunkhash编码
    path: __dirname + '/dist', //配置输出路径
  }
}
src/index.js
javascript 复制代码
const name = 'vscode'

const sayHello = () => {
  console.log('first hello')
  return () => {
    foo()
    console.log('first hello222')
  }
}

打包命令:

pnpm run build

输出:dist/main-ab0d3eda.js

内容为空

=> 这是因为:webpack会对没有用到的代码做treeshaking,将没有用到的代码不会打包到最终的一个输出环境中

index.js文件修改成这样的话就有输出:

src/index.js
javascript 复制代码
const name = 'vscode'

const sayHello = () => {
  console.log('first hello')
}

sayHello()
dist/main-2784e090.js
javascript 复制代码
console.log("first hello");
第二步
webpack.config.js
javascript 复制代码
module.exports = {
  mode: 'production', //模式
  entry: {
    main: './src/index.js', //配置入口
  },
  // 配置出口
  output: {
    clean: true, //每次打包前清除上次打包的内容
    filename: '[name]-[chunkhash:8].js', //使用chunkhash编码
    path: __dirname + '/dist', //配置输出路径
    environment: {
      arrowFunction: false, //不允许输出箭头函数
    },
  },
  module: {
    rules: [
      {
        //对js文件进行babel-loader处理
        test: /\.js$/, 
        loader: 'babel-loader', 
        options: {
          presets: ['@babel/preset-env'], //相当于一组插件的集合,这组插件包含对高级语法的处理,比如说对高级语法的降级
        },
      },
    ],
  },
}
src/index.js
javascript 复制代码
const { foo } = require('./demo')

const name = 'vscode'

const sayHello = () => {
  console.log('first hello')
  return () => {
    foo()
    console.log('first hello222')
  }
}

console.log(sayHello())
src/demo.js
javascript 复制代码
export const foo = () => {
  console.log('foo')
}

打包后输出:

dist/main-8ead5737.js
javascript 复制代码
!function () { var o = { 565: function (o, e, t) { "use strict"; t.r(e), t.d(e, { foo: function () { return n } }); const n = () => { console.log("foo") } } }, e = {}; function t(n) { var r = e[n]; if (void 0 !== r) return r.exports; var l = e[n] = { exports: {} }; return o[n](l, l.exports, t), l.exports } t.d = function (o, e) { for (var n in e) t.o(e, n) && !t.o(o, n) && Object.defineProperty(o, n, { enumerable: !0, get: e[n] }) }, t.o = function (o, e) { return Object.prototype.hasOwnProperty.call(o, e) }, t.r = function (o) { "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(o, Symbol.toStringTag, { value: "Module" }), Object.defineProperty(o, "__esModule", { value: !0 }) }, function () { const { foo: o } = t(565); console.log((console.log("first hello"), () => { o(), console.log("first hello222") })) }() }();
第三步

babel-loader 不仅可以通过options进行配置,还可以通过 .babelrc 进行添加

  1. webpack.config.js:
javascript 复制代码
module.exports = {
	...
	module:{
	  rules:[
	  {
	     test: /\.js$/, //对js文件进行babel-loader处理
	     loader: 'babel-loader',
	     options:{
	     	presets: ['@babel/preset-env']   //相当于一组插件的集合,这组插件包含对高级语法的处理,比如说对高级语法的降级
	     }
	  }
	  ]
	}
}
  1. .babelrc:
javascript 复制代码
{
  "presets": ["@babel/preset-env"]   //"@babel/preset-react" 是在react工程中需要的,
                                     //"@babel/preset-typescript" 是在 typescript中需要的
}
webpack.config.js
javascript 复制代码
module.exports = {
  mode: 'production', //模式
  entry: {
    main: './src/index.js', //配置入口
  },
  // 配置出口
  output: {
    clean: true, //每次打包前清除上次打包的内容
    filename: '[name]-[chunkhash:8].js', //使用chunkhash编码
    path: __dirname + '/dist', //配置输出路径
    environment: {
      arrowFunction: false, //不允许输出箭头函数
    },
  },
  module: {
    rules: [
      {
        //对js文件进行babel-loader处理
        test: /\.js$/, 
        loader: 'babel-loader', 
        // options: {
        //   presets: ['@babel/preset-env'], //相当于一组插件的集合,这组插件包含对高级语法的处理,比如说对高级语法的降级
        // },
      },
    ],
  },
}
.babelrc

babel相关配置参考官网

javascript 复制代码
{
  "presets": ["@babel/preset-env"]  //"@babel/preset-react" 是在react工程中需要的
}
 
dist/main-8ead5737.js
javascript 复制代码
!function () { var o = { 565: function (o, e, t) { "use strict"; t.r(e), t.d(e, { foo: function () { return n } }); const n = () => { console.log("foo") } } }, e = {}; function t(n) { var r = e[n]; if (void 0 !== r) return r.exports; var l = e[n] = { exports: {} }; return o[n](l, l.exports, t), l.exports } t.d = function (o, e) { for (var n in e) t.o(e, n) && !t.o(o, n) && Object.defineProperty(o, n, { enumerable: !0, get: e[n] }) }, t.o = function (o, e) { return Object.prototype.hasOwnProperty.call(o, e) }, t.r = function (o) { "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(o, Symbol.toStringTag, { value: "Module" }), Object.defineProperty(o, "__esModule", { value: !0 }) }, function () { const { foo: o } = t(565); console.log((console.log("first hello"), () => { o(), console.log("first hello222") })) }() }();
第四步
src/index.css
css 复制代码
body {
  background-color: skyblue;
}

css需要index.html 兜底

public/index.html
html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
</body>
</html>
webpack.config.js
javascript 复制代码
const HtmlWebpackPlugin = require('html-webpack-plugin')

module.exports = {
  mode: 'production', //模式
  entry: {
    main: './src/index.js', //配置入口
  },
  // 配置出口
  output: {
    clean: true, //每次打包前清除上次打包的内容
    filename: '[name]-[chunkhash:8].js', //使用chunkhash编码
    path: __dirname + '/dist', //配置输出路径
    environment: {
      arrowFunction: false, //不允许输出箭头函数
    },
  },
  module: {
     rules: [
      {
        //对js文件进行babel-loader处理
        test: /\.js$/, 
        loader: 'babel-loader', 
        // options: {
        //   presets: ['@babel/preset-env'], //相当于一组插件的集合,这组插件包含对高级语法的处理,比如说对高级语法的降级
        // },
      },
      {
        // 对css文件进行处理
        test: /\.css$/,
        use: ['css-loader'], //使用css-loader
      }
    ],
  },
  plugins: [
    new HtmlWebpackPlugin({ //使用插件
      template: './public/index.html', //以这个index.html作为模板,将当前main中的src/index.js的chunk最终输出到这个index.html文件中
    })
  ],
}
src/index.js
javascript 复制代码
import css from './index.css'

console.log("css",css)

import { foo } from './demo'

const name = 'vscode'

const sayHello = () => {
  console.log('first hello')
  return () => {
    foo()
    console.log('first hello222')
  }
}

console.log(sayHello())

打包后输出

dist/main-8ead5737.js
javascript 复制代码
!function(){"use strict";var n,o={839:function(n){n.exports=function(n){var o=[];return o.toString=function(){return this.map((function(o){var t="",r=void 0!==o[5];return o[4]&&(t+="@supports (".concat(o[4],") {")),o[2]&&(t+="@media ".concat(o[2]," {")),r&&(t+="@layer".concat(o[5].length>0?" ".concat(o[5]):""," {")),t+=n(o),r&&(t+="}"),o[2]&&(t+="}"),o[4]&&(t+="}"),t})).join("")},o.i=function(n,t,r,c,e){"string"==typeof n&&(n=[[null,n,void 0]]);var i={};if(r)for(var u=0;u<this.length;u++){var a=this[u][0];null!=a&&(i[a]=!0)}for(var l=0;l<n.length;l++){var s=[].concat(n[l]);r&&i[s[0]]||(void 0!==e&&(void 0===s[5]||(s[1]="@layer".concat(s[5].length>0?" ".concat(s[5]):""," {").concat(s[1],"}")),s[5]=e),t&&(s[2]?(s[1]="@media ".concat(s[2]," {").concat(s[1],"}"),s[2]=t):s[2]=t),c&&(s[4]?(s[1]="@supports (".concat(s[4],") {").concat(s[1],"}"),s[4]=c):s[4]="".concat(c)),o.push(s))}},o}},326:function(n){n.exports=function(n){return n[1]}},238:function(n,o,t){t.d(o,{A:function(){return u}});var r=t(326),c=t.n(r),e=t(839),i=t.n(e)()(c());i.push([n.id,"body {\n  background-color: skyblue;\n}\n",""]);const u=i}},t={};function r(n){var c=t[n];if(void 0!==c)return c.exports;var e=t[n]={id:n,exports:{}};return o[n](e,e.exports,r),e.exports}r.n=function(n){var o=n&&n.__esModule?function(){return n.default}:function(){return n};return r.d(o,{a:o}),o},r.d=function(n,o){for(var t in o)r.o(o,t)&&!r.o(n,t)&&Object.defineProperty(n,t,{enumerable:!0,get:o[t]})},r.o=function(n,o){return Object.prototype.hasOwnProperty.call(n,o)},n=r(238),console.log("css",n.A),console.log((console.log("first hello"),function(){console.log("foo"),console.log("first hello222")}))}();
dist/index.html
html 复制代码
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width,initial-scale=1" />
    <title>Document</title>
    <script defer="defer" src="main-81ad2ac4.js"></script>
  </head>
  <body></body>
</html>

浏览器打开这个html页面:

第五步

要将上述css解析出来的字符串内容,加载到html文件当中,需要创建对应的style标签,将css资源注入

只需要更改 index.js文件:

src/index.js
javascript 复制代码
import css from './index.css'
import { foo } from "./demo";

console.log("css",css)

// 增加这一步
let style = document.createElement('style')
style.innerHTML = css[0][1]
document.head.appendChild(style)


const name = 'vscode'

const sayHello = () => {
  console.log('first hello')
  return () => {
    foo()
    console.log('first hello222')
  }
}

console.log(sayHello())
第六步

使用 style-loader ,只需要引入 index.css 即可,无需再创建style标签,将内容加入进去

webpack.config.js
javascript 复制代码
const HtmlWebpackPlugin = require('html-webpack-plugin')

module.exports = {
  mode: 'production', //模式
  entry: {
    main: './src/index.js', //配置入口
  },
  // 配置出口
  output: {
    clean: true, //每次打包前清除上次打包的内容
    filename: '[name]-[chunkhash:8].js', //使用chunkhash编码
    path: __dirname + '/dist', //配置输出路径
    environment: {
      arrowFunction: false, //不允许输出箭头函数
    },
  },
  module: {
     rules: [
      {
        //对js文件进行babel-loader处理
        test: /\.js$/, 
        loader: 'babel-loader', 
        // options: {
        //   presets: ['@babel/preset-env'], //相当于一组插件的集合,这组插件包含对高级语法的处理,比如说对高级语法的降级
        // },
      },
      {
        // 对css文件进行处理
        test: /\.css$/,
        use: ['style-loader','css-loader'], //使用css-loader
      }
    ],
  },
  plugins: [
    new HtmlWebpackPlugin({ //使用插件
      template: './public/index.html', //以这个index.html作为模板,将当前main中的src/index.js的chunk最终输出到这个index.html文件中
    })
  ],
}
src/index.js
javascript 复制代码
// import css from './index.css'
import './index.css'
import { foo } from "./demo";

// console.log("css",css)

// let style = document.createElement('style')
// style.innerHTML = css[0][1]
// document.head.appendChild(style)


const name = 'vscode'

const sayHello = () => {
  console.log('first hello')
  return () => {
    foo()
    console.log('first hello222')
  }
}

console.log(sayHello())
第六步

现在样式都在js文件中,如下:

  • dist/main-032fb792.js

文件中

这样是不合理的,会使得最终 js 文件会比较大

需要进行优化

将css文件单独提取出来,然后分开去加载,有利于将我们js文件体积尽可能小,提高整体效率

这里需要使用,MiniCssExtractPlugin 插件,帮助我们从 js 中提取出 css 内容

webpack.config.js
javascript 复制代码
const HtmlWebpackPlugin = require('html-webpack-plugin')
const MiniCssExtractPlugin = require("mini-css-extract-plugin");

module.exports = {
  mode: "production", //模式
  entry: {
    main: "./src/index.js", //配置入口
  },
  // 配置出口
  output: {
    clean: true, //每次打包前清除上次打包的内容
    filename: "[name]-[chunkhash:8].js", //使用chunkhash编码
    path: __dirname + "/dist", //配置输出路径
    environment: {
      arrowFunction: false, //不允许输出箭头函数
    },
  },
  module: {
    rules: [
      {
        //对js文件进行babel-loader处理
        test: /\.js$/,
        loader: "babel-loader",
        // options: {
        //   presets: ['@babel/preset-env'], //相当于一组插件的集合,这组插件包含对高级语法的处理,比如说对高级语法的降级
        // },
      },
      {
        // 对css文件进行处理
        test: /\.css$/,
        use: [MiniCssExtractPlugin.loader, "css-loader"], //使用css-loader。引入MiniCssExtractPlugin后,这里不需要style-loader了
      },
    ],
  },
  plugins: [
    new HtmlWebpackPlugin({
      //使用插件
      template: "./public/index.html", //以这个index.html作为模板,将当前main中的src/index.js的chunk最终输出到这个index.html文件中
    }),
    // 引入MiniCssExtractPlugin插件,将css文件单独抽离出来
    new MiniCssExtractPlugin({
      filename: '[name]-[contenthash:8].css', //配置filename,尽量使用contenthash配置命名策略,将css命名策略和js的命名策略分开,这样即便js文件发生变更,不会影响css文件命名变化,css还可以继续使用缓存机制
    }),
  ],
};
dist/index.html
html 复制代码
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width,initial-scale=1" />
    <title>Document</title>
    <script defer="defer" src="main-2aa125d4.js"></script>
    <link href="main-976349e4.css" rel="stylesheet" />
  </head>
  <body></body>
</html>
dist/main-976349e4.css
css 复制代码
body {
  background-color: skyblue;
}
dist/main-2aa125d4.js
javascript 复制代码
!function(){"use strict";console.log((console.log("first hello"),function(){console.log("foo"),console.log("first hello222")}))}();

这样即使改了 js 文件内容,css文件是不会变的

重新执行 pnpm run build 命令后

浏览器状态有时是 200,有时是 304,就是充分利用了浏览器的协商缓存

第七步:自定义loader

上述学习了几个loader的使用,接下来学习如何自定义自己的loader

创建 loaders 文件夹,将自定义的loader放在这个文件夹下

loader 像是 翻译官 一样

一个 loader 职责是单一的,只需要完成一种转换,如果一个源文件需要多个步骤转换的话,则需要多个loader去配合处理

就像刚才的,css-loader,解析 css内容变成字符串,而 style-loader 就是把解析出来的字符串挂载到 html 当中

每个loader接收对应的字符串,处理完后将结果交给下一个接着处理,将最终loader处理的结果交给 webpack,这就是loader的职责

在loader当中,通过 this.getOptions()就可以获取到当前相关的配置内容,这里的 this,就是webpack上下文对我们进行填充的

  • resolveLoader:webpack能够去loaders这个文件夹去解析自定义的loader
  • 有两种类型的loader:同步loader,this.callback;异步loader ,this.async。
    需要在loader中进行声明,声明是同步的loader还是异步的loader,异步需要等异步结构返回以后

webpack整个构建流程是都是基于事件驱动tapable钩子系统

是通过 一个任务队列的方式去管理整个模块的解析,加载和转换,打包这样的一个过程

并且webpack处理的整个过程是单线程的,如果有一些异步的任务,通过队列的方式阻止了阻塞的情况

针对同步任务:解析当前的模块,路径,调用loader,最终等待loader的结果,生成最终的模块代码,再调用其他的loader进行处理。如果是同步任务,会占用webpack整个执行的过程

针对异步任务:会先声明是异步loader,webpack则不会等待当前的结果,转而执行别的任务,执行其他的非当前路径下的任务,更高效的利用当前整个线程

异步loader,会在 读取文件,请求api的时候使用,等结果以后会调用callback

callback=this.async

callback(error,result,sourceMap)

等异步结果回来以后,会通知webpack,执行callback,拿到当前回调,继续回到任务队列,将loader处理的结果交给下一个loader去处理

webpack.config.js

将babel-loader改成自己的loader

javascript 复制代码
const HtmlWebpackPlugin = require('html-webpack-plugin')
const MiniCssExtractPlugin = require("mini-css-extract-plugin");

module.exports = {
  mode: "production", //模式
  entry: {
    main: "./src/index.js", //配置入口
  },
  // 配置出口
  output: {
    clean: true, //每次打包前清除上次打包的内容
    filename: "[name]-[chunkhash:8].js", //使用chunkhash编码
    path: __dirname + "/dist", //配置输出路径
    environment: {
      arrowFunction: false, //不允许输出箭头函数
    },
  },
  resolveLoader: {
    modules: ["node_modules", "./loaders"], //解析本地的loader,优先从node_modules中查找,找不到再从loaders中查找
  },
  module: {
    rules: [
      {
        //对js文件进行babel-loader处理
        test: /\.js$/,
        // loader: "babel-loader",
        // options: {
        //   presets: ['@babel/preset-env'], //相当于一组插件的集合,这组插件包含对高级语法的处理,比如说对高级语法的降级
        // },
        //
        // loader: "self-loader", //使用自定义的loader
        use: [
          {
            loader: "self-loader", //使用数组表示
            options: {
              presets: ["@babel/preset-env"],
            },
          },
        ],
      },
      {
        // 对css文件进行处理
        test: /\.css$/,
        use: [MiniCssExtractPlugin.loader, "css-loader"], //使用css-loader。引入MiniCssExtractPlugin后,这里不需要style-loader了
      },
    ],
  },
  plugins: [
    new HtmlWebpackPlugin({
      //使用插件
      template: "./public/index.html", //以这个index.html作为模板,将当前main中的src/index.js的chunk最终输出到这个index.html文件中
    }),
    // 引入MiniCssExtractPlugin插件,将css文件单独抽离出来
    new MiniCssExtractPlugin({
      filename: "[name]-[contenthash:8].css", //配置filename,尽量使用contenthash配置命名策略,将css命名策略和js的命名策略分开,这样即便js文件发生变更,不会影响css文件命名变化,css还可以继续使用缓存机制
    }),
  ],
};
loaders/self-loader.js
javascript 复制代码
const babelCore = require('@babel/core')
module.exports = function (source) {
  console.log("first argument", source);

  //   同步写法
  const options = this.getOptions();
  //   return babelCore.transform(source, options).code

  //   异步写法
  const callback = this.async();

  // 使用ast解析当前js,调用babelCore
  babelCore.transform(source, options, function (err, result) {
    // 回调中处理相关逻辑
    if (err) { 
      // 异常
      callback(err);
    } else {
      // 正常
      callback(null, result.code); //不用return了,使用callback将处理的结果交还给webpack
    }
  });
}
dist/main-fc5c0094.js
javascript 复制代码
!function(){"use strict";var o={360:function(o,e){Object.defineProperty(e,"__esModule",{value:!0}),e.foo=void 0,e.foo=function(){console.log("foo")}},461:function(o,e,n){n.r(e)}},e={};function n(t){var r=e[t];if(void 0!==r)return r.exports;var l=e[t]={exports:{}};return o[t](l,l.exports,n),l.exports}n.r=function(o){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(o,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(o,"__esModule",{value:!0})},function(){n(461);var o=n(360);console.log((console.log("first hello1111124141"),function(){(0,o.foo)(),console.log("first hello222")}))}()}();

补充:

loader顺序:从右往左,会将右边loader处理结果给到左边的loader,再将左边的loader处理结果给到它左边的loader

第八步:markdown文件解析

解析markdown文件到html页面上

webpack.config.js
javascript 复制代码
const HtmlWebpackPlugin = require('html-webpack-plugin')
const MiniCssExtractPlugin = require("mini-css-extract-plugin");

module.exports = {
  mode: "production", //模式
  entry: {
    main: "./src/index.js", //配置入口
  },
  // 配置出口
  output: {
    clean: true, //每次打包前清除上次打包的内容
    filename: "[name]-[chunkhash:8].js", //使用chunkhash编码
    path: __dirname + "/dist", //配置输出路径
    environment: {
      arrowFunction: false, //不允许输出箭头函数
    },
  },
  resolveLoader: {
    modules: ["node_modules", "./loaders"], //解析本地的loader,优先从node_modules中查找,找不到再从loaders中查找
  },
  module: {
    rules: [
      {
        //对js文件进行babel-loader处理
        test: /\.js$/,
        // loader: "babel-loader",
        // options: {
        //   presets: ['@babel/preset-env'], //相当于一组插件的集合,这组插件包含对高级语法的处理,比如说对高级语法的降级
        // },
        //
        // loader: "self-loader", //使用自定义的loader
        use: [
          {
            loader: "self-loader", //使用数组表示
            options: {
              presets: ["@babel/preset-env"],
            },
          },
        ],
      },
      {
        // 对css文件进行处理
        test: /\.css$/,
        use: [MiniCssExtractPlugin.loader, "css-loader"], //使用css-loader。引入MiniCssExtractPlugin后,这里不需要style-loader了
      },
      {
        // 对md文件进行处理
        test: /\.md$/,
        use: ["html-loader", "markdown-loader"],//markdown-loader将markdown文件转换为html内容,html-loader将html内容转换为js模块
      },
    ],
  },
  plugins: [
    new HtmlWebpackPlugin({
      //使用插件
      template: "./public/index.html", //以这个index.html作为模板,将当前main中的src/index.js的chunk最终输出到这个index.html文件中
    }),
    // 引入MiniCssExtractPlugin插件,将css文件单独抽离出来
    new MiniCssExtractPlugin({
      filename: "[name]-[contenthash:8].css", //配置filename,尽量使用contenthash配置命名策略,将css命名策略和js的命名策略分开,这样即便js文件发生变更,不会影响css文件命名变化,css还可以继续使用缓存机制
    }),
  ],
};
loaders/markdown-loader.js
javascript 复制代码
// 引入marked对markdown文件进行解析
const { marked } = require('marked')
module.exports = function (source) {
  // 将整个内容转化为html标签
  const ret = marked.parse(source)
  console.log('markdown ret', ret)
  return ret
}
public/index.html
html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <div id="app"></div>
</body>
</html>
src/doc.md
html 复制代码
# 模块化开发 & webpack

1. 从 0-1 使用 webpack(vite) 进行项目搭建 vue react
2. 对 webpack 过程的理解
3. 常用的 loader 作用的
   原理 ast babel-loader 自定义自己的 loader
4. 常用的 plugins 自定义自己的插件 机制 事件机制 tapable
5. 异步组件 import 原理
6. 优化
   体积:
   速度:

7. webpack
8. vite 特性 vue?create-vite react vue
9. rollup
10. esbuild
11. rspack

### webpack 执行过程

- 基本概念
- entry 入口
- module 模块
- chunk 代码块 一个 chunk 多个模块组合而成的
- loader 模块转换器
- plugin 扩展插件 广播事件 插件监听事件 对应的事情

#### 流程

- 初始化参数 合并参数 得出最终的 options
- 开始编译 new Compiler(options) 加载所有配置插件 初始化 apply
  执行 run 开始执行编译
  - 确定入口 entry:{main: './src/index.js'}
  - make => modulegraph 每个模块调用 loader 处理 => seal => chunkgraph => emit 输出 =》文件内容 assets bundle
- 完成编译 输出了资源

	```js
	const createCompiler = (rawOptions) => {
	  const options = getNormalizedWebpackOptions(rawOptions)
	  applyWebpackOptionsBaseDefaults(options)
	  const compiler = new Compiler(options.context, options)
	  new NodeEnvironmentPlugin({
	    infrastructureLogging: options.infrastructureLogging,
	  }).apply(compiler)
	  if (Array.isArray(options.plugins)) {
	    for (const plugin of options.plugins) {
	      if (typeof plugin === 'function') {
	        plugin.call(compiler, compiler)
	      } else {
	        plugin.apply(compiler)
	      }
	    }
	  }
	  applyWebpackOptionsDefaults(options)
	  compiler.hooks.environment.call()
	  compiler.hooks.afterEnvironment.call()
	  new WebpackOptionsApply().process(options, compiler)
	  compiler.hooks.initialize.call() // 抛出初始化结束事件
	  return compiler
	}
	```
### webpack 配置

- entry:
  string './app/entry'
  array: ['./loaders/entry', './plugins/entry']
  object {a: './app', b: './src'}

- chunk 的名称 main
- entry Object 多 chunk object key 命名生成 chunk 名称
  name
  文件缓存

  - hash 项目级别 js css
  - chunkhash chunk 级别的 js
  - contenthash 文件内容级别 单文件内容生成 hash css
    =》便于更好的利用浏览器缓存

- publicPath
  url 前缀
- libraryTarget library - 基础包 或者类库 - libraryTarget commonjs umd module - library antd
  => rollup

- module
  - rules test use include exclude
- resolve 如何找到所依赖的模块
  - alias
    {
    '@': './src'
    }
- extensions: ['.js','.json'] require('./data')
- modules:['node_modules', './src/components'] 去那些目录找第三方模块

### 总结

- entry
- output
- resolve 寻找依赖模块
- module 文件解析和转换文件策略
- plugin 大部分需求

### 我们为什么需要对文件打包

- 对文件转换 为了更好地兼容性 babel polyfill
- 不同资源进行处理
- 产物优化 代码丑化 减少文件体积等

treeshaking

### 自定义 loader

一个 loader 职责单一 只需要完成一种转换

this.getOptions()

- resolveLoader
- 有两种类型 loader 同步 this.callback 异步 this。async

通过任务队列的方式 完成 解析 加载 和转换 打包的过程 单线程
同步任务
异步 loader 读取文件 请求 api
callback = this.async

callback(error, result, sourceMap)

loader 顺序 从右向左
src/index.js
javascript 复制代码
// import css from './index.css'
import './index.css'
import { foo } from "./demo";
import doc from "./doc.md";

console.log(doc);
// console.log("css",css)

// // 增加这一步
// let style = document.createElement('style')
// style.innerHTML = css[0][1]
// document.head.appendChild(style)

// 手动挂载markdown解析得到的文件内容
const renderMd = () => {
  const app = document.getElementById('app')
  const div = document.createElement('div')
  div.innerHTML = doc
  app.appendChild(div)
}
renderMd()

const name = 'vscode'

const sayHello = () => {
  console.log('first hello1111124141')
  return () => {
    foo()
    console.log('first hello222')
  }
}

console.log(sayHello())

dist/index.html 执行结果:

第九步:多入口配置

增加几个htmlPlugin就可以了

webpack.config.js
javascript 复制代码
const HtmlWebpackPlugin = require('html-webpack-plugin')
const MiniCssExtractPlugin = require("mini-css-extract-plugin");

module.exports = {
  mode: "production", //模式
  entry: {
    main: "./src/index.js", //配置入口
    other: "./src/other.js",
  },
  // 配置出口
  output: {
    clean: true, //每次打包前清除上次打包的内容
    filename: "[name]-[chunkhash:8].js", //使用chunkhash编码
    path: __dirname + "/dist", //配置输出路径
    environment: {
      arrowFunction: false, //不允许输出箭头函数
    },
  },
  resolveLoader: {
    modules: ["node_modules", "./loaders"], //解析本地的loader,优先从node_modules中查找,找不到再从loaders中查找
  },
  module: {
    rules: [
      {
        //对js文件进行babel-loader处理
        test: /\.js$/,
        // loader: "babel-loader",
        // options: {
        //   presets: ['@babel/preset-env'], //相当于一组插件的集合,这组插件包含对高级语法的处理,比如说对高级语法的降级
        // },
        //
        // loader: "self-loader", //使用自定义的loader
        use: [
          {
            loader: "self-loader", //使用数组表示
            options: {
              presets: ["@babel/preset-env"],
            },
          },
        ],
      },
      {
        // 对css文件进行处理
        test: /\.css$/,
        use: [MiniCssExtractPlugin.loader, "css-loader"], //使用css-loader。引入MiniCssExtractPlugin后,这里不需要style-loader了
      },
      {
        // 对md文件进行处理
        test: /\.md$/,
        use: ["html-loader", "markdown-loader"], //markdown-loader将markdown文件转换为html内容,html-loader将html内容转换为js模块
      },
    ],
  },
  plugins: [
    new HtmlWebpackPlugin({
      //使用插件
      template: "./public/index.html", //以这个index.html作为模板,将当前main中的src/index.js的chunk最终输出到这个index.html文件中
      // 增加配置
      filename: "index.html",
      chunks: ["main"],
      title: "encode",
    }),
    new HtmlWebpackPlugin({
      template: './public/other.html',
      filename: 'other.html',
      chunks: ['other'],
      inject: 'body', //注入到body当中
      title: 'other',
    }),
    // 引入MiniCssExtractPlugin插件,将css文件单独抽离出来
    new MiniCssExtractPlugin({
      filename: "[name]-[contenthash:8].css", //配置filename,尽量使用contenthash配置命名策略,将css命名策略和js的命名策略分开,这样即便js文件发生变更,不会影响css文件命名变化,css还可以继续使用缓存机制
    }),
  ],
};
public/index.html
html 复制代码
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title><%= htmlWebpackPlugin.options.title %></title>
  </head>
  <body>
    <div id="app"></div>
  </body>
</html>
public/other.html
html 复制代码
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title><%= htmlWebpackPlugin.options.title %></title>
  </head>
  <body></body>
</html>
src/other.js
javascript 复制代码
console.log('Running')

重新执行 pnpm run build 后

dist/index.html
html 复制代码
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width,initial-scale=1" />
    <title>encode</title>
    <script defer="defer" src="main-b7762859.js"></script>
    <link href="main-976349e4.css" rel="stylesheet" />
  </head>
  <body>
    <div id="app"></div>
  </body>
</html>
dist/main-b7762859.js
javascript 复制代码
!function(){"use strict";var l={360:function(l,i){Object.defineProperty(i,"__esModule",{value:!0}),i.foo=void 0,i.foo=function(){console.log("foo")}},960:function(l,i,e){e.r(i),e.d(i,{default:function(){return o}});const o='<h1>模块化开发 &amp; webpack</h1> <ol> <li><p>从 0-1 使用 webpack(vite) 进行项目搭建 vue react</p> </li> <li><p>对 webpack 过程的理解</p> </li> <li><p>常用的 loader 作用的 原理 ast babel-loader 自定义自己的 loader</p> </li> <li><p>常用的 plugins 自定义自己的插件 机制 事件机制 tapable</p> </li> <li><p>异步组件 import 原理</p> </li> <li><p>优化 体积: 速度:</p> </li> <li><p>webpack</p> </li> <li><p>vite 特性 vue?create-vite react vue</p> </li> <li><p>rollup</p> </li> <li><p>esbuild</p> </li> <li><p>rspack</p> </li> </ol> <h3>webpack 执行过程</h3> <ul> <li>基本概念</li> <li>entry 入口</li> <li>module 模块</li> <li>chunk 代码块 一个 chunk 多个模块组合而成的</li> <li>loader 模块转换器</li> <li>plugin 扩展插件 广播事件 插件监听事件 对应的事情</li> </ul> <h4>流程</h4> <ul> <li>初始化参数 合并参数 得出最终的 options</li> <li>开始编译 new Compiler(options) 加载所有配置插件 初始化 apply 执行 run 开始执行编译<ul> <li>确定入口 entry:{main: &#39;./src/index.js&#39;}</li> <li>make =&gt; modulegraph 每个模块调用 loader 处理 =&gt; seal =&gt; chunkgraph =&gt; emit 输出 =》文件内容 assets bundle</li> </ul> </li> <li>完成编译 输出了资源</li> </ul> <pre><code class="language-js">const createCompiler = (rawOptions) =&gt; {\n  const options = getNormalizedWebpackOptions(rawOptions)\n  applyWebpackOptionsBaseDefaults(options)\n  const compiler = new Compiler(options.context, options)\n  new NodeEnvironmentPlugin({\n    infrastructureLogging: options.infrastructureLogging,\n  }).apply(compiler)\n  if (Array.isArray(options.plugins)) {\n    for (const plugin of options.plugins) {\n      if (typeof plugin === &#39;function&#39;) {\n        plugin.call(compiler, compiler)\n      } else {\n        plugin.apply(compiler)\n      }\n    }\n  }\n  applyWebpackOptionsDefaults(options)\n  compiler.hooks.environment.call()\n  compiler.hooks.afterEnvironment.call()\n  new WebpackOptionsApply().process(options, compiler)\n  compiler.hooks.initialize.call() // 抛出初始化结束事件\n  return compiler\n}\n</code></pre> <h3>webpack 配置</h3> <ul> <li><p>entry: string &#39;./app/entry&#39; array: [&#39;./loaders/entry&#39;, &#39;./plugins/entry&#39;] object {a: &#39;./app&#39;, b: &#39;./src&#39;}</p> </li> <li><p>chunk 的名称 main</p> </li> <li><p>entry Object 多 chunk object key 命名生成 chunk 名称 name 文件缓存</p> <ul> <li>hash 项目级别 js css</li> <li>chunkhash chunk 级别的 js</li> <li>contenthash 文件内容级别 单文件内容生成 hash css =》便于更好的利用浏览器缓存</li> </ul> </li> <li><p>publicPath url 前缀</p> </li> <li><p>libraryTarget library - 基础包 或者类库 - libraryTarget commonjs umd module - library antd =&gt; rollup</p> </li> <li><p>module</p> <ul> <li>rules test use include exclude</li> </ul> </li> <li><p>resolve 如何找到所依赖的模块</p> <ul> <li>alias { &#39;@&#39;: &#39;./src&#39; }</li> </ul> </li> <li><p>extensions: [&#39;.js&#39;,&#39;.json&#39;] require(&#39;./data&#39;)</p> </li> <li><p>modules:[&#39;node_modules&#39;, &#39;./src/components&#39;] 去那些目录找第三方模块</p> </li> </ul> <h3>总结</h3> <ul> <li>entry</li> <li>output</li> <li>resolve 寻找依赖模块</li> <li>module 文件解析和转换文件策略</li> <li>plugin 大部分需求</li> </ul> <h3>我们为什么需要对文件打包</h3> <ul> <li>对文件转换 为了更好地兼容性 babel polyfill</li> <li>不同资源进行处理</li> <li>产物优化 代码丑化 减少文件体积等</li> </ul> <p>treeshaking</p> <h3>自定义 loader</h3> <p>一个 loader 职责单一 只需要完成一种转换</p> <p>this.getOptions()</p> <ul> <li>resolveLoader</li> <li>有两种类型 loader 同步 this.callback 异步 this。async</li> </ul> <p>通过任务队列的方式 完成 解析 加载 和转换 打包的过程 单线程 同步任务 异步 loader 读取文件 请求 api callback = this.async</p> <p>callback(error, result, sourceMap)</p> <p>loader 顺序 从右向左</p> '},461:function(l,i,e){e.r(i)}},i={};function e(o){var n=i[o];if(void 0!==n)return n.exports;var p=i[o]={exports:{}};return l[o](p,p.exports,e),p.exports}e.d=function(l,i){for(var o in i)e.o(i,o)&&!e.o(l,o)&&Object.defineProperty(l,o,{enumerable:!0,get:i[o]})},e.o=function(l,i){return Object.prototype.hasOwnProperty.call(l,i)},e.r=function(l){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(l,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(l,"__esModule",{value:!0})},function(){e(461);var l,i,o,n=e(360),p=(l=e(960))&&l.__esModule?l:{default:l};console.log(p.default),i=document.getElementById("app"),(o=document.createElement("div")).innerHTML=p.default,i.appendChild(o),console.log((console.log("first hello1111124141"),function(){(0,n.foo)(),console.log("first hello222")}))}()}();
dist/main-976349e4.css
css 复制代码
body {
  background-color: skyblue;
}
dist/other.html
html 复制代码
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width,initial-scale=1" />
    <title>other</title>
  </head>
  <body>
    <script defer="defer" src="other-8cddf869.js"></script>
  </body>
</html>
dist/other-8cddf869.js
javascript 复制代码
!function(){"use strict";console.log("Running")}();

页面:

index.html 没有变

other.html:

第十步:自定义相关插件

生命周期中广播事件,plugins监听事件,在合适的时机通过webpack提供的api改变输出的结果

Compiler:包含webpack环境配置的信息,options,loaders,plugins

全局唯一的

Compilation:包含当前模块资源,编译生成资源,变化的文件内容

事件流:webpack通过 tapable 方式组织复杂的生产线,提供了一系列发布订阅的api,注册事件,执行事件

  • sync 同步事件
    注册事件的时候用同步的方式去执行
  • async 异步事件
javascript 复制代码
const {
  //同步钩子
  SyncHook,  
  SyncBailHook,
  SyncWaterfallHook,
  SyncLoopHook,
  //异步钩子
  AsyncParallelHook,
  AsyncParallelBailHook,
  AsyncSeriesHook,
  AsyncSeriesBailHook,
  AsyncSeriesWaterfallHook,
} = require('tapable')

// 初始化同步钩子
const hook = new SyncHook(['compilation', 'arg2', 'arg3'])

// 注册事件
hook.tap('flag1', (compilation, arg2, arg3) => {
  console.log('flag1:', arg1, arg2, arg3)
})

hook.tap('flag2', (compilation, arg2, arg3) => {
  console.log('flag2:', arg1, arg2, arg3)
})
// 调用事件并传递执行参数
hook.call({}, 'li', 'si')

Compiler 钩子

  • environment 同步
  • afterEnvironment 同步
  • initialize 同步
  • beforeRun
  • ...

需求:开发插件:输出当前打包之后的所有的信息内容以及输出有多少个文件,和文件名。输出 fileList.md,包含:文件资源数量,每个文件的文件名信息

创建 plugins/fileList.js

Compilation 钩子

  • rebuildModule
  • failedModule
  • succeedModule
  • finishedModule
plugins/fileList.js
javascript 复制代码
class FileListPlugin {
  constructor(options = {}) {
    this.options = options
    this.filename = options.filename || 'filelist.md'
  }
  // 每个插件提供的apply方法
  apply(compiler) {
    // emit钩子:输出 asset 到 output 目录之前执行。这个钩子 不会 被复制到子编译器。 
    compiler.hooks.emit.tap("FileListPlugin", (compilation) => {
      const { filename: fileName } = this;

      // 拿到静态资源
      const { assets } = compilation;

      // 统计文件数量 
      const fileCount = Object.keys(assets).length;

      let content = `# 本次打包共生成${fileCount}个文件\n\n`;

      // 遍历静态资源,拼接文件内容
      for (let filename in assets) {
        content += `- ${filename}\n`;
      }

      // 追加一个 fileList文件
      //   filelist.md
      compilation.assets[fileName] = {
        source() {
          return content;
        },
        size() {
          return content.length;
        },
      };
    });
  }
}

exports = module.exports = FileListPlugin
webpack.config.js
javascript 复制代码
const HtmlWebpackPlugin = require('html-webpack-plugin')
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
//引入自定义插件
const FileListPlugin = require("./plugins/fileList");

module.exports = {
  mode: "production", //模式
  entry: {
    main: "./src/index.js", //配置入口
    other: "./src/other.js",
  },
  // 配置出口
  output: {
    clean: true, //每次打包前清除上次打包的内容
    filename: "[name]-[chunkhash:8].js", //使用chunkhash编码
    path: __dirname + "/dist", //配置输出路径
    environment: {
      arrowFunction: false, //不允许输出箭头函数
    },
  },
  resolveLoader: {
    modules: ["node_modules", "./loaders"], //解析本地的loader,优先从node_modules中查找,找不到再从loaders中查找
  },
  module: {
    rules: [
      {
        //对js文件进行babel-loader处理
        test: /\.js$/,
        // loader: "babel-loader",
        // options: {
        //   presets: ['@babel/preset-env'], //相当于一组插件的集合,这组插件包含对高级语法的处理,比如说对高级语法的降级
        // },
        //
        // loader: "self-loader", //使用自定义的loader
        use: [
          {
            loader: "self-loader", //使用数组表示
            options: {
              presets: ["@babel/preset-env"],
            },
          },
        ],
      },
      {
        // 对css文件进行处理
        test: /\.css$/,
        use: [MiniCssExtractPlugin.loader, "css-loader"], //使用css-loader。引入MiniCssExtractPlugin后,这里不需要style-loader了
      },
      {
        // 对md文件进行处理
        test: /\.md$/,
        use: ["html-loader", "markdown-loader"], //markdown-loader将markdown文件转换为html内容,html-loader将html内容转换为js模块
      },
    ],
  },
  plugins: [
    new HtmlWebpackPlugin({
      //使用插件
      template: "./public/index.html", //以这个index.html作为模板,将当前main中的src/index.js的chunk最终输出到这个index.html文件中
      // 增加配置
      filename: "index.html",
      chunks: ["main"],
      title: "encode",
    }),
    new HtmlWebpackPlugin({
      template: "./public/other.html",
      filename: "other.html",
      chunks: ["other"],
      inject: "body", //注入到body当中
      title: "other",
    }),
    // 引入MiniCssExtractPlugin插件,将css文件单独抽离出来
    new MiniCssExtractPlugin({
      filename: "[name]-[contenthash:8].css", //配置filename,尽量使用contenthash配置命名策略,将css命名策略和js的命名策略分开,这样即便js文件发生变更,不会影响css文件命名变化,css还可以继续使用缓存机制
    }),
    // 引入自定义插件
    new FileListPlugin()
  ],
};

重新执行 pnpm run build,dist得到:

dist/filelist.md
html 复制代码
# 本次打包共生成5个文件

- main-b7762859.js
- other-8cddf869.js
- index.html
- other.html
- main-976349e4.css
第十一步:异步组件打包
src/asyncModule.js
javascript 复制代码
export const bar = () => {
  console.log("first bar");
  return "bar";
};
src/index.js
javascript 复制代码
// import css from './index.css'
import './index.css'
import { foo } from "./demo";
// import doc from "./doc.md";

// console.log(doc);
// console.log("css",css)

// // 增加这一步
// let style = document.createElement('style')
// style.innerHTML = css[0][1]
// document.head.appendChild(style)

// 手动挂载markdown解析得到的文件内容
// const renderMd = () => {
//   const app = document.getElementById('app')
//   const div = document.createElement('div')
//   div.innerHTML = doc
//   app.appendChild(div)
// }
// renderMd()

const name = 'vscode'

const sayHello = () => {
  console.log('first hello1111124141')
  return () => {
    foo()
    console.log('first hello222')
  }
}

console.log(sayHello())


// 非首屏的方式,可以将当前文件内容单独抽出来
import(/* webpackChunkName: "asyncModule" */ './asyncModule').then((res) => {
  res.bar()
})
webpack.config.js
javascript 复制代码
const HtmlWebpackPlugin = require('html-webpack-plugin')
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const FileListPlugin = require("./plugins/fileList");

module.exports = {
  mode: "development", //模式
  entry: {
    main: "./src/index.js", //配置入口
    other: "./src/other.js",
  },
  // 配置出口
  output: {
    clean: true, //每次打包前清除上次打包的内容
    filename: "[name]-[chunkhash:8].js", //使用chunkhash编码
    path: __dirname + "/dist", //配置输出路径
    environment: {
      arrowFunction: false, //不允许输出箭头函数
    },
  },
  resolveLoader: {
    modules: ["node_modules", "./loaders"], //解析本地的loader,优先从node_modules中查找,找不到再从loaders中查找
  },
  module: {
    rules: [
      {
        //对js文件进行babel-loader处理
        test: /\.js$/,
        // loader: "babel-loader",
        // options: {
        //   presets: ['@babel/preset-env'], //相当于一组插件的集合,这组插件包含对高级语法的处理,比如说对高级语法的降级
        // },
        //
        // loader: "self-loader", //使用自定义的loader
        use: [
          // {
          //   loader: "self-loader", //使用数组表示
          //   options: {
          //     presets: ["@babel/preset-env"],
          //   },
          // },
          // 还原js处理
          {
            loader: "babel-loader", 
          },
        ],
      },
      {
        // 对css文件进行处理
        test: /\.css$/,
        use: [MiniCssExtractPlugin.loader, "css-loader"], //使用css-loader。引入MiniCssExtractPlugin后,这里不需要style-loader了
      },
      {
        // 对md文件进行处理
        test: /\.md$/,
        use: ["html-loader", "markdown-loader"], //markdown-loader将markdown文件转换为html内容,html-loader将html内容转换为js模块
      },
    ],
  },
  plugins: [
    new HtmlWebpackPlugin({
      //使用插件
      template: "./public/index.html", //以这个index.html作为模板,将当前main中的src/index.js的chunk最终输出到这个index.html文件中
      // 增加配置
      filename: "index.html",
      chunks: ["main"],
      title: "encode",
    }),
    new HtmlWebpackPlugin({
      template: "./public/other.html",
      filename: "other.html",
      chunks: ["other"],
      inject: "body", //注入到body当中
      title: "other",
    }),
    // 引入MiniCssExtractPlugin插件,将css文件单独抽离出来
    new MiniCssExtractPlugin({
      filename: "[name]-[contenthash:8].css", //配置filename,尽量使用contenthash配置命名策略,将css命名策略和js的命名策略分开,这样即便js文件发生变更,不会影响css文件命名变化,css还可以继续使用缓存机制
    }),
    // 引入自定义插件
    new FileListPlugin(),
  ],
};

重新执行完 pnpm run build 后,dist目录:

dist/asyncModule-35130a95.js
javascript 复制代码
"use strict";
/*
 * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
 * This devtool is neither made for production nor for readable output files.
 * It uses "eval()" calls to create a separate source file in the browser devtools.
 * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
 * or disable the default devtool with "devtool: false".
 * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
 */
(self["webpackChunkwebpack_1102"] = self["webpackChunkwebpack_1102"] || []).push([["asyncModule"],{

/***/ "./src/asyncModule.js":
/*!****************************!*\
  !*** ./src/asyncModule.js ***!
  \****************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {

eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   bar: function() { return /* binding */ bar; }\n/* harmony export */ });\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nvar bar = function bar() {\n  var _console;\n  /* eslint-disable */(_console = console).log.apply(_console, _toConsumableArray(oo_oo(\"431134390_2_2_2_26_4\", \"first bar\")));\n  return \"bar\";\n};\n/* istanbul ignore next */ /* c8 ignore start */ /* eslint-disable */\n;\nfunction oo_cm() {\n  try {\n    return (0, eval)(\"globalThis._console_ninja\") || (0, eval)(\"/* https://github.com/wallabyjs/console-ninja#how-does-it-work */'use strict';var _0x240781=_0x1725;(function(_0x384066,_0x1de02f){var _0x44bf57=_0x1725,_0x475270=_0x384066();while(!![]){try{var _0x249647=parseInt(_0x44bf57(0x116))/0x1*(-parseInt(_0x44bf57(0x186))/0x2)+parseInt(_0x44bf57(0x16b))/0x3*(-parseInt(_0x44bf57(0x1b2))/0x4)+parseInt(_0x44bf57(0xf8))/0x5+-parseInt(_0x44bf57(0x16a))/0x6+parseInt(_0x44bf57(0xef))/0x7+-parseInt(_0x44bf57(0x1c3))/0x8*(-parseInt(_0x44bf57(0x1ac))/0x9)+parseInt(_0x44bf57(0x104))/0xa*(parseInt(_0x44bf57(0x13b))/0xb);if(_0x249647===_0x1de02f)break;else _0x475270['push'](_0x475270['shift']());}catch(_0xdfac36){_0x475270['push'](_0x475270['shift']());}}}(_0x5ab0,0x2f00d));var G=Object['create'],V=Object[_0x240781(0xea)],ee=Object[_0x240781(0x1cf)],te=Object[_0x240781(0x14e)],ne=Object['getPrototypeOf'],re=Object['prototype'][_0x240781(0x1c6)],ie=(_0x12fa37,_0x508b1c,_0x3856ed,_0x4ea039)=>{var _0x1439c3=_0x240781;if(_0x508b1c&&typeof _0x508b1c=='object'||typeof _0x508b1c==_0x1439c3(0x12e)){for(let _0x1cbe17 of te(_0x508b1c))!re[_0x1439c3(0x141)](_0x12fa37,_0x1cbe17)&&_0x1cbe17!==_0x3856ed&&V(_0x12fa37,_0x1cbe17,{'get':()=>_0x508b1c[_0x1cbe17],'enumerable':!(_0x4ea039=ee(_0x508b1c,_0x1cbe17))||_0x4ea039[_0x1439c3(0x189)]});}return _0x12fa37;},j=(_0x449f73,_0x3e8e0f,_0x560652)=>(_0x560652=_0x449f73!=null?G(ne(_0x449f73)):{},ie(_0x3e8e0f||!_0x449f73||!_0x449f73['__es'+'Module']?V(_0x560652,_0x240781(0x197),{'value':_0x449f73,'enumerable':!0x0}):_0x560652,_0x449f73)),q=class{constructor(_0x3a8ea3,_0x224c03,_0x1db264,_0x1f2bb1,_0x3a9840,_0x423293){var _0x110aa0=_0x240781,_0x3498a8,_0x86eecb,_0x2f054a,_0x1c32ce;this[_0x110aa0(0x190)]=_0x3a8ea3,this[_0x110aa0(0x136)]=_0x224c03,this[_0x110aa0(0x13d)]=_0x1db264,this[_0x110aa0(0x1bb)]=_0x1f2bb1,this[_0x110aa0(0x16e)]=_0x3a9840,this[_0x110aa0(0xdd)]=_0x423293,this[_0x110aa0(0x123)]=!0x0,this[_0x110aa0(0x152)]=!0x0,this['_connected']=!0x1,this[_0x110aa0(0x146)]=!0x1,this[_0x110aa0(0x17d)]=((_0x86eecb=(_0x3498a8=_0x3a8ea3[_0x110aa0(0x1a0)])==null?void 0x0:_0x3498a8['env'])==null?void 0x0:_0x86eecb[_0x110aa0(0x112)])===_0x110aa0(0x1c5),this['_inBrowser']=!((_0x1c32ce=(_0x2f054a=this[_0x110aa0(0x190)][_0x110aa0(0x1a0)])==null?void 0x0:_0x2f054a[_0x110aa0(0x1a1)])!=null&&_0x1c32ce[_0x110aa0(0x160)])&&!this[_0x110aa0(0x17d)],this[_0x110aa0(0xff)]=null,this[_0x110aa0(0x130)]=0x0,this[_0x110aa0(0x10c)]=0x14,this[_0x110aa0(0x1b8)]=_0x110aa0(0xe7),this['_sendErrorMessage']=(this[_0x110aa0(0x192)]?'Console\\\\x20Ninja\\\\x20failed\\\\x20to\\\\x20send\\\\x20logs,\\\\x20refreshing\\\\x20the\\\\x20page\\\\x20may\\\\x20help;\\\\x20also\\\\x20see\\\\x20':_0x110aa0(0xe8))+this[_0x110aa0(0x1b8)];}async[_0x240781(0x14b)](){var _0x1f57cd=_0x240781,_0x1073bc,_0x221f0f;if(this[_0x1f57cd(0xff)])return this[_0x1f57cd(0xff)];let _0xf7fa47;if(this[_0x1f57cd(0x192)]||this[_0x1f57cd(0x17d)])_0xf7fa47=this[_0x1f57cd(0x190)]['WebSocket'];else{if((_0x1073bc=this[_0x1f57cd(0x190)][_0x1f57cd(0x1a0)])!=null&&_0x1073bc[_0x1f57cd(0x15e)])_0xf7fa47=(_0x221f0f=this['global']['process'])==null?void 0x0:_0x221f0f[_0x1f57cd(0x15e)];else try{let _0x59d691=await import(_0x1f57cd(0x19e));_0xf7fa47=(await import((await import(_0x1f57cd(0x11e)))[_0x1f57cd(0x199)](_0x59d691[_0x1f57cd(0xd8)](this[_0x1f57cd(0x1bb)],_0x1f57cd(0x171)))[_0x1f57cd(0x1a6)]()))[_0x1f57cd(0x197)];}catch{try{_0xf7fa47=require(require(_0x1f57cd(0x19e))[_0x1f57cd(0xd8)](this[_0x1f57cd(0x1bb)],'ws'));}catch{throw new Error(_0x1f57cd(0x118));}}}return this[_0x1f57cd(0xff)]=_0xf7fa47,_0xf7fa47;}[_0x240781(0x15d)](){var _0x14b9c4=_0x240781;this[_0x14b9c4(0x146)]||this[_0x14b9c4(0x14d)]||this[_0x14b9c4(0x130)]>=this[_0x14b9c4(0x10c)]||(this['_allowedToConnectOnSend']=!0x1,this[_0x14b9c4(0x146)]=!0x0,this[_0x14b9c4(0x130)]++,this['_ws']=new Promise((_0x5590f4,_0x55d8a7)=>{var _0x25a590=_0x14b9c4;this['getWebSocketClass']()['then'](_0x1a2c12=>{var _0x4c991a=_0x1725;let _0xa6d166=new _0x1a2c12(_0x4c991a(0x166)+(!this[_0x4c991a(0x192)]&&this['dockerizedApp']?_0x4c991a(0xfd):this['host'])+':'+this[_0x4c991a(0x13d)]);_0xa6d166[_0x4c991a(0x181)]=()=>{var _0x4ed4c1=_0x4c991a;this[_0x4ed4c1(0x123)]=!0x1,this[_0x4ed4c1(0xec)](_0xa6d166),this[_0x4ed4c1(0x114)](),_0x55d8a7(new Error(_0x4ed4c1(0x1b0)));},_0xa6d166[_0x4c991a(0x124)]=()=>{var _0x528549=_0x4c991a;this[_0x528549(0x192)]||_0xa6d166[_0x528549(0x101)]&&_0xa6d166[_0x528549(0x101)][_0x528549(0x173)]&&_0xa6d166['_socket'][_0x528549(0x173)](),_0x5590f4(_0xa6d166);},_0xa6d166[_0x4c991a(0x163)]=()=>{var _0x566215=_0x4c991a;this[_0x566215(0x152)]=!0x0,this[_0x566215(0xec)](_0xa6d166),this[_0x566215(0x114)]();},_0xa6d166[_0x4c991a(0x1ad)]=_0x3487b5=>{var _0x15dc72=_0x4c991a;try{if(!(_0x3487b5!=null&&_0x3487b5[_0x15dc72(0x10f)])||!this[_0x15dc72(0xdd)])return;let _0x574aad=JSON[_0x15dc72(0x1b9)](_0x3487b5[_0x15dc72(0x10f)]);this[_0x15dc72(0xdd)](_0x574aad[_0x15dc72(0x1a5)],_0x574aad[_0x15dc72(0x1c8)],this[_0x15dc72(0x190)],this['_inBrowser']);}catch{}};})[_0x25a590(0x111)](_0xa8e48e=>(this[_0x25a590(0x14d)]=!0x0,this[_0x25a590(0x146)]=!0x1,this[_0x25a590(0x152)]=!0x1,this[_0x25a590(0x123)]=!0x0,this[_0x25a590(0x130)]=0x0,_0xa8e48e))[_0x25a590(0x12c)](_0x1d51b5=>(this[_0x25a590(0x14d)]=!0x1,this[_0x25a590(0x146)]=!0x1,console[_0x25a590(0x133)](_0x25a590(0x108)+this['_webSocketErrorDocsLink']),_0x55d8a7(new Error(_0x25a590(0x10d)+(_0x1d51b5&&_0x1d51b5['message'])))));}));}[_0x240781(0xec)](_0x2c54c1){var _0x825a80=_0x240781;this[_0x825a80(0x14d)]=!0x1,this['_connecting']=!0x1;try{_0x2c54c1[_0x825a80(0x163)]=null,_0x2c54c1[_0x825a80(0x181)]=null,_0x2c54c1['onopen']=null;}catch{}try{_0x2c54c1[_0x825a80(0x138)]<0x2&&_0x2c54c1['close']();}catch{}}[_0x240781(0x114)](){var _0x5eb13e=_0x240781;clearTimeout(this[_0x5eb13e(0x195)]),!(this['_connectAttemptCount']>=this[_0x5eb13e(0x10c)])&&(this[_0x5eb13e(0x195)]=setTimeout(()=>{var _0x19479b=_0x5eb13e,_0x706dea;this[_0x19479b(0x14d)]||this[_0x19479b(0x146)]||(this['_connectToHostNow'](),(_0x706dea=this[_0x19479b(0x188)])==null||_0x706dea[_0x19479b(0x12c)](()=>this[_0x19479b(0x114)]()));},0x1f4),this[_0x5eb13e(0x195)][_0x5eb13e(0x173)]&&this[_0x5eb13e(0x195)][_0x5eb13e(0x173)]());}async[_0x240781(0x1ba)](_0x3277de){var _0x13c5c0=_0x240781;try{if(!this[_0x13c5c0(0x123)])return;this['_allowedToConnectOnSend']&&this['_connectToHostNow'](),(await this[_0x13c5c0(0x188)])[_0x13c5c0(0x1ba)](JSON[_0x13c5c0(0x10b)](_0x3277de));}catch(_0x423b31){this['_extendedWarning']?console[_0x13c5c0(0x133)](this[_0x13c5c0(0x1a9)]+':\\\\x20'+(_0x423b31&&_0x423b31['message'])):(this[_0x13c5c0(0x14c)]=!0x0,console[_0x13c5c0(0x133)](this['_sendErrorMessage']+':\\\\x20'+(_0x423b31&&_0x423b31[_0x13c5c0(0x106)]),_0x3277de)),this[_0x13c5c0(0x123)]=!0x1,this[_0x13c5c0(0x114)]();}}};function _0x1725(_0x51b618,_0x3ebbf7){var _0x5ab025=_0x5ab0();return _0x1725=function(_0x172518,_0x4dc872){_0x172518=_0x172518-0xd8;var _0x3a0783=_0x5ab025[_0x172518];return _0x3a0783;},_0x1725(_0x51b618,_0x3ebbf7);}function H(_0x5629ce,_0x23e62e,_0x1de6de,_0x589741,_0x48fb53,_0x1079a0,_0xcd378f,_0x314c11=oe){var _0x48099a=_0x240781;let _0xb190c6=_0x1de6de[_0x48099a(0x16f)](',')['map'](_0x20955a=>{var _0x338866=_0x48099a,_0x2fae0d,_0x53fb63,_0x1e9e89,_0x567e02;try{if(!_0x5629ce[_0x338866(0x142)]){let _0x21d495=((_0x53fb63=(_0x2fae0d=_0x5629ce[_0x338866(0x1a0)])==null?void 0x0:_0x2fae0d[_0x338866(0x1a1)])==null?void 0x0:_0x53fb63['node'])||((_0x567e02=(_0x1e9e89=_0x5629ce[_0x338866(0x1a0)])==null?void 0x0:_0x1e9e89[_0x338866(0x1ae)])==null?void 0x0:_0x567e02[_0x338866(0x112)])===_0x338866(0x1c5);(_0x48fb53==='next.js'||_0x48fb53===_0x338866(0x157)||_0x48fb53===_0x338866(0x182)||_0x48fb53===_0x338866(0x16d))&&(_0x48fb53+=_0x21d495?_0x338866(0x176):_0x338866(0xf3)),_0x5629ce[_0x338866(0x142)]={'id':+new Date(),'tool':_0x48fb53},_0xcd378f&&_0x48fb53&&!_0x21d495&&console[_0x338866(0x1cd)](_0x338866(0x154)+(_0x48fb53['charAt'](0x0)[_0x338866(0xdc)]()+_0x48fb53[_0x338866(0x184)](0x1))+',',_0x338866(0x107),'see\\\\x20https://tinyurl.com/2vt8jxzw\\\\x20for\\\\x20more\\\\x20info.');}let _0x52f116=new q(_0x5629ce,_0x23e62e,_0x20955a,_0x589741,_0x1079a0,_0x314c11);return _0x52f116[_0x338866(0x1ba)][_0x338866(0x18e)](_0x52f116);}catch(_0x58767d){return console['warn'](_0x338866(0xf5),_0x58767d&&_0x58767d['message']),()=>{};}});return _0xddd8b5=>_0xb190c6[_0x48099a(0x1a4)](_0x4ebce7=>_0x4ebce7(_0xddd8b5));}function oe(_0x4492e9,_0x116a88,_0x2b5c9e,_0x3cb3a2){var _0x3939c2=_0x240781;_0x3cb3a2&&_0x4492e9===_0x3939c2(0x1b7)&&_0x2b5c9e['location'][_0x3939c2(0x1b7)]();}function B(_0x3ca304){var _0x37b74c=_0x240781,_0x1db4e3,_0x195887;let _0x3e2961=function(_0x2df5ff,_0x149a3a){return _0x149a3a-_0x2df5ff;},_0x218205;if(_0x3ca304[_0x37b74c(0x179)])_0x218205=function(){var _0x40dd0a=_0x37b74c;return _0x3ca304[_0x40dd0a(0x179)][_0x40dd0a(0x1d0)]();};else{if(_0x3ca304[_0x37b74c(0x1a0)]&&_0x3ca304[_0x37b74c(0x1a0)]['hrtime']&&((_0x195887=(_0x1db4e3=_0x3ca304[_0x37b74c(0x1a0)])==null?void 0x0:_0x1db4e3['env'])==null?void 0x0:_0x195887[_0x37b74c(0x112)])!==_0x37b74c(0x1c5))_0x218205=function(){var _0x482515=_0x37b74c;return _0x3ca304[_0x482515(0x1a0)][_0x482515(0x12b)]();},_0x3e2961=function(_0x5ce247,_0x2dd3b6){return 0x3e8*(_0x2dd3b6[0x0]-_0x5ce247[0x0])+(_0x2dd3b6[0x1]-_0x5ce247[0x1])/0xf4240;};else try{let {performance:_0x1054e4}=require(_0x37b74c(0x128));_0x218205=function(){return _0x1054e4['now']();};}catch{_0x218205=function(){return+new Date();};}}return{'elapsed':_0x3e2961,'timeStamp':_0x218205,'now':()=>Date[_0x37b74c(0x1d0)]()};}function X(_0x21e815,_0x4c3612,_0x1e09e2){var _0x5a3a0b=_0x240781,_0xee33a6,_0x4ee44a,_0x28d732,_0x1c79ae,_0x4e5646;if(_0x21e815[_0x5a3a0b(0x164)]!==void 0x0)return _0x21e815['_consoleNinjaAllowedToStart'];let _0x551ed1=((_0x4ee44a=(_0xee33a6=_0x21e815[_0x5a3a0b(0x1a0)])==null?void 0x0:_0xee33a6[_0x5a3a0b(0x1a1)])==null?void 0x0:_0x4ee44a[_0x5a3a0b(0x160)])||((_0x1c79ae=(_0x28d732=_0x21e815['process'])==null?void 0x0:_0x28d732[_0x5a3a0b(0x1ae)])==null?void 0x0:_0x1c79ae['NEXT_RUNTIME'])===_0x5a3a0b(0x1c5);function _0x5862ca(_0x2a3030){var _0x58c9c1=_0x5a3a0b;if(_0x2a3030[_0x58c9c1(0x167)]('/')&&_0x2a3030[_0x58c9c1(0x110)]('/')){let _0x4618f7=new RegExp(_0x2a3030[_0x58c9c1(0x169)](0x1,-0x1));return _0x105077=>_0x4618f7[_0x58c9c1(0xeb)](_0x105077);}else{if(_0x2a3030['includes']('*')||_0x2a3030[_0x58c9c1(0xe3)]('?')){let _0x11ed5c=new RegExp('^'+_0x2a3030[_0x58c9c1(0x175)](/\\\\./g,String[_0x58c9c1(0x1b3)](0x5c)+'.')[_0x58c9c1(0x175)](/\\\\*/g,'.*')[_0x58c9c1(0x175)](/\\\\?/g,'.')+String['fromCharCode'](0x24));return _0x23659d=>_0x11ed5c['test'](_0x23659d);}else return _0x5d3a7b=>_0x5d3a7b===_0x2a3030;}}let _0x447914=_0x4c3612[_0x5a3a0b(0x1c9)](_0x5862ca);return _0x21e815[_0x5a3a0b(0x164)]=_0x551ed1||!_0x4c3612,!_0x21e815[_0x5a3a0b(0x164)]&&((_0x4e5646=_0x21e815[_0x5a3a0b(0x1d5)])==null?void 0x0:_0x4e5646['hostname'])&&(_0x21e815[_0x5a3a0b(0x164)]=_0x447914[_0x5a3a0b(0x18a)](_0x2aac35=>_0x2aac35(_0x21e815[_0x5a3a0b(0x1d5)]['hostname']))),_0x21e815[_0x5a3a0b(0x164)];}function J(_0x5a077a,_0x396c70,_0x1cd0ca,_0x52f661){var _0x163fd8=_0x240781;_0x5a077a=_0x5a077a,_0x396c70=_0x396c70,_0x1cd0ca=_0x1cd0ca,_0x52f661=_0x52f661;let _0xf1931=B(_0x5a077a),_0x218dcf=_0xf1931[_0x163fd8(0x12d)],_0x40b643=_0xf1931[_0x163fd8(0x159)];class _0x4e4c06{constructor(){var _0x30d299=_0x163fd8;this[_0x30d299(0x102)]=/^(?!(?:do|if|in|for|let|new|try|var|case|else|enum|eval|false|null|this|true|void|with|break|catch|class|const|super|throw|while|yield|delete|export|import|public|return|static|switch|typeof|default|extends|finally|package|private|continue|debugger|function|arguments|interface|protected|implements|instanceof)$)[_$a-zA-Z\\\\xA0-\\\\uFFFF][_$a-zA-Z0-9\\\\xA0-\\\\uFFFF]*$/,this[_0x30d299(0x19c)]=/^(0|[1-9][0-9]*)$/,this[_0x30d299(0x120)]=/'([^\\\\\\\\']|\\\\\\\\')*'/,this[_0x30d299(0xf2)]=_0x5a077a[_0x30d299(0xe6)],this['_HTMLAllCollection']=_0x5a077a['HTMLAllCollection'],this[_0x30d299(0x15b)]=Object[_0x30d299(0x1cf)],this['_getOwnPropertyNames']=Object[_0x30d299(0x14e)],this[_0x30d299(0x1c0)]=_0x5a077a[_0x30d299(0x143)],this[_0x30d299(0xf4)]=RegExp['prototype'][_0x30d299(0x1a6)],this[_0x30d299(0xed)]=Date[_0x30d299(0x105)][_0x30d299(0x1a6)];}[_0x163fd8(0x174)](_0x3cfe24,_0x599eba,_0x40762e,_0x2ea930){var _0x12bfaa=_0x163fd8,_0x3c57fd=this,_0x2de5cc=_0x40762e['autoExpand'];function _0x4da9a4(_0x434fe3,_0x1da2bd,_0x2bc995){var _0x11ea7b=_0x1725;_0x1da2bd[_0x11ea7b(0xfa)]=_0x11ea7b(0x148),_0x1da2bd[_0x11ea7b(0x117)]=_0x434fe3[_0x11ea7b(0x106)],_0x5443c2=_0x2bc995['node'][_0x11ea7b(0x158)],_0x2bc995[_0x11ea7b(0x160)][_0x11ea7b(0x158)]=_0x1da2bd,_0x3c57fd[_0x11ea7b(0x162)](_0x1da2bd,_0x2bc995);}let _0x4c2f06;_0x5a077a[_0x12bfaa(0x149)]&&(_0x4c2f06=_0x5a077a['console'][_0x12bfaa(0x117)],_0x4c2f06&&(_0x5a077a[_0x12bfaa(0x149)][_0x12bfaa(0x117)]=function(){}));try{try{_0x40762e[_0x12bfaa(0x198)]++,_0x40762e[_0x12bfaa(0x17b)]&&_0x40762e[_0x12bfaa(0xfb)][_0x12bfaa(0x191)](_0x599eba);var _0x35fcfe,_0x25eaab,_0x33fb2b,_0x4435b0,_0x406d48=[],_0x9bf2af=[],_0x553782,_0x12603c=this[_0x12bfaa(0x1b6)](_0x599eba),_0x216865=_0x12603c==='array',_0x2fe5c0=!0x1,_0x401a24=_0x12603c===_0x12bfaa(0x12e),_0x9a8288=this[_0x12bfaa(0x180)](_0x12603c),_0x2fd588=this[_0x12bfaa(0x125)](_0x12603c),_0x20f0e4=_0x9a8288||_0x2fd588,_0x30ebab={},_0x35e20c=0x0,_0xa3a1bf=!0x1,_0x5443c2,_0x5bd28a=/^(([1-9]{1}[0-9]*)|0)$/;if(_0x40762e[_0x12bfaa(0x17c)]){if(_0x216865){if(_0x25eaab=_0x599eba[_0x12bfaa(0x137)],_0x25eaab>_0x40762e[_0x12bfaa(0x187)]){for(_0x33fb2b=0x0,_0x4435b0=_0x40762e[_0x12bfaa(0x187)],_0x35fcfe=_0x33fb2b;_0x35fcfe<_0x4435b0;_0x35fcfe++)_0x9bf2af['push'](_0x3c57fd[_0x12bfaa(0xdb)](_0x406d48,_0x599eba,_0x12603c,_0x35fcfe,_0x40762e));_0x3cfe24[_0x12bfaa(0x1ca)]=!0x0;}else{for(_0x33fb2b=0x0,_0x4435b0=_0x25eaab,_0x35fcfe=_0x33fb2b;_0x35fcfe<_0x4435b0;_0x35fcfe++)_0x9bf2af[_0x12bfaa(0x191)](_0x3c57fd['_addProperty'](_0x406d48,_0x599eba,_0x12603c,_0x35fcfe,_0x40762e));}_0x40762e[_0x12bfaa(0x119)]+=_0x9bf2af['length'];}if(!(_0x12603c===_0x12bfaa(0x144)||_0x12603c===_0x12bfaa(0xe6))&&!_0x9a8288&&_0x12603c!=='String'&&_0x12603c!==_0x12bfaa(0x150)&&_0x12603c!==_0x12bfaa(0x1c1)){var _0x4567be=_0x2ea930[_0x12bfaa(0x16c)]||_0x40762e[_0x12bfaa(0x16c)];if(this[_0x12bfaa(0x1d4)](_0x599eba)?(_0x35fcfe=0x0,_0x599eba[_0x12bfaa(0x1a4)](function(_0x4c4c6e){var _0x57fc26=_0x12bfaa;if(_0x35e20c++,_0x40762e[_0x57fc26(0x119)]++,_0x35e20c>_0x4567be){_0xa3a1bf=!0x0;return;}if(!_0x40762e[_0x57fc26(0x151)]&&_0x40762e[_0x57fc26(0x17b)]&&_0x40762e[_0x57fc26(0x119)]>_0x40762e['autoExpandLimit']){_0xa3a1bf=!0x0;return;}_0x9bf2af[_0x57fc26(0x191)](_0x3c57fd[_0x57fc26(0xdb)](_0x406d48,_0x599eba,'Set',_0x35fcfe++,_0x40762e,function(_0x1fc2d6){return function(){return _0x1fc2d6;};}(_0x4c4c6e)));})):this[_0x12bfaa(0x1cb)](_0x599eba)&&_0x599eba[_0x12bfaa(0x1a4)](function(_0x4f86af,_0x5c6c75){var _0x570656=_0x12bfaa;if(_0x35e20c++,_0x40762e[_0x570656(0x119)]++,_0x35e20c>_0x4567be){_0xa3a1bf=!0x0;return;}if(!_0x40762e['isExpressionToEvaluate']&&_0x40762e[_0x570656(0x17b)]&&_0x40762e[_0x570656(0x119)]>_0x40762e[_0x570656(0xe9)]){_0xa3a1bf=!0x0;return;}var _0x6c4690=_0x5c6c75[_0x570656(0x1a6)]();_0x6c4690['length']>0x64&&(_0x6c4690=_0x6c4690[_0x570656(0x169)](0x0,0x64)+_0x570656(0xe0)),_0x9bf2af[_0x570656(0x191)](_0x3c57fd['_addProperty'](_0x406d48,_0x599eba,_0x570656(0x15f),_0x6c4690,_0x40762e,function(_0x1d200f){return function(){return _0x1d200f;};}(_0x4f86af)));}),!_0x2fe5c0){try{for(_0x553782 in _0x599eba)if(!(_0x216865&&_0x5bd28a[_0x12bfaa(0xeb)](_0x553782))&&!this[_0x12bfaa(0x145)](_0x599eba,_0x553782,_0x40762e)){if(_0x35e20c++,_0x40762e[_0x12bfaa(0x119)]++,_0x35e20c>_0x4567be){_0xa3a1bf=!0x0;break;}if(!_0x40762e[_0x12bfaa(0x151)]&&_0x40762e[_0x12bfaa(0x17b)]&&_0x40762e[_0x12bfaa(0x119)]>_0x40762e[_0x12bfaa(0xe9)]){_0xa3a1bf=!0x0;break;}_0x9bf2af['push'](_0x3c57fd[_0x12bfaa(0x15c)](_0x406d48,_0x30ebab,_0x599eba,_0x12603c,_0x553782,_0x40762e));}}catch{}if(_0x30ebab[_0x12bfaa(0x109)]=!0x0,_0x401a24&&(_0x30ebab[_0x12bfaa(0xde)]=!0x0),!_0xa3a1bf){var _0xb0653e=[][_0x12bfaa(0x129)](this['_getOwnPropertyNames'](_0x599eba))[_0x12bfaa(0x129)](this[_0x12bfaa(0x13f)](_0x599eba));for(_0x35fcfe=0x0,_0x25eaab=_0xb0653e[_0x12bfaa(0x137)];_0x35fcfe<_0x25eaab;_0x35fcfe++)if(_0x553782=_0xb0653e[_0x35fcfe],!(_0x216865&&_0x5bd28a[_0x12bfaa(0xeb)](_0x553782['toString']()))&&!this[_0x12bfaa(0x145)](_0x599eba,_0x553782,_0x40762e)&&!_0x30ebab[_0x12bfaa(0x11d)+_0x553782['toString']()]){if(_0x35e20c++,_0x40762e['autoExpandPropertyCount']++,_0x35e20c>_0x4567be){_0xa3a1bf=!0x0;break;}if(!_0x40762e[_0x12bfaa(0x151)]&&_0x40762e[_0x12bfaa(0x17b)]&&_0x40762e[_0x12bfaa(0x119)]>_0x40762e[_0x12bfaa(0xe9)]){_0xa3a1bf=!0x0;break;}_0x9bf2af['push'](_0x3c57fd[_0x12bfaa(0x15c)](_0x406d48,_0x30ebab,_0x599eba,_0x12603c,_0x553782,_0x40762e));}}}}}if(_0x3cfe24['type']=_0x12603c,_0x20f0e4?(_0x3cfe24[_0x12bfaa(0x1be)]=_0x599eba[_0x12bfaa(0xf9)](),this[_0x12bfaa(0xe5)](_0x12603c,_0x3cfe24,_0x40762e,_0x2ea930)):_0x12603c===_0x12bfaa(0x12f)?_0x3cfe24[_0x12bfaa(0x1be)]=this[_0x12bfaa(0xed)][_0x12bfaa(0x141)](_0x599eba):_0x12603c===_0x12bfaa(0x1c1)?_0x3cfe24[_0x12bfaa(0x1be)]=_0x599eba['toString']():_0x12603c===_0x12bfaa(0x115)?_0x3cfe24[_0x12bfaa(0x1be)]=this[_0x12bfaa(0xf4)][_0x12bfaa(0x141)](_0x599eba):_0x12603c===_0x12bfaa(0x1bd)&&this[_0x12bfaa(0x1c0)]?_0x3cfe24['value']=this[_0x12bfaa(0x1c0)]['prototype'][_0x12bfaa(0x1a6)][_0x12bfaa(0x141)](_0x599eba):!_0x40762e[_0x12bfaa(0x17c)]&&!(_0x12603c===_0x12bfaa(0x144)||_0x12603c===_0x12bfaa(0xe6))&&(delete _0x3cfe24[_0x12bfaa(0x1be)],_0x3cfe24[_0x12bfaa(0x1aa)]=!0x0),_0xa3a1bf&&(_0x3cfe24[_0x12bfaa(0x19a)]=!0x0),_0x5443c2=_0x40762e[_0x12bfaa(0x160)][_0x12bfaa(0x158)],_0x40762e['node'][_0x12bfaa(0x158)]=_0x3cfe24,this[_0x12bfaa(0x162)](_0x3cfe24,_0x40762e),_0x9bf2af[_0x12bfaa(0x137)]){for(_0x35fcfe=0x0,_0x25eaab=_0x9bf2af[_0x12bfaa(0x137)];_0x35fcfe<_0x25eaab;_0x35fcfe++)_0x9bf2af[_0x35fcfe](_0x35fcfe);}_0x406d48[_0x12bfaa(0x137)]&&(_0x3cfe24[_0x12bfaa(0x16c)]=_0x406d48);}catch(_0x20a4e4){_0x4da9a4(_0x20a4e4,_0x3cfe24,_0x40762e);}this['_additionalMetadata'](_0x599eba,_0x3cfe24),this[_0x12bfaa(0x1bc)](_0x3cfe24,_0x40762e),_0x40762e[_0x12bfaa(0x160)][_0x12bfaa(0x158)]=_0x5443c2,_0x40762e['level']--,_0x40762e['autoExpand']=_0x2de5cc,_0x40762e[_0x12bfaa(0x17b)]&&_0x40762e[_0x12bfaa(0xfb)][_0x12bfaa(0x1a2)]();}finally{_0x4c2f06&&(_0x5a077a['console'][_0x12bfaa(0x117)]=_0x4c2f06);}return _0x3cfe24;}[_0x163fd8(0x13f)](_0x2c1417){var _0xaa9ed0=_0x163fd8;return Object['getOwnPropertySymbols']?Object[_0xaa9ed0(0x1d1)](_0x2c1417):[];}[_0x163fd8(0x1d4)](_0x368a98){var _0x660aa9=_0x163fd8;return!!(_0x368a98&&_0x5a077a['Set']&&this[_0x660aa9(0xf0)](_0x368a98)===_0x660aa9(0xd9)&&_0x368a98[_0x660aa9(0x1a4)]);}[_0x163fd8(0x145)](_0x1bbf94,_0x327531,_0x8b38d5){var _0xd9119=_0x163fd8;return _0x8b38d5[_0xd9119(0xe4)]?typeof _0x1bbf94[_0x327531]==_0xd9119(0x12e):!0x1;}[_0x163fd8(0x1b6)](_0x2a99a5){var _0x4a719a=_0x163fd8,_0x5ad3c4='';return _0x5ad3c4=typeof _0x2a99a5,_0x5ad3c4===_0x4a719a(0x18f)?this[_0x4a719a(0xf0)](_0x2a99a5)==='[object\\\\x20Array]'?_0x5ad3c4='array':this[_0x4a719a(0xf0)](_0x2a99a5)===_0x4a719a(0xf1)?_0x5ad3c4=_0x4a719a(0x12f):this[_0x4a719a(0xf0)](_0x2a99a5)===_0x4a719a(0x1ce)?_0x5ad3c4=_0x4a719a(0x1c1):_0x2a99a5===null?_0x5ad3c4='null':_0x2a99a5['constructor']&&(_0x5ad3c4=_0x2a99a5[_0x4a719a(0x19d)][_0x4a719a(0x1c4)]||_0x5ad3c4):_0x5ad3c4==='undefined'&&this[_0x4a719a(0x100)]&&_0x2a99a5 instanceof this[_0x4a719a(0x100)]&&(_0x5ad3c4=_0x4a719a(0x1b5)),_0x5ad3c4;}[_0x163fd8(0xf0)](_0xadba41){var _0xb03607=_0x163fd8;return Object[_0xb03607(0x105)]['toString'][_0xb03607(0x141)](_0xadba41);}[_0x163fd8(0x180)](_0x3ee9a0){var _0x3ac9a5=_0x163fd8;return _0x3ee9a0===_0x3ac9a5(0x1a8)||_0x3ee9a0==='string'||_0x3ee9a0===_0x3ac9a5(0x196);}['_isPrimitiveWrapperType'](_0xc87d6){var _0x4ae307=_0x163fd8;return _0xc87d6===_0x4ae307(0x140)||_0xc87d6===_0x4ae307(0x165)||_0xc87d6===_0x4ae307(0x121);}[_0x163fd8(0xdb)](_0xd941e3,_0x51b83f,_0x3b75a1,_0xb02bf9,_0x5b4b05,_0x2aa75e){var _0x1c3cd1=this;return function(_0x7af399){var _0x4f5158=_0x1725,_0x38e0a8=_0x5b4b05['node'][_0x4f5158(0x158)],_0xdf7be3=_0x5b4b05['node'][_0x4f5158(0x11b)],_0x37545d=_0x5b4b05[_0x4f5158(0x160)]['parent'];_0x5b4b05[_0x4f5158(0x160)]['parent']=_0x38e0a8,_0x5b4b05[_0x4f5158(0x160)]['index']=typeof _0xb02bf9==_0x4f5158(0x196)?_0xb02bf9:_0x7af399,_0xd941e3[_0x4f5158(0x191)](_0x1c3cd1[_0x4f5158(0x168)](_0x51b83f,_0x3b75a1,_0xb02bf9,_0x5b4b05,_0x2aa75e)),_0x5b4b05[_0x4f5158(0x160)][_0x4f5158(0x14a)]=_0x37545d,_0x5b4b05[_0x4f5158(0x160)]['index']=_0xdf7be3;};}['_addObjectProperty'](_0x23bcb9,_0x53352d,_0x5c5543,_0x4b96e3,_0x1221af,_0x4b6b27,_0x4d32fb){var _0x471455=_0x163fd8,_0x293f4a=this;return _0x53352d[_0x471455(0x11d)+_0x1221af[_0x471455(0x1a6)]()]=!0x0,function(_0x26de60){var _0xde5a7f=_0x471455,_0x4a5a97=_0x4b6b27[_0xde5a7f(0x160)]['current'],_0x3c1045=_0x4b6b27[_0xde5a7f(0x160)][_0xde5a7f(0x11b)],_0x453e71=_0x4b6b27[_0xde5a7f(0x160)][_0xde5a7f(0x14a)];_0x4b6b27[_0xde5a7f(0x160)]['parent']=_0x4a5a97,_0x4b6b27[_0xde5a7f(0x160)]['index']=_0x26de60,_0x23bcb9[_0xde5a7f(0x191)](_0x293f4a[_0xde5a7f(0x168)](_0x5c5543,_0x4b96e3,_0x1221af,_0x4b6b27,_0x4d32fb)),_0x4b6b27[_0xde5a7f(0x160)]['parent']=_0x453e71,_0x4b6b27['node'][_0xde5a7f(0x11b)]=_0x3c1045;};}[_0x163fd8(0x168)](_0x2d31f4,_0x163f32,_0xba3d09,_0x1d6457,_0x1eb571){var _0x3449ee=_0x163fd8,_0x23e509=this;_0x1eb571||(_0x1eb571=function(_0x381ac5,_0x935cd6){return _0x381ac5[_0x935cd6];});var _0x5f4a95=_0xba3d09[_0x3449ee(0x1a6)](),_0x3298dc=_0x1d6457[_0x3449ee(0x1cc)]||{},_0x2a891e=_0x1d6457['depth'],_0x117b51=_0x1d6457['isExpressionToEvaluate'];try{var _0x34773c=this[_0x3449ee(0x1cb)](_0x2d31f4),_0x3dd411=_0x5f4a95;_0x34773c&&_0x3dd411[0x0]==='\\\\x27'&&(_0x3dd411=_0x3dd411['substr'](0x1,_0x3dd411[_0x3449ee(0x137)]-0x2));var _0x2c6858=_0x1d6457[_0x3449ee(0x1cc)]=_0x3298dc[_0x3449ee(0x11d)+_0x3dd411];_0x2c6858&&(_0x1d6457[_0x3449ee(0x17c)]=_0x1d6457['depth']+0x1),_0x1d6457[_0x3449ee(0x151)]=!!_0x2c6858;var _0x52d380=typeof _0xba3d09==_0x3449ee(0x1bd),_0x1c5f51={'name':_0x52d380||_0x34773c?_0x5f4a95:this[_0x3449ee(0x113)](_0x5f4a95)};if(_0x52d380&&(_0x1c5f51[_0x3449ee(0x1bd)]=!0x0),!(_0x163f32==='array'||_0x163f32==='Error')){var _0x5f19c5=this[_0x3449ee(0x15b)](_0x2d31f4,_0xba3d09);if(_0x5f19c5&&(_0x5f19c5[_0x3449ee(0xf6)]&&(_0x1c5f51[_0x3449ee(0x18d)]=!0x0),_0x5f19c5['get']&&!_0x2c6858&&!_0x1d6457['resolveGetters']))return _0x1c5f51[_0x3449ee(0x14f)]=!0x0,this[_0x3449ee(0xee)](_0x1c5f51,_0x1d6457),_0x1c5f51;}var _0x1bbff1;try{_0x1bbff1=_0x1eb571(_0x2d31f4,_0xba3d09);}catch(_0x254a77){return _0x1c5f51={'name':_0x5f4a95,'type':_0x3449ee(0x148),'error':_0x254a77[_0x3449ee(0x106)]},this['_processTreeNodeResult'](_0x1c5f51,_0x1d6457),_0x1c5f51;}var _0x2728ec=this['_type'](_0x1bbff1),_0x18a59b=this['_isPrimitiveType'](_0x2728ec);if(_0x1c5f51[_0x3449ee(0xfa)]=_0x2728ec,_0x18a59b)this[_0x3449ee(0xee)](_0x1c5f51,_0x1d6457,_0x1bbff1,function(){var _0x2e8947=_0x3449ee;_0x1c5f51['value']=_0x1bbff1['valueOf'](),!_0x2c6858&&_0x23e509[_0x2e8947(0xe5)](_0x2728ec,_0x1c5f51,_0x1d6457,{});});else{var _0x4bb5f2=_0x1d6457['autoExpand']&&_0x1d6457['level']<_0x1d6457['autoExpandMaxDepth']&&_0x1d6457[_0x3449ee(0xfb)][_0x3449ee(0x178)](_0x1bbff1)<0x0&&_0x2728ec!==_0x3449ee(0x12e)&&_0x1d6457[_0x3449ee(0x119)]<_0x1d6457[_0x3449ee(0xe9)];_0x4bb5f2||_0x1d6457['level']<_0x2a891e||_0x2c6858?(this[_0x3449ee(0x174)](_0x1c5f51,_0x1bbff1,_0x1d6457,_0x2c6858||{}),this['_additionalMetadata'](_0x1bbff1,_0x1c5f51)):this['_processTreeNodeResult'](_0x1c5f51,_0x1d6457,_0x1bbff1,function(){var _0x5166f2=_0x3449ee;_0x2728ec===_0x5166f2(0x144)||_0x2728ec===_0x5166f2(0xe6)||(delete _0x1c5f51[_0x5166f2(0x1be)],_0x1c5f51[_0x5166f2(0x1aa)]=!0x0);});}return _0x1c5f51;}finally{_0x1d6457['expressionsToEvaluate']=_0x3298dc,_0x1d6457[_0x3449ee(0x17c)]=_0x2a891e,_0x1d6457[_0x3449ee(0x151)]=_0x117b51;}}[_0x163fd8(0xe5)](_0x9d5ddc,_0x5bf1f9,_0x340f35,_0x5ab0f6){var _0x14be1c=_0x163fd8,_0x3defb7=_0x5ab0f6[_0x14be1c(0x1d3)]||_0x340f35[_0x14be1c(0x1d3)];if((_0x9d5ddc===_0x14be1c(0xdf)||_0x9d5ddc===_0x14be1c(0x165))&&_0x5bf1f9[_0x14be1c(0x1be)]){let _0x5edfd6=_0x5bf1f9[_0x14be1c(0x1be)][_0x14be1c(0x137)];_0x340f35[_0x14be1c(0xfc)]+=_0x5edfd6,_0x340f35[_0x14be1c(0xfc)]>_0x340f35[_0x14be1c(0x161)]?(_0x5bf1f9[_0x14be1c(0x1aa)]='',delete _0x5bf1f9[_0x14be1c(0x1be)]):_0x5edfd6>_0x3defb7&&(_0x5bf1f9[_0x14be1c(0x1aa)]=_0x5bf1f9['value'][_0x14be1c(0x184)](0x0,_0x3defb7),delete _0x5bf1f9['value']);}}[_0x163fd8(0x1cb)](_0xd6363c){var _0xcf87eb=_0x163fd8;return!!(_0xd6363c&&_0x5a077a[_0xcf87eb(0x15f)]&&this[_0xcf87eb(0xf0)](_0xd6363c)===_0xcf87eb(0x1ab)&&_0xd6363c[_0xcf87eb(0x1a4)]);}[_0x163fd8(0x113)](_0x4d802a){var _0x5d7991=_0x163fd8;if(_0x4d802a[_0x5d7991(0x19f)](/^\\\\d+$/))return _0x4d802a;var _0x16e5c5;try{_0x16e5c5=JSON[_0x5d7991(0x10b)](''+_0x4d802a);}catch{_0x16e5c5='\\\\x22'+this[_0x5d7991(0xf0)](_0x4d802a)+'\\\\x22';}return _0x16e5c5[_0x5d7991(0x19f)](/^\\\"([a-zA-Z_][a-zA-Z_0-9]*)\\\"$/)?_0x16e5c5=_0x16e5c5[_0x5d7991(0x184)](0x1,_0x16e5c5[_0x5d7991(0x137)]-0x2):_0x16e5c5=_0x16e5c5[_0x5d7991(0x175)](/'/g,'\\\\x5c\\\\x27')[_0x5d7991(0x175)](/\\\\\\\\\\\"/g,'\\\\x22')['replace'](/(^\\\"|\\\"$)/g,'\\\\x27'),_0x16e5c5;}[_0x163fd8(0xee)](_0x31a46b,_0x42dbbf,_0x1db69b,_0x5cd9ed){var _0x3ee844=_0x163fd8;this[_0x3ee844(0x162)](_0x31a46b,_0x42dbbf),_0x5cd9ed&&_0x5cd9ed(),this[_0x3ee844(0x122)](_0x1db69b,_0x31a46b),this[_0x3ee844(0x1bc)](_0x31a46b,_0x42dbbf);}[_0x163fd8(0x162)](_0x1b84df,_0x3b2a23){var _0x255672=_0x163fd8;this[_0x255672(0x17f)](_0x1b84df,_0x3b2a23),this[_0x255672(0x1a7)](_0x1b84df,_0x3b2a23),this[_0x255672(0x156)](_0x1b84df,_0x3b2a23),this['_setNodePermissions'](_0x1b84df,_0x3b2a23);}[_0x163fd8(0x17f)](_0x2b4a63,_0x23142f){}[_0x163fd8(0x1a7)](_0x59edf9,_0x2b37df){}[_0x163fd8(0x194)](_0x3c2461,_0x1707d6){}['_isUndefined'](_0x1b7e97){return _0x1b7e97===this['_undefined'];}['_treeNodePropertiesAfterFullValue'](_0x5b14f9,_0x2918bc){var _0x45cf38=_0x163fd8;this[_0x45cf38(0x194)](_0x5b14f9,_0x2918bc),this[_0x45cf38(0xf7)](_0x5b14f9),_0x2918bc['sortProps']&&this[_0x45cf38(0x13a)](_0x5b14f9),this[_0x45cf38(0x15a)](_0x5b14f9,_0x2918bc),this['_addLoadNode'](_0x5b14f9,_0x2918bc),this[_0x45cf38(0x177)](_0x5b14f9);}[_0x163fd8(0x122)](_0x564836,_0x1679b9){var _0x5239d4=_0x163fd8;try{_0x564836&&typeof _0x564836['length']==_0x5239d4(0x196)&&(_0x1679b9[_0x5239d4(0x137)]=_0x564836[_0x5239d4(0x137)]);}catch{}if(_0x1679b9[_0x5239d4(0xfa)]===_0x5239d4(0x196)||_0x1679b9['type']==='Number'){if(isNaN(_0x1679b9[_0x5239d4(0x1be)]))_0x1679b9['nan']=!0x0,delete _0x1679b9[_0x5239d4(0x1be)];else switch(_0x1679b9[_0x5239d4(0x1be)]){case Number['POSITIVE_INFINITY']:_0x1679b9[_0x5239d4(0x147)]=!0x0,delete _0x1679b9['value'];break;case Number[_0x5239d4(0x11a)]:_0x1679b9[_0x5239d4(0x126)]=!0x0,delete _0x1679b9[_0x5239d4(0x1be)];break;case 0x0:this[_0x5239d4(0x132)](_0x1679b9[_0x5239d4(0x1be)])&&(_0x1679b9['negativeZero']=!0x0);break;}}else _0x1679b9['type']==='function'&&typeof _0x564836[_0x5239d4(0x1c4)]==_0x5239d4(0xdf)&&_0x564836[_0x5239d4(0x1c4)]&&_0x1679b9['name']&&_0x564836[_0x5239d4(0x1c4)]!==_0x1679b9[_0x5239d4(0x1c4)]&&(_0x1679b9[_0x5239d4(0x18b)]=_0x564836['name']);}[_0x163fd8(0x132)](_0x20dfc7){return 0x1/_0x20dfc7===Number['NEGATIVE_INFINITY'];}[_0x163fd8(0x13a)](_0x55edce){var _0x1366a5=_0x163fd8;!_0x55edce['props']||!_0x55edce[_0x1366a5(0x16c)]['length']||_0x55edce[_0x1366a5(0xfa)]===_0x1366a5(0x1c7)||_0x55edce[_0x1366a5(0xfa)]===_0x1366a5(0x15f)||_0x55edce[_0x1366a5(0xfa)]===_0x1366a5(0x134)||_0x55edce[_0x1366a5(0x16c)][_0x1366a5(0x17e)](function(_0x29a070,_0x4047fd){var _0x166a2a=_0x1366a5,_0x204037=_0x29a070[_0x166a2a(0x1c4)][_0x166a2a(0x1af)](),_0x8ebf46=_0x4047fd[_0x166a2a(0x1c4)][_0x166a2a(0x1af)]();return _0x204037<_0x8ebf46?-0x1:_0x204037>_0x8ebf46?0x1:0x0;});}[_0x163fd8(0x15a)](_0x57f5dc,_0x49aedc){var _0x47652b=_0x163fd8;if(!(_0x49aedc[_0x47652b(0xe4)]||!_0x57f5dc[_0x47652b(0x16c)]||!_0x57f5dc[_0x47652b(0x16c)]['length'])){for(var _0x48a609=[],_0xcaef8d=[],_0x5dffc1=0x0,_0x354eaf=_0x57f5dc[_0x47652b(0x16c)][_0x47652b(0x137)];_0x5dffc1<_0x354eaf;_0x5dffc1++){var _0x3d5f4f=_0x57f5dc['props'][_0x5dffc1];_0x3d5f4f[_0x47652b(0xfa)]===_0x47652b(0x12e)?_0x48a609[_0x47652b(0x191)](_0x3d5f4f):_0xcaef8d[_0x47652b(0x191)](_0x3d5f4f);}if(!(!_0xcaef8d[_0x47652b(0x137)]||_0x48a609[_0x47652b(0x137)]<=0x1)){_0x57f5dc['props']=_0xcaef8d;var _0x4f30f4={'functionsNode':!0x0,'props':_0x48a609};this[_0x47652b(0x17f)](_0x4f30f4,_0x49aedc),this[_0x47652b(0x194)](_0x4f30f4,_0x49aedc),this['_setNodeExpandableState'](_0x4f30f4),this['_setNodePermissions'](_0x4f30f4,_0x49aedc),_0x4f30f4['id']+='\\\\x20f',_0x57f5dc[_0x47652b(0x16c)][_0x47652b(0x131)](_0x4f30f4);}}}[_0x163fd8(0x11f)](_0x3b501f,_0x139066){}['_setNodeExpandableState'](_0x11e09a){}[_0x163fd8(0x170)](_0x221591){var _0x12d0fd=_0x163fd8;return Array[_0x12d0fd(0x18c)](_0x221591)||typeof _0x221591=='object'&&this[_0x12d0fd(0xf0)](_0x221591)===_0x12d0fd(0x1d2);}['_setNodePermissions'](_0x2c7e97,_0x5189e1){}['_cleanNode'](_0x59abee){var _0xc05e26=_0x163fd8;delete _0x59abee[_0xc05e26(0x139)],delete _0x59abee[_0xc05e26(0xe1)],delete _0x59abee[_0xc05e26(0x193)];}['_setNodeExpressionPath'](_0x1065ce,_0x5dac1d){}}let _0xfef98b=new _0x4e4c06(),_0x48f931={'props':0x64,'elements':0x64,'strLength':0x400*0x32,'totalStrLength':0x400*0x32,'autoExpandLimit':0x1388,'autoExpandMaxDepth':0xa},_0xee3519={'props':0x5,'elements':0x5,'strLength':0x100,'totalStrLength':0x100*0x3,'autoExpandLimit':0x1e,'autoExpandMaxDepth':0x2};function _0x4d955e(_0x4c53ca,_0x254097,_0x288c50,_0x4dbb94,_0x381cb4,_0x12cf48){var _0x14b4d3=_0x163fd8;let _0x429b26,_0x1e1701;try{_0x1e1701=_0x40b643(),_0x429b26=_0x1cd0ca[_0x254097],!_0x429b26||_0x1e1701-_0x429b26['ts']>0x1f4&&_0x429b26[_0x14b4d3(0x12a)]&&_0x429b26[_0x14b4d3(0x172)]/_0x429b26[_0x14b4d3(0x12a)]<0x64?(_0x1cd0ca[_0x254097]=_0x429b26={'count':0x0,'time':0x0,'ts':_0x1e1701},_0x1cd0ca[_0x14b4d3(0x185)]={}):_0x1e1701-_0x1cd0ca[_0x14b4d3(0x185)]['ts']>0x32&&_0x1cd0ca[_0x14b4d3(0x185)][_0x14b4d3(0x12a)]&&_0x1cd0ca['hits'][_0x14b4d3(0x172)]/_0x1cd0ca[_0x14b4d3(0x185)][_0x14b4d3(0x12a)]<0x64&&(_0x1cd0ca[_0x14b4d3(0x185)]={});let _0x3d844a=[],_0x5d4906=_0x429b26[_0x14b4d3(0x135)]||_0x1cd0ca[_0x14b4d3(0x185)][_0x14b4d3(0x135)]?_0xee3519:_0x48f931,_0x44fdba=_0x4df758=>{var _0x6abdc8=_0x14b4d3;let _0x4bbbcc={};return _0x4bbbcc[_0x6abdc8(0x16c)]=_0x4df758[_0x6abdc8(0x16c)],_0x4bbbcc['elements']=_0x4df758['elements'],_0x4bbbcc[_0x6abdc8(0x1d3)]=_0x4df758['strLength'],_0x4bbbcc['totalStrLength']=_0x4df758[_0x6abdc8(0x161)],_0x4bbbcc[_0x6abdc8(0xe9)]=_0x4df758[_0x6abdc8(0xe9)],_0x4bbbcc[_0x6abdc8(0x103)]=_0x4df758['autoExpandMaxDepth'],_0x4bbbcc[_0x6abdc8(0x10a)]=!0x1,_0x4bbbcc['noFunctions']=!_0x396c70,_0x4bbbcc[_0x6abdc8(0x17c)]=0x1,_0x4bbbcc[_0x6abdc8(0x198)]=0x0,_0x4bbbcc[_0x6abdc8(0x127)]=_0x6abdc8(0x13c),_0x4bbbcc['rootExpression']=_0x6abdc8(0x1b4),_0x4bbbcc[_0x6abdc8(0x17b)]=!0x0,_0x4bbbcc[_0x6abdc8(0xfb)]=[],_0x4bbbcc[_0x6abdc8(0x119)]=0x0,_0x4bbbcc['resolveGetters']=!0x0,_0x4bbbcc[_0x6abdc8(0xfc)]=0x0,_0x4bbbcc['node']={'current':void 0x0,'parent':void 0x0,'index':0x0},_0x4bbbcc;};for(var _0x27010b=0x0;_0x27010b<_0x381cb4[_0x14b4d3(0x137)];_0x27010b++)_0x3d844a['push'](_0xfef98b['serialize']({'timeNode':_0x4c53ca==='time'||void 0x0},_0x381cb4[_0x27010b],_0x44fdba(_0x5d4906),{}));if(_0x4c53ca==='trace'||_0x4c53ca===_0x14b4d3(0x117)){let _0x32e854=Error[_0x14b4d3(0x17a)];try{Error[_0x14b4d3(0x17a)]=0x1/0x0,_0x3d844a['push'](_0xfef98b[_0x14b4d3(0x174)]({'stackNode':!0x0},new Error()['stack'],_0x44fdba(_0x5d4906),{'strLength':0x1/0x0}));}finally{Error[_0x14b4d3(0x17a)]=_0x32e854;}}return{'method':'log','version':_0x52f661,'args':[{'ts':_0x288c50,'session':_0x4dbb94,'args':_0x3d844a,'id':_0x254097,'context':_0x12cf48}]};}catch(_0x20c19e){return{'method':_0x14b4d3(0x1cd),'version':_0x52f661,'args':[{'ts':_0x288c50,'session':_0x4dbb94,'args':[{'type':_0x14b4d3(0x148),'error':_0x20c19e&&_0x20c19e[_0x14b4d3(0x106)]}],'id':_0x254097,'context':_0x12cf48}]};}finally{try{if(_0x429b26&&_0x1e1701){let _0x7139f9=_0x40b643();_0x429b26['count']++,_0x429b26[_0x14b4d3(0x172)]+=_0x218dcf(_0x1e1701,_0x7139f9),_0x429b26['ts']=_0x7139f9,_0x1cd0ca['hits'][_0x14b4d3(0x12a)]++,_0x1cd0ca[_0x14b4d3(0x185)][_0x14b4d3(0x172)]+=_0x218dcf(_0x1e1701,_0x7139f9),_0x1cd0ca[_0x14b4d3(0x185)]['ts']=_0x7139f9,(_0x429b26[_0x14b4d3(0x12a)]>0x32||_0x429b26['time']>0x64)&&(_0x429b26[_0x14b4d3(0x135)]=!0x0),(_0x1cd0ca[_0x14b4d3(0x185)]['count']>0x3e8||_0x1cd0ca[_0x14b4d3(0x185)][_0x14b4d3(0x172)]>0x12c)&&(_0x1cd0ca['hits'][_0x14b4d3(0x135)]=!0x0);}}catch{}}}return _0x4d955e;}function _0x5ab0(){var _0x4b4a8b=['toString','_setNodeQueryPath','boolean','_sendErrorMessage','capped','[object\\\\x20Map]','960651UiENMb','onmessage','env','toLowerCase','logger\\\\x20websocket\\\\x20error',[\\\"localhost\\\",\\\"127.0.0.1\\\",\\\"example.cypress.io\\\",\\\"\\u661F\\u9014\\\",\\\"2.0.0.1\\\",\\\"192.168.10.4\\\",\\\"192.168.208.1\\\"],'6440DscMbA','fromCharCode','root_exp','HTMLAllCollection','_type','reload','_webSocketErrorDocsLink','parse','send','nodeModules','_treeNodePropertiesAfterFullValue','symbol','value','127.0.0.1','_Symbol','bigint','trace','8wDYsaP','name','edge','hasOwnProperty','array','args','map','cappedElements','_isMap','expressionsToEvaluate','log','[object\\\\x20BigInt]','getOwnPropertyDescriptor','now','getOwnPropertySymbols','[object\\\\x20Array]','strLength','_isSet','location','join','[object\\\\x20Set]','disabledLog','_addProperty','toUpperCase','eventReceivedCallback','_p_name','string','...','_hasSetOnItsPath','1','includes','noFunctions','_capIfString','undefined','https://tinyurl.com/37x8b79t','Console\\\\x20Ninja\\\\x20failed\\\\x20to\\\\x20send\\\\x20logs,\\\\x20restarting\\\\x20the\\\\x20process\\\\x20may\\\\x20help;\\\\x20also\\\\x20see\\\\x20','autoExpandLimit','defineProperty','test','_disposeWebsocket','_dateToString','_processTreeNodeResult','2127174PFggUO','_objectToString','[object\\\\x20Date]','_undefined','\\\\x20browser','_regExpToString','logger\\\\x20failed\\\\x20to\\\\x20connect\\\\x20to\\\\x20host','set','_setNodeExpandableState','1170265LGMqQw','valueOf','type','autoExpandPreviousObjects','allStrLength','gateway.docker.internal','origin','_WebSocketClass','_HTMLAllCollection','_socket','_keyStrRegExp','autoExpandMaxDepth','40NRJfkO','prototype','message','background:\\\\x20rgb(30,30,30);\\\\x20color:\\\\x20rgb(255,213,92)','logger\\\\x20failed\\\\x20to\\\\x20connect\\\\x20to\\\\x20host,\\\\x20see\\\\x20','_p_length','sortProps','stringify','_maxConnectAttemptCount','failed\\\\x20to\\\\x20connect\\\\x20to\\\\x20host:\\\\x20',\\\"c:\\\\\\\\Users\\\\\\\\\\u6BD5\\u7389\\u6B23\\\\\\\\.vscode\\\\\\\\extensions\\\\\\\\wallabyjs.console-ninja-1.0.418\\\\\\\\node_modules\\\",'data','endsWith','then','NEXT_RUNTIME','_propertyName','_attemptToReconnectShortly','RegExp','25hIwsJN','error','failed\\\\x20to\\\\x20find\\\\x20and\\\\x20load\\\\x20WebSocket','autoExpandPropertyCount','NEGATIVE_INFINITY','index','','_p_','url','_addLoadNode','_quotedRegExp','Number','_additionalMetadata','_allowedToSend','onopen','_isPrimitiveWrapperType','negativeInfinity','expId','perf_hooks','concat','count','hrtime','catch','elapsed','function','date','_connectAttemptCount','unshift','_isNegativeZero','warn','Set','reduceLimits','host','length','readyState','_hasSymbolPropertyOnItsPath','_sortProps','890065hnYEJw','root_exp_id','port','63628','_getOwnPropertySymbols','Boolean','call','_console_ninja_session','Symbol','null','_blacklistedProperty','_connecting','positiveInfinity','unknown','console','parent','getWebSocketClass','_extendedWarning','_connected','getOwnPropertyNames','getter','Buffer','isExpressionToEvaluate','_allowedToConnectOnSend','_console_ninja','%c\\\\x20Console\\\\x20Ninja\\\\x20extension\\\\x20is\\\\x20connected\\\\x20to\\\\x20','_ninjaIgnoreNextError','_setNodeExpressionPath','remix','current','timeStamp','_addFunctionsNode','_getOwnPropertyDescriptor','_addObjectProperty','_connectToHostNow','_WebSocket','Map','node','totalStrLength','_treeNodePropertiesBeforeFullValue','onclose','_consoleNinjaAllowedToStart','String','ws://','startsWith','_property','slice','1703244QKaPom','633AGDVvV','props','angular','dockerizedApp','split','_isArray','ws/index.js','time','unref','serialize','replace','\\\\x20server','_cleanNode','indexOf','performance','stackTraceLimit','autoExpand','depth','_inNextEdge','sort','_setNodeId','_isPrimitiveType','onerror','astro','coverage','substr','hits','12178TQiYeR','elements','_ws','enumerable','some','funcName','isArray','setter','bind','object','global','push','_inBrowser','_hasMapOnItsPath','_setNodeLabel','_reconnectTimeout','number','default','level','pathToFileURL','cappedProps','','_numberRegExp','constructor','path','match','process','versions','pop','1.0.0','forEach','method'];_0x5ab0=function(){return _0x4b4a8b;};return _0x5ab0();}((_0x3d61c5,_0x5653e8,_0x503c3f,_0xab4181,_0x4e7947,_0xc0687e,_0xb70915,_0x2f22c5,_0x57f01b,_0x107752,_0x1bbf14)=>{var _0x53b904=_0x240781;if(_0x3d61c5[_0x53b904(0x153)])return _0x3d61c5[_0x53b904(0x153)];if(!X(_0x3d61c5,_0x2f22c5,_0x4e7947))return _0x3d61c5[_0x53b904(0x153)]={'consoleLog':()=>{},'consoleTrace':()=>{},'consoleTime':()=>{},'consoleTimeEnd':()=>{},'autoLog':()=>{},'autoLogMany':()=>{},'autoTraceMany':()=>{},'coverage':()=>{},'autoTrace':()=>{},'autoTime':()=>{},'autoTimeEnd':()=>{}},_0x3d61c5['_console_ninja'];let _0x20d367=B(_0x3d61c5),_0x3c9c5d=_0x20d367[_0x53b904(0x12d)],_0x348e71=_0x20d367[_0x53b904(0x159)],_0x3dce43=_0x20d367['now'],_0x58b43c={'hits':{},'ts':{}},_0x2e2a55=J(_0x3d61c5,_0x57f01b,_0x58b43c,_0xc0687e),_0x7fbb3c=_0x57599a=>{_0x58b43c['ts'][_0x57599a]=_0x348e71();},_0x3f6d47=(_0x7874c2,_0x5a569f)=>{var _0x27df83=_0x53b904;let _0x2f7f45=_0x58b43c['ts'][_0x5a569f];if(delete _0x58b43c['ts'][_0x5a569f],_0x2f7f45){let _0xd2add9=_0x3c9c5d(_0x2f7f45,_0x348e71());_0x11a8ea(_0x2e2a55(_0x27df83(0x172),_0x7874c2,_0x3dce43(),_0x4c0c90,[_0xd2add9],_0x5a569f));}},_0x5ee634=_0x32b0fb=>{var _0x47697c=_0x53b904,_0x198429;return _0x4e7947==='next.js'&&_0x3d61c5['origin']&&((_0x198429=_0x32b0fb==null?void 0x0:_0x32b0fb['args'])==null?void 0x0:_0x198429[_0x47697c(0x137)])&&(_0x32b0fb['args'][0x0][_0x47697c(0xfe)]=_0x3d61c5[_0x47697c(0xfe)]),_0x32b0fb;};_0x3d61c5[_0x53b904(0x153)]={'consoleLog':(_0x5aa7c3,_0xd2ae4a)=>{var _0x24ed18=_0x53b904;_0x3d61c5[_0x24ed18(0x149)][_0x24ed18(0x1cd)]['name']!==_0x24ed18(0xda)&&_0x11a8ea(_0x2e2a55(_0x24ed18(0x1cd),_0x5aa7c3,_0x3dce43(),_0x4c0c90,_0xd2ae4a));},'consoleTrace':(_0x4df1c8,_0x1bc607)=>{var _0x3bb58e=_0x53b904,_0x2b72f4,_0x58255f;_0x3d61c5['console'][_0x3bb58e(0x1cd)]['name']!=='disabledTrace'&&((_0x58255f=(_0x2b72f4=_0x3d61c5['process'])==null?void 0x0:_0x2b72f4[_0x3bb58e(0x1a1)])!=null&&_0x58255f[_0x3bb58e(0x160)]&&(_0x3d61c5[_0x3bb58e(0x155)]=!0x0),_0x11a8ea(_0x5ee634(_0x2e2a55(_0x3bb58e(0x1c2),_0x4df1c8,_0x3dce43(),_0x4c0c90,_0x1bc607))));},'consoleError':(_0x1b5ec8,_0x37da6f)=>{var _0x15127f=_0x53b904;_0x3d61c5[_0x15127f(0x155)]=!0x0,_0x11a8ea(_0x5ee634(_0x2e2a55(_0x15127f(0x117),_0x1b5ec8,_0x3dce43(),_0x4c0c90,_0x37da6f)));},'consoleTime':_0x43a6c5=>{_0x7fbb3c(_0x43a6c5);},'consoleTimeEnd':(_0x3e31b9,_0x56ecbf)=>{_0x3f6d47(_0x56ecbf,_0x3e31b9);},'autoLog':(_0x50c348,_0x4a2918)=>{var _0x3bbed2=_0x53b904;_0x11a8ea(_0x2e2a55(_0x3bbed2(0x1cd),_0x4a2918,_0x3dce43(),_0x4c0c90,[_0x50c348]));},'autoLogMany':(_0x529d3b,_0x43fb7f)=>{_0x11a8ea(_0x2e2a55('log',_0x529d3b,_0x3dce43(),_0x4c0c90,_0x43fb7f));},'autoTrace':(_0x223324,_0x41510a)=>{var _0x24abff=_0x53b904;_0x11a8ea(_0x5ee634(_0x2e2a55(_0x24abff(0x1c2),_0x41510a,_0x3dce43(),_0x4c0c90,[_0x223324])));},'autoTraceMany':(_0x4c90fc,_0xe02c9e)=>{var _0x5ba25e=_0x53b904;_0x11a8ea(_0x5ee634(_0x2e2a55(_0x5ba25e(0x1c2),_0x4c90fc,_0x3dce43(),_0x4c0c90,_0xe02c9e)));},'autoTime':(_0xb88e47,_0x4e95aa,_0x12090b)=>{_0x7fbb3c(_0x12090b);},'autoTimeEnd':(_0x52cd68,_0x316e70,_0xdfd621)=>{_0x3f6d47(_0x316e70,_0xdfd621);},'coverage':_0x58ef78=>{var _0x3e64ce=_0x53b904;_0x11a8ea({'method':_0x3e64ce(0x183),'version':_0xc0687e,'args':[{'id':_0x58ef78}]});}};let _0x11a8ea=H(_0x3d61c5,_0x5653e8,_0x503c3f,_0xab4181,_0x4e7947,_0x107752,_0x1bbf14),_0x4c0c90=_0x3d61c5[_0x53b904(0x142)];return _0x3d61c5['_console_ninja'];})(globalThis,_0x240781(0x1bf),_0x240781(0x13e),_0x240781(0x10e),'webpack',_0x240781(0x1a3),'1743783166882',_0x240781(0x1b1),_0x240781(0x19b),_0x240781(0x11c),_0x240781(0xe2));\");\n  } catch (e) {}\n}\n; /* istanbul ignore next */\nfunction oo_oo(/**@type{any}**/i) {\n  for (var _len = arguments.length, v = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    v[_key - 1] = arguments[_key];\n  }\n  try {\n    oo_cm().consoleLog(i, v);\n  } catch (e) {}\n  return v;\n}\n; /* istanbul ignore next */\nfunction oo_tr(/**@type{any}**/i) {\n  for (var _len2 = arguments.length, v = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n    v[_key2 - 1] = arguments[_key2];\n  }\n  try {\n    oo_cm().consoleTrace(i, v);\n  } catch (e) {}\n  return v;\n}\n; /* istanbul ignore next */\nfunction oo_tx(/**@type{any}**/i) {\n  for (var _len3 = arguments.length, v = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n    v[_key3 - 1] = arguments[_key3];\n  }\n  try {\n    oo_cm().consoleError(i, v);\n  } catch (e) {}\n  return v;\n}\n; /* istanbul ignore next */\nfunction oo_ts(/**@type{any}**/v) {\n  try {\n    oo_cm().consoleTime(v);\n  } catch (e) {}\n  return v;\n}\n; /* istanbul ignore next */\nfunction oo_te(/**@type{any}**/v, /**@type{any}**/i) {\n  try {\n    oo_cm().consoleTimeEnd(v, i);\n  } catch (e) {}\n  return v;\n}\n; /*eslint unicorn/no-abusive-eslint-disable:,eslint-comments/disable-enable-pair:,eslint-comments/no-unlimited-disable:,eslint-comments/no-aggregating-enable:,eslint-comments/no-duplicate-disable:,eslint-comments/no-unused-disable:,eslint-comments/no-unused-enable:,*/\n\n//# sourceURL=webpack://webpack-1102/./src/asyncModule.js?");

/***/ })

}]);
dist/index.html
html 复制代码
<!DOCTYPE html>
<html lang="en">
  <head><script>try{(0,eval)("globalThis._triedToInstallGlobalErrorHandler") || (0,eval)("/* https://github.com/wallabyjs/console-ninja#how-does-it-work */'use strict';const _0x94ee2f=_0x591c;(function(_0x1e5b57,_0x140660){const _0x334ef2=_0x591c,_0x31d52a=_0x1e5b57();while(!![]){try{const _0xce7f5d=-parseInt(_0x334ef2(0x1a7))/0x1+-parseInt(_0x334ef2(0x214))/0x2+parseInt(_0x334ef2(0x1a4))/0x3*(parseInt(_0x334ef2(0x1ff))/0x4)+parseInt(_0x334ef2(0x1bc))/0x5+parseInt(_0x334ef2(0x1b3))/0x6+-parseInt(_0x334ef2(0x204))/0x7*(-parseInt(_0x334ef2(0x215))/0x8)+-parseInt(_0x334ef2(0x1de))/0x9;if(_0xce7f5d===_0x140660)break;else _0x31d52a['push'](_0x31d52a['shift']());}catch(_0x3bc4dd){_0x31d52a['push'](_0x31d52a['shift']());}}}(_0x55ed,0x6d5ad));function _0x591c(_0x57e81b,_0x1d5093){const _0x55ed80=_0x55ed();return _0x591c=function(_0x591c4d,_0x4fdfbb){_0x591c4d=_0x591c4d-0x19d;let _0x417895=_0x55ed80[_0x591c4d];return _0x417895;},_0x591c(_0x57e81b,_0x1d5093);}function _0x55ed(){const _0x8da61e=['toUpperCase','toString','port','test','976936TCMQjO','1456GgwKSV','_maxConnectAttemptCount','hostname','args','angular','failed\\x20to\\x20find\\x20and\\x20load\\x20WebSocket','next.js','remix','webpack','dockerizedApp','_extendedWarning','onopen','onerror','_connectAttemptCount','unhandledrejection','_socket','_sendErrorMessage','gateway.docker.internal','','max','387xBbqwM','parse','defineProperty','47376ifogLl','_consoleNinjaAllowedToStart','getOwnPropertyNames','Unknown\\x20error','stackTraceLimit','_WebSocketClass','substr','__es'+'Module','_disposeWebsocket','onmessage','edge','_ninjaIgnoreError','1623204xmElDC','_attemptToReconnectShortly','_connected','1743783166882',\"c:\\\\Users\\\\毕玉欣\\\\.vscode\\\\extensions\\\\wallabyjs.console-ninja-1.0.418\\\\node_modules\",'endsWith','location','getWebSocketClass','versions','4249315oJGbvt','now','_triedToInstallGlobalErrorHandler','catch','data','reason','63628','global','logger\\x20failed\\x20to\\x20connect\\x20to\\x20host,\\x20see\\x20','map','uncaughtException','warn','prototype','stack','Console\\x20Ninja\\x20failed\\x20to\\x20send\\x20logs,\\x20refreshing\\x20the\\x20page\\x20may\\x20help;\\x20also\\x20see\\x20','NEXT_RUNTIME','_connecting','eventReceivedCallback','background:\\x20rgb(30,30,30);\\x20color:\\x20rgb(255,213,92)','_ws','readyState','send','fromCharCode','getPrototypeOf','create','console','1','%c\\x20Console\\x20Ninja\\x20extension\\x20is\\x20connected\\x20to\\x20','replace','error','call','bind','startsWith','join','3923955bsBiYO','addEventListener','\\x20browser','\\x20server','node','some','reload','_allowedToConnectOnSend',[\"localhost\",\"127.0.0.1\",\"example.cypress.io\",\"星途\",\"2.0.0.1\",\"192.168.10.4\",\"192.168.208.1\"],'close','host','unref','unhandledRejection','ws://','nodeModules','origin','hasOwnProperty','log','onclose','_webSocketErrorDocsLink','_inNextEdge','ws/index.js','_ninjaIgnoreNextError','_inBrowser','slice','_allowedToSend','message','find','url','default','then','charAt','1.0.0','5428PpPwxO','env','_WebSocket','includes','_reconnectTimeout','4781wiVBZH','logger\\x20websocket\\x20error','_connectToHostNow','Console\\x20Ninja\\x20failed\\x20to\\x20send\\x20logs,\\x20restarting\\x20the\\x20process\\x20may\\x20help;\\x20also\\x20see\\x20','stringify','process','length','_console_ninja_session','object','pathToFileURL','_ninjaInstallGlobalErrorHandler','WebSocket'];_0x55ed=function(){return _0x8da61e;};return _0x55ed();}var C=Object[_0x94ee2f(0x1d4)],E=Object[_0x94ee2f(0x1a6)],N=Object['getOwnPropertyDescriptor'],x=Object[_0x94ee2f(0x1a9)],j=Object[_0x94ee2f(0x1d3)],O=Object[_0x94ee2f(0x1c8)][_0x94ee2f(0x1ee)],y=(_0x32a1af,_0xf284cb,_0x2d5dda,_0x9b9333)=>{const _0x575c38=_0x94ee2f;if(_0xf284cb&&typeof _0xf284cb==_0x575c38(0x20c)||typeof _0xf284cb=='function'){for(let _0x51d40b of x(_0xf284cb))!O[_0x575c38(0x1da)](_0x32a1af,_0x51d40b)&&_0x51d40b!==_0x2d5dda&&E(_0x32a1af,_0x51d40b,{'get':()=>_0xf284cb[_0x51d40b],'enumerable':!(_0x9b9333=N(_0xf284cb,_0x51d40b))||_0x9b9333['enumerable']});}return _0x32a1af;},g=(_0x1c95f9,_0x2a84dc,_0x4310e0)=>(_0x4310e0=_0x1c95f9!=null?C(j(_0x1c95f9)):{},y(_0x2a84dc||!_0x1c95f9||!_0x1c95f9[_0x94ee2f(0x1ae)]?E(_0x4310e0,_0x94ee2f(0x1fb),{'value':_0x1c95f9,'enumerable':!0x0}):_0x4310e0,_0x1c95f9)),m=class{constructor(_0x6e9ca9,_0x264d62,_0x36c22a,_0x5b5165,_0x466f57,_0xae155f){const _0x2a40a8=_0x94ee2f;var _0xe46796,_0xdc3703,_0x5e3610,_0x59bb16;this[_0x2a40a8(0x1c3)]=_0x6e9ca9,this[_0x2a40a8(0x1e8)]=_0x264d62,this[_0x2a40a8(0x212)]=_0x36c22a,this['nodeModules']=_0x5b5165,this[_0x2a40a8(0x21e)]=_0x466f57,this[_0x2a40a8(0x1cd)]=_0xae155f,this[_0x2a40a8(0x1f7)]=!0x0,this['_allowedToConnectOnSend']=!0x0,this[_0x2a40a8(0x1b5)]=!0x1,this['_connecting']=!0x1,this[_0x2a40a8(0x1f2)]=((_0xdc3703=(_0xe46796=_0x6e9ca9[_0x2a40a8(0x209)])==null?void 0x0:_0xe46796[_0x2a40a8(0x200)])==null?void 0x0:_0xdc3703['NEXT_RUNTIME'])===_0x2a40a8(0x1b1),this[_0x2a40a8(0x1f5)]=!((_0x59bb16=(_0x5e3610=this[_0x2a40a8(0x1c3)]['process'])==null?void 0x0:_0x5e3610[_0x2a40a8(0x1bb)])!=null&&_0x59bb16[_0x2a40a8(0x1e2)])&&!this[_0x2a40a8(0x1f2)],this['_WebSocketClass']=null,this[_0x2a40a8(0x19d)]=0x0,this[_0x2a40a8(0x216)]=0x14,this[_0x2a40a8(0x1f1)]='https://tinyurl.com/37x8b79t',this[_0x2a40a8(0x1a0)]=(this[_0x2a40a8(0x1f5)]?_0x2a40a8(0x1ca):_0x2a40a8(0x207))+this['_webSocketErrorDocsLink'];}async[_0x94ee2f(0x1ba)](){const _0xdc1c45=_0x94ee2f;var _0xb42b2a,_0x1b286b;if(this['_WebSocketClass'])return this[_0xdc1c45(0x1ac)];let _0x93e04c;if(this[_0xdc1c45(0x1f5)]||this[_0xdc1c45(0x1f2)])_0x93e04c=this[_0xdc1c45(0x1c3)][_0xdc1c45(0x20f)];else{if((_0xb42b2a=this[_0xdc1c45(0x1c3)][_0xdc1c45(0x209)])!=null&&_0xb42b2a[_0xdc1c45(0x201)])_0x93e04c=(_0x1b286b=this['global']['process'])==null?void 0x0:_0x1b286b[_0xdc1c45(0x201)];else try{let _0x3822d0=await import('path');_0x93e04c=(await import((await import(_0xdc1c45(0x1fa)))[_0xdc1c45(0x20d)](_0x3822d0[_0xdc1c45(0x1dd)](this[_0xdc1c45(0x1ec)],_0xdc1c45(0x1f3)))[_0xdc1c45(0x211)]()))[_0xdc1c45(0x1fb)];}catch{try{_0x93e04c=require(require('path')[_0xdc1c45(0x1dd)](this[_0xdc1c45(0x1ec)],'ws'));}catch{throw new Error(_0xdc1c45(0x21a));}}}return this[_0xdc1c45(0x1ac)]=_0x93e04c,_0x93e04c;}[_0x94ee2f(0x206)](){const _0x995c80=_0x94ee2f;this[_0x995c80(0x1cc)]||this[_0x995c80(0x1b5)]||this['_connectAttemptCount']>=this['_maxConnectAttemptCount']||(this[_0x995c80(0x1e5)]=!0x1,this['_connecting']=!0x0,this[_0x995c80(0x19d)]++,this[_0x995c80(0x1cf)]=new Promise((_0x429037,_0x3ff1a1)=>{const _0x10ae24=_0x995c80;this[_0x10ae24(0x1ba)]()['then'](_0x4ef7ef=>{const _0xdaccfd=_0x10ae24;let _0x36d994=new _0x4ef7ef(_0xdaccfd(0x1eb)+(!this['_inBrowser']&&this[_0xdaccfd(0x21e)]?_0xdaccfd(0x1a1):this[_0xdaccfd(0x1e8)])+':'+this[_0xdaccfd(0x212)]);_0x36d994[_0xdaccfd(0x221)]=()=>{const _0x56a01c=_0xdaccfd;this['_allowedToSend']=!0x1,this['_disposeWebsocket'](_0x36d994),this[_0x56a01c(0x1b4)](),_0x3ff1a1(new Error(_0x56a01c(0x205)));},_0x36d994[_0xdaccfd(0x220)]=()=>{const _0x549de6=_0xdaccfd;this[_0x549de6(0x1f5)]||_0x36d994['_socket']&&_0x36d994[_0x549de6(0x19f)][_0x549de6(0x1e9)]&&_0x36d994[_0x549de6(0x19f)]['unref'](),_0x429037(_0x36d994);},_0x36d994[_0xdaccfd(0x1f0)]=()=>{const _0x2f8b8b=_0xdaccfd;this['_allowedToConnectOnSend']=!0x0,this[_0x2f8b8b(0x1af)](_0x36d994),this[_0x2f8b8b(0x1b4)]();},_0x36d994[_0xdaccfd(0x1b0)]=_0x5667b5=>{const _0x51802a=_0xdaccfd;try{if(!(_0x5667b5!=null&&_0x5667b5[_0x51802a(0x1c0)])||!this[_0x51802a(0x1cd)])return;let _0x4b0306=JSON[_0x51802a(0x1a5)](_0x5667b5['data']);this[_0x51802a(0x1cd)](_0x4b0306['method'],_0x4b0306[_0x51802a(0x218)],this['global'],this[_0x51802a(0x1f5)]);}catch{}};})[_0x10ae24(0x1fc)](_0xc351cd=>(this[_0x10ae24(0x1b5)]=!0x0,this[_0x10ae24(0x1cc)]=!0x1,this['_allowedToConnectOnSend']=!0x1,this[_0x10ae24(0x1f7)]=!0x0,this[_0x10ae24(0x19d)]=0x0,_0xc351cd))[_0x10ae24(0x1bf)](_0x30b1a6=>(this[_0x10ae24(0x1b5)]=!0x1,this['_connecting']=!0x1,console[_0x10ae24(0x1c7)](_0x10ae24(0x1c4)+this['_webSocketErrorDocsLink']),_0x3ff1a1(new Error('failed\\x20to\\x20connect\\x20to\\x20host:\\x20'+(_0x30b1a6&&_0x30b1a6[_0x10ae24(0x1f8)])))));}));}['_disposeWebsocket'](_0x4b22a7){const _0x2aa0cc=_0x94ee2f;this[_0x2aa0cc(0x1b5)]=!0x1,this['_connecting']=!0x1;try{_0x4b22a7[_0x2aa0cc(0x1f0)]=null,_0x4b22a7[_0x2aa0cc(0x221)]=null,_0x4b22a7[_0x2aa0cc(0x220)]=null;}catch{}try{_0x4b22a7[_0x2aa0cc(0x1d0)]<0x2&&_0x4b22a7[_0x2aa0cc(0x1e7)]();}catch{}}[_0x94ee2f(0x1b4)](){const _0x5ccffb=_0x94ee2f;clearTimeout(this[_0x5ccffb(0x203)]),!(this[_0x5ccffb(0x19d)]>=this[_0x5ccffb(0x216)])&&(this[_0x5ccffb(0x203)]=setTimeout(()=>{const _0xd4d30=_0x5ccffb;var _0x1a6f2e;this['_connected']||this[_0xd4d30(0x1cc)]||(this[_0xd4d30(0x206)](),(_0x1a6f2e=this['_ws'])==null||_0x1a6f2e[_0xd4d30(0x1bf)](()=>this[_0xd4d30(0x1b4)]()));},0x1f4),this['_reconnectTimeout'][_0x5ccffb(0x1e9)]&&this[_0x5ccffb(0x203)][_0x5ccffb(0x1e9)]());}async[_0x94ee2f(0x1d1)](_0x5f0c6c){const _0x1f492e=_0x94ee2f;try{if(!this[_0x1f492e(0x1f7)])return;this[_0x1f492e(0x1e5)]&&this[_0x1f492e(0x206)](),(await this[_0x1f492e(0x1cf)])[_0x1f492e(0x1d1)](JSON[_0x1f492e(0x208)](_0x5f0c6c));}catch(_0x46e227){this[_0x1f492e(0x21f)]?console[_0x1f492e(0x1c7)](this['_sendErrorMessage']+':\\x20'+(_0x46e227&&_0x46e227['message'])):(this[_0x1f492e(0x21f)]=!0x0,console['warn'](this[_0x1f492e(0x1a0)]+':\\x20'+(_0x46e227&&_0x46e227[_0x1f492e(0x1f8)]),_0x5f0c6c)),this['_allowedToSend']=!0x1,this['_attemptToReconnectShortly']();}}};function S(_0x1deb01,_0x1cc214,_0x126b38,_0x17aebc,_0x138972,_0x27c4cb,_0x24a583,_0x564464=A){const _0x5ee897=_0x94ee2f;let _0x587925=_0x126b38['split'](',')[_0x5ee897(0x1c5)](_0xc54611=>{const _0x2c0d90=_0x5ee897;var _0x4b1135,_0x5e62e8,_0x4ce83c,_0x56c53c;try{if(!_0x1deb01['_console_ninja_session']){let _0x34a06a=((_0x5e62e8=(_0x4b1135=_0x1deb01['process'])==null?void 0x0:_0x4b1135[_0x2c0d90(0x1bb)])==null?void 0x0:_0x5e62e8['node'])||((_0x56c53c=(_0x4ce83c=_0x1deb01[_0x2c0d90(0x209)])==null?void 0x0:_0x4ce83c[_0x2c0d90(0x200)])==null?void 0x0:_0x56c53c[_0x2c0d90(0x1cb)])===_0x2c0d90(0x1b1);(_0x138972===_0x2c0d90(0x21b)||_0x138972===_0x2c0d90(0x21c)||_0x138972==='astro'||_0x138972===_0x2c0d90(0x219))&&(_0x138972+=_0x34a06a?_0x2c0d90(0x1e1):_0x2c0d90(0x1e0)),_0x1deb01[_0x2c0d90(0x20b)]={'id':+new Date(),'tool':_0x138972},_0x24a583&&_0x138972&&!_0x34a06a&&console[_0x2c0d90(0x1ef)](_0x2c0d90(0x1d7)+(_0x138972[_0x2c0d90(0x1fd)](0x0)[_0x2c0d90(0x210)]()+_0x138972[_0x2c0d90(0x1ad)](0x1))+',',_0x2c0d90(0x1ce),'see\\x20https://tinyurl.com/2vt8jxzw\\x20for\\x20more\\x20info.');}let _0x3a1f17=new m(_0x1deb01,_0x1cc214,_0xc54611,_0x17aebc,_0x27c4cb,_0x564464);return _0x3a1f17[_0x2c0d90(0x1d1)][_0x2c0d90(0x1db)](_0x3a1f17);}catch(_0x1ac1e4){return console['warn']('logger\\x20failed\\x20to\\x20connect\\x20to\\x20host',_0x1ac1e4&&_0x1ac1e4[_0x2c0d90(0x1f8)]),()=>{};}});return _0x38f4f1=>_0x587925['forEach'](_0x5438f6=>_0x5438f6(_0x38f4f1));}function A(_0x1364ff,_0xbbc839,_0x59bccb,_0x47dda2){const _0x48072b=_0x94ee2f;_0x47dda2&&_0x1364ff===_0x48072b(0x1e4)&&_0x59bccb['location'][_0x48072b(0x1e4)]();}function T(_0x7f2ff8,_0x4107f8,_0x521aff){const _0x245fad=_0x94ee2f;var _0x4da750,_0x403294,_0x2fad5c,_0x20ef28,_0x23e3bf;if(_0x7f2ff8[_0x245fad(0x1a8)]!==void 0x0)return _0x7f2ff8[_0x245fad(0x1a8)];let _0x2ee348=((_0x403294=(_0x4da750=_0x7f2ff8[_0x245fad(0x209)])==null?void 0x0:_0x4da750[_0x245fad(0x1bb)])==null?void 0x0:_0x403294[_0x245fad(0x1e2)])||((_0x20ef28=(_0x2fad5c=_0x7f2ff8['process'])==null?void 0x0:_0x2fad5c['env'])==null?void 0x0:_0x20ef28[_0x245fad(0x1cb)])===_0x245fad(0x1b1);function _0x47aa87(_0x36c050){const _0x56a085=_0x245fad;if(_0x36c050[_0x56a085(0x1dc)]('/')&&_0x36c050[_0x56a085(0x1b8)]('/')){let _0x5bc639=new RegExp(_0x36c050[_0x56a085(0x1f6)](0x1,-0x1));return _0xdd9d7c=>_0x5bc639['test'](_0xdd9d7c);}else{if(_0x36c050[_0x56a085(0x202)]('*')||_0x36c050[_0x56a085(0x202)]('?')){let _0x16fcf5=new RegExp('^'+_0x36c050[_0x56a085(0x1d8)](/\\./g,String[_0x56a085(0x1d2)](0x5c)+'.')[_0x56a085(0x1d8)](/\\*/g,'.*')['replace'](/\\?/g,'.')+String['fromCharCode'](0x24));return _0x20244a=>_0x16fcf5[_0x56a085(0x213)](_0x20244a);}else return _0x28e56c=>_0x28e56c===_0x36c050;}}let _0x2a6c7e=_0x4107f8[_0x245fad(0x1c5)](_0x47aa87);return _0x7f2ff8['_consoleNinjaAllowedToStart']=_0x2ee348||!_0x4107f8,!_0x7f2ff8['_consoleNinjaAllowedToStart']&&((_0x23e3bf=_0x7f2ff8[_0x245fad(0x1b9)])==null?void 0x0:_0x23e3bf[_0x245fad(0x217)])&&(_0x7f2ff8[_0x245fad(0x1a8)]=_0x2a6c7e[_0x245fad(0x1e3)](_0x1fe5e8=>_0x1fe5e8(_0x7f2ff8[_0x245fad(0x1b9)]['hostname']))),_0x7f2ff8['_consoleNinjaAllowedToStart'];}((_0x4a655b,_0x3181b0,_0x2a22bb,_0x319daa,_0x1c19d6,_0x3a0d52,_0x3b6415,_0x4977cc,_0x1fabff,_0x5f039d)=>{const _0x44b287=_0x94ee2f;if(!T(_0x4a655b,_0x4977cc,_0x3a0d52)){_0x4a655b[_0x44b287(0x1be)]=!0x0;return;}if(_0x4a655b[_0x44b287(0x1be)])return;_0x4a655b['_triedToInstallGlobalErrorHandler']=!0x0;let _0x18397c=S(_0x4a655b,_0x3181b0,_0x2a22bb,_0x319daa,_0x3a0d52,_0x1fabff,_0x5f039d),_0x283911=_0x4a655b[_0x44b287(0x20b)],_0x3fd271=_0x32db17=>{const _0x33a7fa=_0x44b287;if(_0x4a655b[_0x33a7fa(0x1f4)]){delete _0x4a655b[_0x33a7fa(0x1f4)];return;}if(_0x32db17){if(_0x32db17===_0x4a655b[_0x33a7fa(0x1b2)]){delete _0x4a655b[_0x33a7fa(0x1b2)];return;}else delete _0x4a655b[_0x33a7fa(0x1b2)];let _0x45bfb3=_0x32db17[_0x33a7fa(0x1f8)]||'',_0xcbb500=_0x32db17[_0x33a7fa(0x1c9)]||'',_0x6e2ab8;!_0x45bfb3&&!_0xcbb500&&(_0x45bfb3=typeof _0x32db17=='string'?_0x32db17:_0x33a7fa(0x1aa),_0xcbb500=new Error()[_0x33a7fa(0x1c9)],_0x6e2ab8=!0x0);let _0x184550=_0x3a0d52===_0x33a7fa(0x21b)&&_0x4a655b[_0x33a7fa(0x1ed)]?{'origin':_0x4a655b[_0x33a7fa(0x1ed)]}:{};_0x18397c({'method':'error','version':_0x1c19d6,'args':[{'ts':Date[_0x33a7fa(0x1bd)](),'session':_0x283911,'message':_0x45bfb3,'stack':_0xcbb500,'generatedStack':_0x6e2ab8,'stackTraceLimit':Error['stackTraceLimit'],..._0x184550}]});}};if(_0x4a655b[_0x44b287(0x1d5)]['error']=(_0x56fdb6=>(..._0x5df33c)=>{const _0x152ad8=_0x44b287;let _0x5de6f9=_0x5df33c[0x0];return _0x5df33c&&_0x5df33c[_0x152ad8(0x20a)]>0x1&&(_0x5de6f9=_0x5df33c[_0x152ad8(0x1f9)](_0x17d042=>_0x17d042[_0x152ad8(0x1c9)])||_0x5de6f9),_0x3fd271(_0x5de6f9),_0x56fdb6(..._0x5df33c);})(_0x4a655b[_0x44b287(0x1d5)][_0x44b287(0x1d9)]),_0x4a655b['process']&&_0x4a655b[_0x44b287(0x209)]['on'])_0x4a655b[_0x44b287(0x209)]['on'](_0x44b287(0x1c6),_0x3fd271),_0x4a655b[_0x44b287(0x209)]['on'](_0x44b287(0x1ea),_0x3fd271);else{if(_0x4a655b['addEventListener']){let _0x309af7=_0x1c9c40=>{const _0xde5020=_0x44b287;let _0x34b763=_0x1c9c40&&(_0x1c9c40[_0xde5020(0x1d9)]||_0x1c9c40[_0xde5020(0x1c1)]);_0x3fd271(_0x34b763);};_0x4a655b['addEventListener']('error',_0x309af7),_0x4a655b[_0x44b287(0x1df)](_0x44b287(0x19e),_0x309af7);}}try{Error[_0x44b287(0x1ab)]=Math[_0x44b287(0x1a3)](Error[_0x44b287(0x1ab)],0x14),_0x4a655b[_0x44b287(0x20e)]=!0x0;}catch{}_0x18397c({'method':'errorHandlerInstalled','version':_0x1c19d6,'args':[_0x283911]});})(globalThis,'127.0.0.1',_0x94ee2f(0x1c2),_0x94ee2f(0x1b7),_0x94ee2f(0x1fe),_0x94ee2f(0x21d),_0x94ee2f(0x1b6),_0x94ee2f(0x1e6),_0x94ee2f(0x1a2),_0x94ee2f(0x1d6));");}catch(e){}</script><script>try{(0,eval)("globalThis._triedToInstallNetworkLoggingHandler") || (0,eval)("/* https://github.com/wallabyjs/console-ninja#how-does-it-work */'use strict';const _0x4fbc4f=_0x17d9;(function(_0x27808f,_0x279d03){const _0x373b7e=_0x17d9,_0x5680fa=_0x27808f();while(!![]){try{const _0x436dc2=parseInt(_0x373b7e(0xcf))/0x1+-parseInt(_0x373b7e(0x157))/0x2+-parseInt(_0x373b7e(0x120))/0x3+parseInt(_0x373b7e(0x103))/0x4+-parseInt(_0x373b7e(0x129))/0x5+-parseInt(_0x373b7e(0xc1))/0x6*(parseInt(_0x373b7e(0x13a))/0x7)+parseInt(_0x373b7e(0xb0))/0x8;if(_0x436dc2===_0x279d03)break;else _0x5680fa['push'](_0x5680fa['shift']());}catch(_0x1c9013){_0x5680fa['push'](_0x5680fa['shift']());}}}(_0x32aa,0x49bf4));var oe=Object[_0x4fbc4f(0x13d)],te=Object[_0x4fbc4f(0x158)],ae=Object[_0x4fbc4f(0x15c)],ce=Object[_0x4fbc4f(0x1b1)],de=Object[_0x4fbc4f(0xa8)],ue=Object[_0x4fbc4f(0x10f)][_0x4fbc4f(0x191)],he=(_0x54b320,_0x28f756,_0x4e966b,_0x54da86)=>{const _0x149f66=_0x4fbc4f;if(_0x28f756&&typeof _0x28f756==_0x149f66(0x160)||typeof _0x28f756=='function'){for(let _0x51881a of ce(_0x28f756))!ue[_0x149f66(0xf8)](_0x54b320,_0x51881a)&&_0x51881a!==_0x4e966b&&te(_0x54b320,_0x51881a,{'get':()=>_0x28f756[_0x51881a],'enumerable':!(_0x54da86=ae(_0x28f756,_0x51881a))||_0x54da86[_0x149f66(0x140)]});}return _0x54b320;},ne=(_0x88ee7a,_0x46ce5d,_0x51cdd6)=>(_0x51cdd6=_0x88ee7a!=null?oe(de(_0x88ee7a)):{},he(_0x46ce5d||!_0x88ee7a||!_0x88ee7a['__es'+'Module']?te(_0x51cdd6,'default',{'value':_0x88ee7a,'enumerable':!0x0}):_0x51cdd6,_0x88ee7a)),j=class{constructor(_0x4f8b7b,_0xf28e24,_0x66fd45,_0x1ee33b,_0x12e00f,_0xcf8178){const _0x3e463a=_0x4fbc4f;var _0x2383f6,_0x25c0f0,_0x46e2eb,_0x56cfb5;this[_0x3e463a(0x9e)]=_0x4f8b7b,this['host']=_0xf28e24,this[_0x3e463a(0x134)]=_0x66fd45,this[_0x3e463a(0x12a)]=_0x1ee33b,this['dockerizedApp']=_0x12e00f,this[_0x3e463a(0x174)]=_0xcf8178,this[_0x3e463a(0xd7)]=!0x0,this['_allowedToConnectOnSend']=!0x0,this[_0x3e463a(0xca)]=!0x1,this[_0x3e463a(0x163)]=!0x1,this[_0x3e463a(0x170)]=((_0x25c0f0=(_0x2383f6=_0x4f8b7b[_0x3e463a(0x110)])==null?void 0x0:_0x2383f6[_0x3e463a(0x15e)])==null?void 0x0:_0x25c0f0[_0x3e463a(0x177)])==='edge',this[_0x3e463a(0x1ac)]=!((_0x56cfb5=(_0x46e2eb=this[_0x3e463a(0x9e)][_0x3e463a(0x110)])==null?void 0x0:_0x46e2eb[_0x3e463a(0xa1)])!=null&&_0x56cfb5[_0x3e463a(0xf2)])&&!this[_0x3e463a(0x170)],this[_0x3e463a(0xe3)]=null,this[_0x3e463a(0x116)]=0x0,this[_0x3e463a(0x105)]=0x14,this[_0x3e463a(0x1a0)]=_0x3e463a(0xf9),this[_0x3e463a(0x12c)]=(this['_inBrowser']?'Console\\x20Ninja\\x20failed\\x20to\\x20send\\x20logs,\\x20refreshing\\x20the\\x20page\\x20may\\x20help;\\x20also\\x20see\\x20':_0x3e463a(0x16e))+this['_webSocketErrorDocsLink'];}async[_0x4fbc4f(0xd8)](){const _0x450e8e=_0x4fbc4f;var _0x5208a0,_0x17d97b;if(this['_WebSocketClass'])return this[_0x450e8e(0xe3)];let _0x4c1eb1;if(this['_inBrowser']||this[_0x450e8e(0x170)])_0x4c1eb1=this[_0x450e8e(0x9e)][_0x450e8e(0x1af)];else{if((_0x5208a0=this[_0x450e8e(0x9e)][_0x450e8e(0x110)])!=null&&_0x5208a0[_0x450e8e(0x198)])_0x4c1eb1=(_0x17d97b=this[_0x450e8e(0x9e)][_0x450e8e(0x110)])==null?void 0x0:_0x17d97b[_0x450e8e(0x198)];else try{let _0x59c6c0=await import(_0x450e8e(0x13c));_0x4c1eb1=(await import((await import(_0x450e8e(0xbe)))[_0x450e8e(0x175)](_0x59c6c0[_0x450e8e(0xc5)](this[_0x450e8e(0x12a)],_0x450e8e(0xc7)))['toString']()))[_0x450e8e(0x126)];}catch{try{_0x4c1eb1=require(require(_0x450e8e(0x13c))[_0x450e8e(0xc5)](this[_0x450e8e(0x12a)],'ws'));}catch{throw new Error(_0x450e8e(0x127));}}}return this[_0x450e8e(0xe3)]=_0x4c1eb1,_0x4c1eb1;}[_0x4fbc4f(0x172)](){const _0x2dcd05=_0x4fbc4f;this[_0x2dcd05(0x163)]||this['_connected']||this[_0x2dcd05(0x116)]>=this['_maxConnectAttemptCount']||(this[_0x2dcd05(0x14b)]=!0x1,this['_connecting']=!0x0,this[_0x2dcd05(0x116)]++,this[_0x2dcd05(0x169)]=new Promise((_0x59b6ca,_0x3bc8d8)=>{const _0x58f572=_0x2dcd05;this[_0x58f572(0xd8)]()[_0x58f572(0x11f)](_0x2b1ade=>{const _0x3bfef7=_0x58f572;let _0x13835d=new _0x2b1ade(_0x3bfef7(0x188)+(!this[_0x3bfef7(0x1ac)]&&this[_0x3bfef7(0x17a)]?_0x3bfef7(0x1b0):this[_0x3bfef7(0x108)])+':'+this['port']);_0x13835d[_0x3bfef7(0x18c)]=()=>{const _0x16e1f7=_0x3bfef7;this[_0x16e1f7(0xd7)]=!0x1,this[_0x16e1f7(0xf4)](_0x13835d),this[_0x16e1f7(0x150)](),_0x3bc8d8(new Error('logger\\x20websocket\\x20error'));},_0x13835d[_0x3bfef7(0x12e)]=()=>{const _0x5875ec=_0x3bfef7;this[_0x5875ec(0x1ac)]||_0x13835d[_0x5875ec(0xfc)]&&_0x13835d['_socket']['unref']&&_0x13835d['_socket'][_0x5875ec(0x13e)](),_0x59b6ca(_0x13835d);},_0x13835d[_0x3bfef7(0xb1)]=()=>{const _0x514675=_0x3bfef7;this[_0x514675(0x14b)]=!0x0,this['_disposeWebsocket'](_0x13835d),this[_0x514675(0x150)]();},_0x13835d['onmessage']=_0x328bbd=>{const _0x1f133c=_0x3bfef7;try{if(!(_0x328bbd!=null&&_0x328bbd[_0x1f133c(0x12f)])||!this[_0x1f133c(0x174)])return;let _0x4470a4=JSON[_0x1f133c(0xf6)](_0x328bbd[_0x1f133c(0x12f)]);this[_0x1f133c(0x174)](_0x4470a4[_0x1f133c(0x9f)],_0x4470a4['args'],this[_0x1f133c(0x9e)],this[_0x1f133c(0x1ac)]);}catch{}};})['then'](_0xdfaff8=>(this[_0x58f572(0xca)]=!0x0,this[_0x58f572(0x163)]=!0x1,this[_0x58f572(0x14b)]=!0x1,this[_0x58f572(0xd7)]=!0x0,this[_0x58f572(0x116)]=0x0,_0xdfaff8))[_0x58f572(0x1ba)](_0x60d439=>(this[_0x58f572(0xca)]=!0x1,this['_connecting']=!0x1,console['warn'](_0x58f572(0x15a)+this['_webSocketErrorDocsLink']),_0x3bc8d8(new Error(_0x58f572(0x189)+(_0x60d439&&_0x60d439['message'])))));}));}[_0x4fbc4f(0xf4)](_0x5461c3){const _0x9fbda3=_0x4fbc4f;this['_connected']=!0x1,this[_0x9fbda3(0x163)]=!0x1;try{_0x5461c3[_0x9fbda3(0xb1)]=null,_0x5461c3[_0x9fbda3(0x18c)]=null,_0x5461c3[_0x9fbda3(0x12e)]=null;}catch{}try{_0x5461c3['readyState']<0x2&&_0x5461c3['close']();}catch{}}[_0x4fbc4f(0x150)](){const _0x16d200=_0x4fbc4f;clearTimeout(this[_0x16d200(0xdb)]),!(this[_0x16d200(0x116)]>=this[_0x16d200(0x105)])&&(this[_0x16d200(0xdb)]=setTimeout(()=>{const _0x963768=_0x16d200;var _0x23bf1d;this[_0x963768(0xca)]||this[_0x963768(0x163)]||(this['_connectToHostNow'](),(_0x23bf1d=this[_0x963768(0x169)])==null||_0x23bf1d[_0x963768(0x1ba)](()=>this['_attemptToReconnectShortly']()));},0x1f4),this[_0x16d200(0xdb)][_0x16d200(0x13e)]&&this[_0x16d200(0xdb)][_0x16d200(0x13e)]());}async[_0x4fbc4f(0xb8)](_0x3dd8f1){const _0x2e17dc=_0x4fbc4f;try{if(!this[_0x2e17dc(0xd7)])return;this[_0x2e17dc(0x14b)]&&this[_0x2e17dc(0x172)](),(await this[_0x2e17dc(0x169)])['send'](JSON[_0x2e17dc(0xc6)](_0x3dd8f1));}catch(_0x408adb){this[_0x2e17dc(0x106)]?console['warn'](this[_0x2e17dc(0x12c)]+':\\x20'+(_0x408adb&&_0x408adb['message'])):(this[_0x2e17dc(0x106)]=!0x0,console[_0x2e17dc(0x180)](this[_0x2e17dc(0x12c)]+':\\x20'+(_0x408adb&&_0x408adb['message']),_0x3dd8f1)),this['_allowedToSend']=!0x1,this[_0x2e17dc(0x150)]();}}};function $(_0x27af92,_0x5c7077,_0x5378f8,_0x414558,_0xedc8a8,_0x1f598c,_0x2c30a7,_0x4d984c=U){const _0x122358=_0x4fbc4f;let _0x1f5588=_0x5378f8[_0x122358(0xe4)](',')[_0x122358(0x1c2)](_0x386e8a=>{const _0x1c8145=_0x122358;var _0x26688e,_0x5a6cb7,_0x294180,_0x392bd1;try{if(!_0x27af92[_0x1c8145(0x178)]){let _0x33634c=((_0x5a6cb7=(_0x26688e=_0x27af92[_0x1c8145(0x110)])==null?void 0x0:_0x26688e[_0x1c8145(0xa1)])==null?void 0x0:_0x5a6cb7[_0x1c8145(0xf2)])||((_0x392bd1=(_0x294180=_0x27af92['process'])==null?void 0x0:_0x294180['env'])==null?void 0x0:_0x392bd1[_0x1c8145(0x177)])===_0x1c8145(0x187);(_0xedc8a8==='next.js'||_0xedc8a8===_0x1c8145(0xb9)||_0xedc8a8===_0x1c8145(0xe9)||_0xedc8a8===_0x1c8145(0xc2))&&(_0xedc8a8+=_0x33634c?_0x1c8145(0x104):_0x1c8145(0x179)),_0x27af92['_console_ninja_session']={'id':+new Date(),'tool':_0xedc8a8},_0x2c30a7&&_0xedc8a8&&!_0x33634c&&console['log']('%c\\x20Console\\x20Ninja\\x20extension\\x20is\\x20connected\\x20to\\x20'+(_0xedc8a8[_0x1c8145(0x171)](0x0)[_0x1c8145(0xd3)]()+_0xedc8a8[_0x1c8145(0x15b)](0x1))+',',_0x1c8145(0x112),_0x1c8145(0x139));}let _0x3f6620=new j(_0x27af92,_0x5c7077,_0x386e8a,_0x414558,_0x1f598c,_0x4d984c);return _0x3f6620[_0x1c8145(0xb8)][_0x1c8145(0x17c)](_0x3f6620);}catch(_0x107b0a){return console[_0x1c8145(0x180)](_0x1c8145(0xed),_0x107b0a&&_0x107b0a[_0x1c8145(0x9b)]),()=>{};}});return _0x5ebaf1=>_0x1f5588[_0x122358(0x18e)](_0x547fc6=>_0x547fc6(_0x5ebaf1));}function U(_0x1d85ac,_0x256898,_0x5e1ad7,_0xc4c810){const _0x54681b=_0x4fbc4f;_0xc4c810&&_0x1d85ac==='reload'&&_0x5e1ad7[_0x54681b(0x9d)][_0x54681b(0x1b8)]();}function Z(_0x91db70,_0x1804ed,_0x444fb4){const _0x1a0386=_0x4fbc4f;var _0x379e72,_0x4401c3,_0x5618f0,_0xfec619,_0x317eac;if(_0x91db70['_consoleNinjaAllowedToStart']!==void 0x0)return _0x91db70[_0x1a0386(0xaa)];let _0x482ff9=((_0x4401c3=(_0x379e72=_0x91db70['process'])==null?void 0x0:_0x379e72['versions'])==null?void 0x0:_0x4401c3['node'])||((_0xfec619=(_0x5618f0=_0x91db70[_0x1a0386(0x110)])==null?void 0x0:_0x5618f0[_0x1a0386(0x15e)])==null?void 0x0:_0xfec619['NEXT_RUNTIME'])==='edge';function _0x4e4a10(_0x2bfb68){const _0x3ed6eb=_0x1a0386;if(_0x2bfb68[_0x3ed6eb(0x107)]('/')&&_0x2bfb68[_0x3ed6eb(0x11a)]('/')){let _0x1d7dd3=new RegExp(_0x2bfb68[_0x3ed6eb(0xdc)](0x1,-0x1));return _0x3102f9=>_0x1d7dd3[_0x3ed6eb(0x128)](_0x3102f9);}else{if(_0x2bfb68[_0x3ed6eb(0x14c)]('*')||_0x2bfb68[_0x3ed6eb(0x14c)]('?')){let _0x3d1d01=new RegExp('^'+_0x2bfb68[_0x3ed6eb(0x146)](/\\./g,String[_0x3ed6eb(0xa7)](0x5c)+'.')[_0x3ed6eb(0x146)](/\\*/g,'.*')[_0x3ed6eb(0x146)](/\\?/g,'.')+String['fromCharCode'](0x24));return _0x40f7cb=>_0x3d1d01[_0x3ed6eb(0x128)](_0x40f7cb);}else return _0x482291=>_0x482291===_0x2bfb68;}}let _0x301d55=_0x1804ed[_0x1a0386(0x1c2)](_0x4e4a10);return _0x91db70['_consoleNinjaAllowedToStart']=_0x482ff9||!_0x1804ed,!_0x91db70[_0x1a0386(0xaa)]&&((_0x317eac=_0x91db70[_0x1a0386(0x9d)])==null?void 0x0:_0x317eac['hostname'])&&(_0x91db70[_0x1a0386(0xaa)]=_0x301d55['some'](_0x14bada=>_0x14bada(_0x91db70['location'][_0x1a0386(0xde)]))),_0x91db70['_consoleNinjaAllowedToStart'];}function J(_0xae2bb1){const _0x5d06ea=_0x4fbc4f;var _0x943a48,_0xeb2143;let _0x39105c=function(_0x8b7eea,_0xc5db51){return _0xc5db51-_0x8b7eea;},_0x178f0f;if(_0xae2bb1[_0x5d06ea(0x100)])_0x178f0f=function(){const _0x5ccc7b=_0x5d06ea;return _0xae2bb1[_0x5ccc7b(0x100)][_0x5ccc7b(0xdf)]();};else{if(_0xae2bb1[_0x5d06ea(0x110)]&&_0xae2bb1[_0x5d06ea(0x110)][_0x5d06ea(0x1b3)]&&((_0xeb2143=(_0x943a48=_0xae2bb1[_0x5d06ea(0x110)])==null?void 0x0:_0x943a48['env'])==null?void 0x0:_0xeb2143[_0x5d06ea(0x177)])!==_0x5d06ea(0x187))_0x178f0f=function(){return _0xae2bb1['process']['hrtime']();},_0x39105c=function(_0xf16825,_0x20a246){return 0x3e8*(_0x20a246[0x0]-_0xf16825[0x0])+(_0x20a246[0x1]-_0xf16825[0x1])/0xf4240;};else try{let {performance:_0x2ff3c4}=require(_0x5d06ea(0x197));_0x178f0f=function(){const _0x540391=_0x5d06ea;return _0x2ff3c4[_0x540391(0xdf)]();};}catch{_0x178f0f=function(){return+new Date();};}}return{'elapsed':_0x39105c,'timeStamp':_0x178f0f,'now':()=>Date['now']()};}function V(_0x516387,_0x4012de,_0x16a5e7,_0x57c68a){const _0x4de1ad=_0x4fbc4f;_0x516387=_0x516387,_0x4012de=_0x4012de,_0x16a5e7=_0x16a5e7,_0x57c68a=_0x57c68a;let _0x8abedc=J(_0x516387),_0x2dc9e9=_0x8abedc[_0x4de1ad(0x1a7)],_0x2db2eb=_0x8abedc[_0x4de1ad(0x123)];class _0x1a2ca6{constructor(){const _0x21dbb3=_0x4de1ad;this['_keyStrRegExp']=/^(?!(?:do|if|in|for|let|new|try|var|case|else|enum|eval|false|null|this|true|void|with|break|catch|class|const|super|throw|while|yield|delete|export|import|public|return|static|switch|typeof|default|extends|finally|package|private|continue|debugger|function|arguments|interface|protected|implements|instanceof)$)[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*$/,this[_0x21dbb3(0xba)]=/^(0|[1-9][0-9]*)$/,this[_0x21dbb3(0xa5)]=/'([^\\\\']|\\\\')*'/,this[_0x21dbb3(0xec)]=_0x516387[_0x21dbb3(0xef)],this['_HTMLAllCollection']=_0x516387[_0x21dbb3(0x181)],this['_getOwnPropertyDescriptor']=Object[_0x21dbb3(0x15c)],this['_getOwnPropertyNames']=Object[_0x21dbb3(0x1b1)],this[_0x21dbb3(0x168)]=_0x516387[_0x21dbb3(0xb3)],this[_0x21dbb3(0xf0)]=RegExp['prototype']['toString'],this[_0x21dbb3(0x109)]=Date['prototype'][_0x21dbb3(0x16c)];}[_0x4de1ad(0x192)](_0x34b3ca,_0x460615,_0x57bfab,_0x34a902){const _0x319057=_0x4de1ad;var _0x12d096=this,_0x145304=_0x57bfab[_0x319057(0xbc)];function _0x2ca3a1(_0x260d70,_0x569b2b,_0xe315bb){const _0x4c39fa=_0x319057;_0x569b2b[_0x4c39fa(0x13b)]=_0x4c39fa(0x132),_0x569b2b['error']=_0x260d70['message'],_0x32a6ea=_0xe315bb[_0x4c39fa(0xf2)][_0x4c39fa(0x1a5)],_0xe315bb['node'][_0x4c39fa(0x1a5)]=_0x569b2b,_0x12d096[_0x4c39fa(0xe1)](_0x569b2b,_0xe315bb);}let _0xf71b2f;_0x516387[_0x319057(0x16f)]&&(_0xf71b2f=_0x516387[_0x319057(0x16f)][_0x319057(0x156)],_0xf71b2f&&(_0x516387[_0x319057(0x16f)]['error']=function(){}));try{try{_0x57bfab[_0x319057(0xb6)]++,_0x57bfab[_0x319057(0xbc)]&&_0x57bfab[_0x319057(0x1a3)]['push'](_0x460615);var _0x35c5aa,_0x43c8db,_0x3fa109,_0x402c13,_0x59e2f5=[],_0xd1d50a=[],_0x11f1fd,_0x229553=this['_type'](_0x460615),_0x4f9b4b=_0x229553==='array',_0x546781=!0x1,_0x2bb975=_0x229553===_0x319057(0x1bc),_0x2fec06=this[_0x319057(0x1bd)](_0x229553),_0x5ea5ac=this['_isPrimitiveWrapperType'](_0x229553),_0x46c48a=_0x2fec06||_0x5ea5ac,_0x42a9a9={},_0x57fe91=0x0,_0x2509d7=!0x1,_0x32a6ea,_0xe808eb=/^(([1-9]{1}[0-9]*)|0)$/;if(_0x57bfab[_0x319057(0xa4)]){if(_0x4f9b4b){if(_0x43c8db=_0x460615['length'],_0x43c8db>_0x57bfab[_0x319057(0x1a1)]){for(_0x3fa109=0x0,_0x402c13=_0x57bfab[_0x319057(0x1a1)],_0x35c5aa=_0x3fa109;_0x35c5aa<_0x402c13;_0x35c5aa++)_0xd1d50a[_0x319057(0x1bb)](_0x12d096[_0x319057(0x121)](_0x59e2f5,_0x460615,_0x229553,_0x35c5aa,_0x57bfab));_0x34b3ca['cappedElements']=!0x0;}else{for(_0x3fa109=0x0,_0x402c13=_0x43c8db,_0x35c5aa=_0x3fa109;_0x35c5aa<_0x402c13;_0x35c5aa++)_0xd1d50a[_0x319057(0x1bb)](_0x12d096['_addProperty'](_0x59e2f5,_0x460615,_0x229553,_0x35c5aa,_0x57bfab));}_0x57bfab['autoExpandPropertyCount']+=_0xd1d50a['length'];}if(!(_0x229553===_0x319057(0x125)||_0x229553==='undefined')&&!_0x2fec06&&_0x229553!==_0x319057(0xd6)&&_0x229553!==_0x319057(0xbb)&&_0x229553!=='bigint'){var _0xca75d=_0x34a902['props']||_0x57bfab['props'];if(this[_0x319057(0x1b6)](_0x460615)?(_0x35c5aa=0x0,_0x460615[_0x319057(0x18e)](function(_0x2e3522){const _0x55b4cb=_0x319057;if(_0x57fe91++,_0x57bfab[_0x55b4cb(0xac)]++,_0x57fe91>_0xca75d){_0x2509d7=!0x0;return;}if(!_0x57bfab[_0x55b4cb(0x183)]&&_0x57bfab[_0x55b4cb(0xbc)]&&_0x57bfab[_0x55b4cb(0xac)]>_0x57bfab[_0x55b4cb(0x10a)]){_0x2509d7=!0x0;return;}_0xd1d50a['push'](_0x12d096[_0x55b4cb(0x121)](_0x59e2f5,_0x460615,_0x55b4cb(0xe7),_0x35c5aa++,_0x57bfab,function(_0x38155e){return function(){return _0x38155e;};}(_0x2e3522)));})):this[_0x319057(0xcb)](_0x460615)&&_0x460615[_0x319057(0x18e)](function(_0x5bcf89,_0x303a80){const _0x504935=_0x319057;if(_0x57fe91++,_0x57bfab['autoExpandPropertyCount']++,_0x57fe91>_0xca75d){_0x2509d7=!0x0;return;}if(!_0x57bfab['isExpressionToEvaluate']&&_0x57bfab[_0x504935(0xbc)]&&_0x57bfab['autoExpandPropertyCount']>_0x57bfab[_0x504935(0x10a)]){_0x2509d7=!0x0;return;}var _0x4b75a7=_0x303a80['toString']();_0x4b75a7[_0x504935(0xfb)]>0x64&&(_0x4b75a7=_0x4b75a7[_0x504935(0xdc)](0x0,0x64)+_0x504935(0x118)),_0xd1d50a[_0x504935(0x1bb)](_0x12d096['_addProperty'](_0x59e2f5,_0x460615,'Map',_0x4b75a7,_0x57bfab,function(_0x253c63){return function(){return _0x253c63;};}(_0x5bcf89)));}),!_0x546781){try{for(_0x11f1fd in _0x460615)if(!(_0x4f9b4b&&_0xe808eb[_0x319057(0x128)](_0x11f1fd))&&!this[_0x319057(0xc8)](_0x460615,_0x11f1fd,_0x57bfab)){if(_0x57fe91++,_0x57bfab[_0x319057(0xac)]++,_0x57fe91>_0xca75d){_0x2509d7=!0x0;break;}if(!_0x57bfab[_0x319057(0x183)]&&_0x57bfab[_0x319057(0xbc)]&&_0x57bfab[_0x319057(0xac)]>_0x57bfab[_0x319057(0x10a)]){_0x2509d7=!0x0;break;}_0xd1d50a[_0x319057(0x1bb)](_0x12d096['_addObjectProperty'](_0x59e2f5,_0x42a9a9,_0x460615,_0x229553,_0x11f1fd,_0x57bfab));}}catch{}if(_0x42a9a9[_0x319057(0x119)]=!0x0,_0x2bb975&&(_0x42a9a9[_0x319057(0xea)]=!0x0),!_0x2509d7){var _0x2673f1=[]['concat'](this[_0x319057(0x130)](_0x460615))[_0x319057(0xf1)](this[_0x319057(0x1c0)](_0x460615));for(_0x35c5aa=0x0,_0x43c8db=_0x2673f1[_0x319057(0xfb)];_0x35c5aa<_0x43c8db;_0x35c5aa++)if(_0x11f1fd=_0x2673f1[_0x35c5aa],!(_0x4f9b4b&&_0xe808eb[_0x319057(0x128)](_0x11f1fd[_0x319057(0x16c)]()))&&!this[_0x319057(0xc8)](_0x460615,_0x11f1fd,_0x57bfab)&&!_0x42a9a9['_p_'+_0x11f1fd[_0x319057(0x16c)]()]){if(_0x57fe91++,_0x57bfab['autoExpandPropertyCount']++,_0x57fe91>_0xca75d){_0x2509d7=!0x0;break;}if(!_0x57bfab[_0x319057(0x183)]&&_0x57bfab[_0x319057(0xbc)]&&_0x57bfab[_0x319057(0xac)]>_0x57bfab[_0x319057(0x10a)]){_0x2509d7=!0x0;break;}_0xd1d50a[_0x319057(0x1bb)](_0x12d096[_0x319057(0xd9)](_0x59e2f5,_0x42a9a9,_0x460615,_0x229553,_0x11f1fd,_0x57bfab));}}}}}if(_0x34b3ca[_0x319057(0x13b)]=_0x229553,_0x46c48a?(_0x34b3ca['value']=_0x460615[_0x319057(0x176)](),this[_0x319057(0xcd)](_0x229553,_0x34b3ca,_0x57bfab,_0x34a902)):_0x229553===_0x319057(0x10c)?_0x34b3ca[_0x319057(0x185)]=this['_dateToString'][_0x319057(0xf8)](_0x460615):_0x229553===_0x319057(0x138)?_0x34b3ca[_0x319057(0x185)]=_0x460615[_0x319057(0x16c)]():_0x229553===_0x319057(0x167)?_0x34b3ca[_0x319057(0x185)]=this['_regExpToString'][_0x319057(0xf8)](_0x460615):_0x229553===_0x319057(0xb2)&&this[_0x319057(0x168)]?_0x34b3ca[_0x319057(0x185)]=this[_0x319057(0x168)][_0x319057(0x10f)][_0x319057(0x16c)][_0x319057(0xf8)](_0x460615):!_0x57bfab[_0x319057(0xa4)]&&!(_0x229553===_0x319057(0x125)||_0x229553===_0x319057(0xef))&&(delete _0x34b3ca[_0x319057(0x185)],_0x34b3ca[_0x319057(0x155)]=!0x0),_0x2509d7&&(_0x34b3ca[_0x319057(0xeb)]=!0x0),_0x32a6ea=_0x57bfab[_0x319057(0xf2)][_0x319057(0x1a5)],_0x57bfab['node'][_0x319057(0x1a5)]=_0x34b3ca,this['_treeNodePropertiesBeforeFullValue'](_0x34b3ca,_0x57bfab),_0xd1d50a[_0x319057(0xfb)]){for(_0x35c5aa=0x0,_0x43c8db=_0xd1d50a[_0x319057(0xfb)];_0x35c5aa<_0x43c8db;_0x35c5aa++)_0xd1d50a[_0x35c5aa](_0x35c5aa);}_0x59e2f5['length']&&(_0x34b3ca['props']=_0x59e2f5);}catch(_0xe9d14e){_0x2ca3a1(_0xe9d14e,_0x34b3ca,_0x57bfab);}this['_additionalMetadata'](_0x460615,_0x34b3ca),this[_0x319057(0x141)](_0x34b3ca,_0x57bfab),_0x57bfab['node'][_0x319057(0x1a5)]=_0x32a6ea,_0x57bfab[_0x319057(0xb6)]--,_0x57bfab[_0x319057(0xbc)]=_0x145304,_0x57bfab[_0x319057(0xbc)]&&_0x57bfab[_0x319057(0x1a3)][_0x319057(0x18d)]();}finally{_0xf71b2f&&(_0x516387[_0x319057(0x16f)]['error']=_0xf71b2f);}return _0x34b3ca;}[_0x4de1ad(0x1c0)](_0x504182){const _0x130992=_0x4de1ad;return Object['getOwnPropertySymbols']?Object[_0x130992(0x135)](_0x504182):[];}[_0x4de1ad(0x1b6)](_0x573a0f){const _0x1d3b82=_0x4de1ad;return!!(_0x573a0f&&_0x516387['Set']&&this[_0x1d3b82(0x11e)](_0x573a0f)===_0x1d3b82(0x17f)&&_0x573a0f[_0x1d3b82(0x18e)]);}['_blacklistedProperty'](_0x13e064,_0x1198b8,_0x252a0c){const _0x20610c=_0x4de1ad;return _0x252a0c[_0x20610c(0x14e)]?typeof _0x13e064[_0x1198b8]==_0x20610c(0x1bc):!0x1;}['_type'](_0x2fba71){const _0x3225c8=_0x4de1ad;var _0x1c228c='';return _0x1c228c=typeof _0x2fba71,_0x1c228c===_0x3225c8(0x160)?this[_0x3225c8(0x11e)](_0x2fba71)===_0x3225c8(0x11d)?_0x1c228c=_0x3225c8(0x190):this[_0x3225c8(0x11e)](_0x2fba71)===_0x3225c8(0xdd)?_0x1c228c=_0x3225c8(0x10c):this[_0x3225c8(0x11e)](_0x2fba71)===_0x3225c8(0x154)?_0x1c228c=_0x3225c8(0x138):_0x2fba71===null?_0x1c228c=_0x3225c8(0x125):_0x2fba71[_0x3225c8(0x1a4)]&&(_0x1c228c=_0x2fba71[_0x3225c8(0x1a4)][_0x3225c8(0xae)]||_0x1c228c):_0x1c228c==='undefined'&&this[_0x3225c8(0x9c)]&&_0x2fba71 instanceof this['_HTMLAllCollection']&&(_0x1c228c=_0x3225c8(0x181)),_0x1c228c;}[_0x4de1ad(0x11e)](_0x2added){const _0x5a7f65=_0x4de1ad;return Object[_0x5a7f65(0x10f)]['toString']['call'](_0x2added);}['_isPrimitiveType'](_0x30429c){const _0x3fc5e5=_0x4de1ad;return _0x30429c===_0x3fc5e5(0xe2)||_0x30429c===_0x3fc5e5(0xa2)||_0x30429c===_0x3fc5e5(0x153);}[_0x4de1ad(0x16d)](_0x361c08){const _0x35934f=_0x4de1ad;return _0x361c08===_0x35934f(0x18b)||_0x361c08===_0x35934f(0xd6)||_0x361c08===_0x35934f(0x11b);}[_0x4de1ad(0x121)](_0x385a38,_0x1c1998,_0x16c695,_0x252faf,_0x2d54ab,_0x26730d){var _0x2ee178=this;return function(_0x555243){const _0x51de2e=_0x17d9;var _0x1f7582=_0x2d54ab[_0x51de2e(0xf2)][_0x51de2e(0x1a5)],_0x1cc9d5=_0x2d54ab[_0x51de2e(0xf2)][_0x51de2e(0x152)],_0x453f45=_0x2d54ab[_0x51de2e(0xf2)][_0x51de2e(0x1ae)];_0x2d54ab[_0x51de2e(0xf2)]['parent']=_0x1f7582,_0x2d54ab[_0x51de2e(0xf2)][_0x51de2e(0x152)]=typeof _0x252faf==_0x51de2e(0x153)?_0x252faf:_0x555243,_0x385a38[_0x51de2e(0x1bb)](_0x2ee178['_property'](_0x1c1998,_0x16c695,_0x252faf,_0x2d54ab,_0x26730d)),_0x2d54ab[_0x51de2e(0xf2)][_0x51de2e(0x1ae)]=_0x453f45,_0x2d54ab[_0x51de2e(0xf2)]['index']=_0x1cc9d5;};}[_0x4de1ad(0xd9)](_0x1e89c0,_0x27a7ef,_0x5c7a3d,_0x346d50,_0x45fd4f,_0x221d90,_0x41e7ee){const _0x866106=_0x4de1ad;var _0x4c318f=this;return _0x27a7ef[_0x866106(0xfa)+_0x45fd4f[_0x866106(0x16c)]()]=!0x0,function(_0x33a3d4){const _0x2a0011=_0x866106;var _0x67aeab=_0x221d90[_0x2a0011(0xf2)]['current'],_0x1740c8=_0x221d90[_0x2a0011(0xf2)][_0x2a0011(0x152)],_0x477202=_0x221d90[_0x2a0011(0xf2)]['parent'];_0x221d90[_0x2a0011(0xf2)][_0x2a0011(0x1ae)]=_0x67aeab,_0x221d90['node'][_0x2a0011(0x152)]=_0x33a3d4,_0x1e89c0[_0x2a0011(0x1bb)](_0x4c318f[_0x2a0011(0xd1)](_0x5c7a3d,_0x346d50,_0x45fd4f,_0x221d90,_0x41e7ee)),_0x221d90[_0x2a0011(0xf2)][_0x2a0011(0x1ae)]=_0x477202,_0x221d90[_0x2a0011(0xf2)][_0x2a0011(0x152)]=_0x1740c8;};}[_0x4de1ad(0xd1)](_0x348d0e,_0x159961,_0x1ae97d,_0x4cfce1,_0x4c18d7){const _0x164f1e=_0x4de1ad;var _0x60fc2f=this;_0x4c18d7||(_0x4c18d7=function(_0xe43913,_0x6b593b){return _0xe43913[_0x6b593b];});var _0x4718cf=_0x1ae97d[_0x164f1e(0x16c)](),_0x4afe44=_0x4cfce1[_0x164f1e(0x151)]||{},_0x333db3=_0x4cfce1['depth'],_0x716d94=_0x4cfce1[_0x164f1e(0x183)];try{var _0x4d275b=this[_0x164f1e(0xcb)](_0x348d0e),_0x95bbf2=_0x4718cf;_0x4d275b&&_0x95bbf2[0x0]==='\\x27'&&(_0x95bbf2=_0x95bbf2['substr'](0x1,_0x95bbf2['length']-0x2));var _0x313d98=_0x4cfce1[_0x164f1e(0x151)]=_0x4afe44[_0x164f1e(0xfa)+_0x95bbf2];_0x313d98&&(_0x4cfce1[_0x164f1e(0xa4)]=_0x4cfce1[_0x164f1e(0xa4)]+0x1),_0x4cfce1[_0x164f1e(0x183)]=!!_0x313d98;var _0x4487dd=typeof _0x1ae97d==_0x164f1e(0xb2),_0x36ffda={'name':_0x4487dd||_0x4d275b?_0x4718cf:this[_0x164f1e(0xee)](_0x4718cf)};if(_0x4487dd&&(_0x36ffda['symbol']=!0x0),!(_0x159961===_0x164f1e(0x190)||_0x159961===_0x164f1e(0x145))){var _0x1d14bc=this[_0x164f1e(0x11c)](_0x348d0e,_0x1ae97d);if(_0x1d14bc&&(_0x1d14bc['set']&&(_0x36ffda[_0x164f1e(0xf5)]=!0x0),_0x1d14bc[_0x164f1e(0x18a)]&&!_0x313d98&&!_0x4cfce1[_0x164f1e(0x19c)]))return _0x36ffda[_0x164f1e(0x1be)]=!0x0,this[_0x164f1e(0xfd)](_0x36ffda,_0x4cfce1),_0x36ffda;}var _0x150854;try{_0x150854=_0x4c18d7(_0x348d0e,_0x1ae97d);}catch(_0x1c0828){return _0x36ffda={'name':_0x4718cf,'type':_0x164f1e(0x132),'error':_0x1c0828[_0x164f1e(0x9b)]},this[_0x164f1e(0xfd)](_0x36ffda,_0x4cfce1),_0x36ffda;}var _0x140d6b=this['_type'](_0x150854),_0x33f717=this['_isPrimitiveType'](_0x140d6b);if(_0x36ffda['type']=_0x140d6b,_0x33f717)this[_0x164f1e(0xfd)](_0x36ffda,_0x4cfce1,_0x150854,function(){const _0x471261=_0x164f1e;_0x36ffda[_0x471261(0x185)]=_0x150854[_0x471261(0x176)](),!_0x313d98&&_0x60fc2f[_0x471261(0xcd)](_0x140d6b,_0x36ffda,_0x4cfce1,{});});else{var _0x768e95=_0x4cfce1[_0x164f1e(0xbc)]&&_0x4cfce1[_0x164f1e(0xb6)]<_0x4cfce1[_0x164f1e(0x1b4)]&&_0x4cfce1['autoExpandPreviousObjects'][_0x164f1e(0xda)](_0x150854)<0x0&&_0x140d6b!==_0x164f1e(0x1bc)&&_0x4cfce1[_0x164f1e(0xac)]<_0x4cfce1[_0x164f1e(0x10a)];_0x768e95||_0x4cfce1[_0x164f1e(0xb6)]<_0x333db3||_0x313d98?(this['serialize'](_0x36ffda,_0x150854,_0x4cfce1,_0x313d98||{}),this[_0x164f1e(0x144)](_0x150854,_0x36ffda)):this[_0x164f1e(0xfd)](_0x36ffda,_0x4cfce1,_0x150854,function(){const _0x23bc7a=_0x164f1e;_0x140d6b===_0x23bc7a(0x125)||_0x140d6b==='undefined'||(delete _0x36ffda[_0x23bc7a(0x185)],_0x36ffda[_0x23bc7a(0x155)]=!0x0);});}return _0x36ffda;}finally{_0x4cfce1[_0x164f1e(0x151)]=_0x4afe44,_0x4cfce1[_0x164f1e(0xa4)]=_0x333db3,_0x4cfce1[_0x164f1e(0x183)]=_0x716d94;}}[_0x4de1ad(0xcd)](_0x519a42,_0x3c8343,_0x1e3be8,_0x426c96){const _0x343137=_0x4de1ad;var _0x5d4091=_0x426c96[_0x343137(0xd2)]||_0x1e3be8[_0x343137(0xd2)];if((_0x519a42===_0x343137(0xa2)||_0x519a42===_0x343137(0xd6))&&_0x3c8343[_0x343137(0x185)]){let _0x2bb444=_0x3c8343[_0x343137(0x185)][_0x343137(0xfb)];_0x1e3be8[_0x343137(0xcc)]+=_0x2bb444,_0x1e3be8['allStrLength']>_0x1e3be8[_0x343137(0x166)]?(_0x3c8343[_0x343137(0x155)]='',delete _0x3c8343[_0x343137(0x185)]):_0x2bb444>_0x5d4091&&(_0x3c8343[_0x343137(0x155)]=_0x3c8343['value'][_0x343137(0x15b)](0x0,_0x5d4091),delete _0x3c8343[_0x343137(0x185)]);}}[_0x4de1ad(0xcb)](_0x5515ee){const _0x201fc0=_0x4de1ad;return!!(_0x5515ee&&_0x516387['Map']&&this[_0x201fc0(0x11e)](_0x5515ee)==='[object\\x20Map]'&&_0x5515ee[_0x201fc0(0x18e)]);}[_0x4de1ad(0xee)](_0x65e6ae){const _0x2a6681=_0x4de1ad;if(_0x65e6ae[_0x2a6681(0xc0)](/^\\d+$/))return _0x65e6ae;var _0xa5061c;try{_0xa5061c=JSON[_0x2a6681(0xc6)](''+_0x65e6ae);}catch{_0xa5061c='\\x22'+this['_objectToString'](_0x65e6ae)+'\\x22';}return _0xa5061c['match'](/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)?_0xa5061c=_0xa5061c[_0x2a6681(0x15b)](0x1,_0xa5061c[_0x2a6681(0xfb)]-0x2):_0xa5061c=_0xa5061c[_0x2a6681(0x146)](/'/g,'\\x5c\\x27')[_0x2a6681(0x146)](/\\\\\"/g,'\\x22')[_0x2a6681(0x146)](/(^\"|\"$)/g,'\\x27'),_0xa5061c;}[_0x4de1ad(0xfd)](_0x1ffa7d,_0x373b27,_0x5957e1,_0x15eb65){const _0x595dae=_0x4de1ad;this['_treeNodePropertiesBeforeFullValue'](_0x1ffa7d,_0x373b27),_0x15eb65&&_0x15eb65(),this[_0x595dae(0x144)](_0x5957e1,_0x1ffa7d),this[_0x595dae(0x141)](_0x1ffa7d,_0x373b27);}['_treeNodePropertiesBeforeFullValue'](_0x337291,_0xb7a4fa){const _0x2cef5d=_0x4de1ad;this[_0x2cef5d(0x1a6)](_0x337291,_0xb7a4fa),this[_0x2cef5d(0xc4)](_0x337291,_0xb7a4fa),this[_0x2cef5d(0x1aa)](_0x337291,_0xb7a4fa),this[_0x2cef5d(0xd0)](_0x337291,_0xb7a4fa);}['_setNodeId'](_0x58995c,_0x9b8a6b){}['_setNodeQueryPath'](_0x489951,_0x224f85){}[_0x4de1ad(0xc9)](_0x355647,_0x4f6f3d){}[_0x4de1ad(0x19e)](_0x50be16){const _0x1b08a8=_0x4de1ad;return _0x50be16===this[_0x1b08a8(0xec)];}[_0x4de1ad(0x141)](_0x1ebac2,_0x3c249c){const _0x35b121=_0x4de1ad;this[_0x35b121(0xc9)](_0x1ebac2,_0x3c249c),this['_setNodeExpandableState'](_0x1ebac2),_0x3c249c['sortProps']&&this[_0x35b121(0x162)](_0x1ebac2),this[_0x35b121(0x15f)](_0x1ebac2,_0x3c249c),this['_addLoadNode'](_0x1ebac2,_0x3c249c),this[_0x35b121(0x10e)](_0x1ebac2);}[_0x4de1ad(0x144)](_0x555fe5,_0x504952){const _0x87382f=_0x4de1ad;try{_0x555fe5&&typeof _0x555fe5[_0x87382f(0xfb)]==_0x87382f(0x153)&&(_0x504952['length']=_0x555fe5[_0x87382f(0xfb)]);}catch{}if(_0x504952['type']===_0x87382f(0x153)||_0x504952[_0x87382f(0x13b)]===_0x87382f(0x11b)){if(isNaN(_0x504952[_0x87382f(0x185)]))_0x504952[_0x87382f(0xab)]=!0x0,delete _0x504952['value'];else switch(_0x504952[_0x87382f(0x185)]){case Number['POSITIVE_INFINITY']:_0x504952['positiveInfinity']=!0x0,delete _0x504952[_0x87382f(0x185)];break;case Number[_0x87382f(0xb7)]:_0x504952['negativeInfinity']=!0x0,delete _0x504952[_0x87382f(0x185)];break;case 0x0:this[_0x87382f(0x17d)](_0x504952[_0x87382f(0x185)])&&(_0x504952['negativeZero']=!0x0);break;}}else _0x504952['type']===_0x87382f(0x1bc)&&typeof _0x555fe5['name']==_0x87382f(0xa2)&&_0x555fe5[_0x87382f(0xae)]&&_0x504952[_0x87382f(0xae)]&&_0x555fe5[_0x87382f(0xae)]!==_0x504952['name']&&(_0x504952[_0x87382f(0x184)]=_0x555fe5[_0x87382f(0xae)]);}[_0x4de1ad(0x17d)](_0x2e9ef2){const _0x5961b3=_0x4de1ad;return 0x1/_0x2e9ef2===Number[_0x5961b3(0xb7)];}[_0x4de1ad(0x162)](_0x36cd2c){const _0x280472=_0x4de1ad;!_0x36cd2c[_0x280472(0x111)]||!_0x36cd2c[_0x280472(0x111)][_0x280472(0xfb)]||_0x36cd2c[_0x280472(0x13b)]===_0x280472(0x190)||_0x36cd2c[_0x280472(0x13b)]===_0x280472(0x182)||_0x36cd2c[_0x280472(0x13b)]===_0x280472(0xe7)||_0x36cd2c['props'][_0x280472(0x15d)](function(_0x5cf75c,_0x3d8034){const _0x6a8770=_0x280472;var _0xb0cd68=_0x5cf75c[_0x6a8770(0xae)][_0x6a8770(0x1a9)](),_0x5aae64=_0x3d8034['name'][_0x6a8770(0x1a9)]();return _0xb0cd68<_0x5aae64?-0x1:_0xb0cd68>_0x5aae64?0x1:0x0;});}['_addFunctionsNode'](_0x4a58e7,_0x245832){const _0x117bd6=_0x4de1ad;if(!(_0x245832[_0x117bd6(0x14e)]||!_0x4a58e7['props']||!_0x4a58e7[_0x117bd6(0x111)][_0x117bd6(0xfb)])){for(var _0x18b7a9=[],_0x13b8d2=[],_0x2a0592=0x0,_0x295fa3=_0x4a58e7['props'][_0x117bd6(0xfb)];_0x2a0592<_0x295fa3;_0x2a0592++){var _0x2ef471=_0x4a58e7[_0x117bd6(0x111)][_0x2a0592];_0x2ef471['type']===_0x117bd6(0x1bc)?_0x18b7a9[_0x117bd6(0x1bb)](_0x2ef471):_0x13b8d2[_0x117bd6(0x1bb)](_0x2ef471);}if(!(!_0x13b8d2[_0x117bd6(0xfb)]||_0x18b7a9[_0x117bd6(0xfb)]<=0x1)){_0x4a58e7[_0x117bd6(0x111)]=_0x13b8d2;var _0x8f5398={'functionsNode':!0x0,'props':_0x18b7a9};this[_0x117bd6(0x1a6)](_0x8f5398,_0x245832),this[_0x117bd6(0xc9)](_0x8f5398,_0x245832),this[_0x117bd6(0xfe)](_0x8f5398),this[_0x117bd6(0xd0)](_0x8f5398,_0x245832),_0x8f5398['id']+='\\x20f',_0x4a58e7[_0x117bd6(0x111)][_0x117bd6(0x19b)](_0x8f5398);}}}['_addLoadNode'](_0x2c3ef8,_0x57e337){}[_0x4de1ad(0xfe)](_0x4a83e6){}[_0x4de1ad(0xe8)](_0x313a71){const _0x5f3ee0=_0x4de1ad;return Array[_0x5f3ee0(0x18f)](_0x313a71)||typeof _0x313a71=='object'&&this['_objectToString'](_0x313a71)===_0x5f3ee0(0x11d);}[_0x4de1ad(0xd0)](_0x644cfb,_0x4be820){}['_cleanNode'](_0x1927ba){const _0x52dd69=_0x4de1ad;delete _0x1927ba[_0x52dd69(0x101)],delete _0x1927ba[_0x52dd69(0x1b7)],delete _0x1927ba[_0x52dd69(0xe5)];}[_0x4de1ad(0x1aa)](_0x518f86,_0x26e116){}}let _0x55dfe2=new _0x1a2ca6(),_0x2f4348={'props':0x64,'elements':0x64,'strLength':0x400*0x32,'totalStrLength':0x400*0x32,'autoExpandLimit':0x1388,'autoExpandMaxDepth':0xa},_0x1e00fa={'props':0x5,'elements':0x5,'strLength':0x100,'totalStrLength':0x100*0x3,'autoExpandLimit':0x1e,'autoExpandMaxDepth':0x2};function _0x1329f3(_0x5e3ada,_0xcd9cdb,_0x188a41,_0x2717d0,_0xfd7bf,_0x28844){const _0x361559=_0x4de1ad;let _0x3ca23e,_0x3277d8;try{_0x3277d8=_0x2db2eb(),_0x3ca23e=_0x16a5e7[_0xcd9cdb],!_0x3ca23e||_0x3277d8-_0x3ca23e['ts']>0x1f4&&_0x3ca23e['count']&&_0x3ca23e[_0x361559(0x1c1)]/_0x3ca23e[_0x361559(0xa9)]<0x64?(_0x16a5e7[_0xcd9cdb]=_0x3ca23e={'count':0x0,'time':0x0,'ts':_0x3277d8},_0x16a5e7[_0x361559(0xe6)]={}):_0x3277d8-_0x16a5e7['hits']['ts']>0x32&&_0x16a5e7[_0x361559(0xe6)]['count']&&_0x16a5e7[_0x361559(0xe6)][_0x361559(0x1c1)]/_0x16a5e7[_0x361559(0xe6)]['count']<0x64&&(_0x16a5e7['hits']={});let _0x479ca7=[],_0x44ffd1=_0x3ca23e[_0x361559(0x165)]||_0x16a5e7[_0x361559(0xe6)][_0x361559(0x165)]?_0x1e00fa:_0x2f4348,_0x499895=_0x47d981=>{const _0x3ba816=_0x361559;let _0xf6b66e={};return _0xf6b66e[_0x3ba816(0x111)]=_0x47d981[_0x3ba816(0x111)],_0xf6b66e[_0x3ba816(0x1a1)]=_0x47d981[_0x3ba816(0x1a1)],_0xf6b66e[_0x3ba816(0xd2)]=_0x47d981[_0x3ba816(0xd2)],_0xf6b66e[_0x3ba816(0x166)]=_0x47d981[_0x3ba816(0x166)],_0xf6b66e[_0x3ba816(0x10a)]=_0x47d981['autoExpandLimit'],_0xf6b66e[_0x3ba816(0x1b4)]=_0x47d981[_0x3ba816(0x1b4)],_0xf6b66e[_0x3ba816(0x148)]=!0x1,_0xf6b66e[_0x3ba816(0x14e)]=!_0x4012de,_0xf6b66e[_0x3ba816(0xa4)]=0x1,_0xf6b66e[_0x3ba816(0xb6)]=0x0,_0xf6b66e[_0x3ba816(0x1c4)]=_0x3ba816(0x16a),_0xf6b66e[_0x3ba816(0x1c5)]=_0x3ba816(0xad),_0xf6b66e[_0x3ba816(0xbc)]=!0x0,_0xf6b66e['autoExpandPreviousObjects']=[],_0xf6b66e[_0x3ba816(0xac)]=0x0,_0xf6b66e['resolveGetters']=!0x0,_0xf6b66e['allStrLength']=0x0,_0xf6b66e[_0x3ba816(0xf2)]={'current':void 0x0,'parent':void 0x0,'index':0x0},_0xf6b66e;};for(var _0x45f862=0x0;_0x45f862<_0xfd7bf[_0x361559(0xfb)];_0x45f862++)_0x479ca7['push'](_0x55dfe2[_0x361559(0x192)]({'timeNode':_0x5e3ada===_0x361559(0x1c1)||void 0x0},_0xfd7bf[_0x45f862],_0x499895(_0x44ffd1),{}));if(_0x5e3ada===_0x361559(0x14d)||_0x5e3ada===_0x361559(0x156)){let _0x1c10f1=Error[_0x361559(0x142)];try{Error[_0x361559(0x142)]=0x1/0x0,_0x479ca7['push'](_0x55dfe2[_0x361559(0x192)]({'stackNode':!0x0},new Error()[_0x361559(0x193)],_0x499895(_0x44ffd1),{'strLength':0x1/0x0}));}finally{Error[_0x361559(0x142)]=_0x1c10f1;}}return{'method':_0x361559(0x147),'version':_0x57c68a,'args':[{'ts':_0x188a41,'session':_0x2717d0,'args':_0x479ca7,'id':_0xcd9cdb,'context':_0x28844}]};}catch(_0x19f6ba){return{'method':_0x361559(0x147),'version':_0x57c68a,'args':[{'ts':_0x188a41,'session':_0x2717d0,'args':[{'type':'unknown','error':_0x19f6ba&&_0x19f6ba[_0x361559(0x9b)]}],'id':_0xcd9cdb,'context':_0x28844}]};}finally{try{if(_0x3ca23e&&_0x3277d8){let _0x5360b6=_0x2db2eb();_0x3ca23e[_0x361559(0xa9)]++,_0x3ca23e[_0x361559(0x1c1)]+=_0x2dc9e9(_0x3277d8,_0x5360b6),_0x3ca23e['ts']=_0x5360b6,_0x16a5e7['hits'][_0x361559(0xa9)]++,_0x16a5e7[_0x361559(0xe6)][_0x361559(0x1c1)]+=_0x2dc9e9(_0x3277d8,_0x5360b6),_0x16a5e7[_0x361559(0xe6)]['ts']=_0x5360b6,(_0x3ca23e[_0x361559(0xa9)]>0x32||_0x3ca23e[_0x361559(0x1c1)]>0x64)&&(_0x3ca23e[_0x361559(0x165)]=!0x0),(_0x16a5e7[_0x361559(0xe6)]['count']>0x3e8||_0x16a5e7[_0x361559(0xe6)][_0x361559(0x1c1)]>0x12c)&&(_0x16a5e7[_0x361559(0xe6)]['reduceLimits']=!0x0);}}catch{}}}return _0x1329f3;}var q=Symbol('ninja'),fe=0xc8,Y=_0x4fbc4f(0x12b);((_0x5d96ed,_0x239aa2,_0x55a597,_0x4cbcbd,_0x5f1a07,_0x2ad4ee,_0x304ef0,_0x51db97,_0x158119,_0x4e5562)=>{const _0x56997a=_0x4fbc4f;if(!Z(_0x5d96ed,_0x51db97,_0x2ad4ee)){_0x5d96ed[_0x56997a(0x1b9)]=!0x0;return;}if(_0x5d96ed[_0x56997a(0x1b9)])return;_0x5d96ed[_0x56997a(0x1b9)]=!0x0;let _0x11cd1f=_0x2ad4ee===_0x56997a(0x115)&&_0x5d96ed[_0x56997a(0xff)]?_0x5d96ed[_0x56997a(0xff)]:void 0x0,_0x4f42ff=!0x1,_0xf2926d={},_0x5c1135={},_0x4e3528=()=>{const _0x33dcec=_0x56997a;for(let _0x1e52a8 of Object[_0x33dcec(0x1b1)](_0xf2926d))delete _0xf2926d[_0x1e52a8];for(let _0xe3437c of Object[_0x33dcec(0x1b1)](_0x5c1135))delete _0x5c1135[_0xe3437c];},_0x570df7=$(_0x5d96ed,_0x239aa2,_0x55a597,_0x4cbcbd,_0x2ad4ee,_0x158119,_0x4e5562,(_0x2b8e42,_0x56e341,_0x1197da,_0x31d56b)=>{const _0x3a32ed=_0x56997a;if(U(_0x2b8e42,_0x56e341,_0x1197da,_0x31d56b),_0x2b8e42===_0x3a32ed(0xc3)){let _0x51fd24=_0x56e341[0x0];if(_0x51fd24[_0x3a32ed(0x191)](_0x3a32ed(0x19d))&&_0x406235(_0x51fd24[_0x3a32ed(0x19d)]),_0x51fd24[_0x3a32ed(0x191)](_0x3a32ed(0x1c3))){for(let _0x895874 of _0x51fd24['blacklistEntries']){let _0x5e53df=re(_0x443e09[_0x3a32ed(0x161)],_0x895874[_0x3a32ed(0x193)]);_0xf2926d[_0x5e53df]=_0x895874[_0x3a32ed(0xbd)];for(let _0x44c52 of _0x895874[_0x3a32ed(0xbd)]){let _0x16afdf=_0x5c1135[_0x44c52];if(_0x16afdf)_0x16afdf[_0x5e53df]=void 0x0;else{let _0x269f1a={};_0x269f1a[_0x5e53df]=void 0x0,_0x5c1135[_0x44c52]=_0x269f1a;}}}Object[_0x3a32ed(0x194)](_0xf2926d)[_0x3a32ed(0xfb)]>fe&&(_0x406235(!0x1),_0x4e3528(),_0x570df7({'method':_0x3a32ed(0xb4),'version':_0x5f1a07,'args':[_0x443e09]}));}if(_0x51fd24[_0x3a32ed(0x191)](_0x3a32ed(0x17b)))for(let _0x41b07f of _0x51fd24[_0x3a32ed(0x17b)]){let _0x442212=_0x5c1135[_0x41b07f];if(!!_0x442212)for(var _0x40aa9d of Object[_0x3a32ed(0x194)](_0x442212)){let _0x792778=_0xf2926d[_0x40aa9d];for(let _0x1eb05b of _0x792778){let _0xb76570=_0x5c1135[_0x1eb05b];_0xb76570&&delete _0xb76570[_0x40aa9d],Object[_0x3a32ed(0x194)](_0xb76570)[_0x3a32ed(0xfb)]||delete _0x5c1135[_0x1eb05b];}delete _0xf2926d[_0x40aa9d];}}}}),_0x443e09=_0x5d96ed[_0x56997a(0x178)],_0x1794b1,_0x232a2d,_0x829ff8,_0x30f8ce,_0x57dd21=Ee(_0x443e09['tool']);function _0x406235(_0x4d9acf){_0x4f42ff!==_0x4d9acf&&(_0x4d9acf===!0x0?(_0x829ff8=_0x829ff8||ye(_0x5d96ed,_0x443e09,_0x5f1a07,_0x570df7,_0xf2926d,_0x11cd1f,_0x57dd21),_0x30f8ce=_0x30f8ce||me(_0x5d96ed,_0x570df7,_0x5f1a07,_0x443e09,_0x11cd1f),_0x1794b1=pe(_0x5d96ed,_0x829ff8,_0x30f8ce,_0x57dd21),_0x232a2d=le(_0x5d96ed,_0x829ff8,_0x57dd21),_0x4f42ff=!0x0):_0x4d9acf===!0x1&&(_0x1794b1(),_0x232a2d(),_0x4f42ff=!0x1));}_0x406235(!0x0),_0x570df7({'method':_0x56997a(0x10b),'version':_0x5f1a07,'args':[_0x443e09]});})(globalThis,'127.0.0.1',_0x4fbc4f(0xd5),_0x4fbc4f(0x12d),_0x4fbc4f(0x1bf),_0x4fbc4f(0x199),_0x4fbc4f(0x186),_0x4fbc4f(0x196),_0x4fbc4f(0x10d),_0x4fbc4f(0x133));function le(_0x3ce3b1,_0x33ff39,_0x4fd3c9){const _0x5eb12d=_0x4fbc4f;if(_0x3ce3b1[_0x5eb12d(0x19a)]&&_0x3ce3b1[_0x5eb12d(0x19a)]['prototype']){let _0x57c0e7=_0x3ce3b1[_0x5eb12d(0x19a)][_0x5eb12d(0x10f)]['open'],_0x276e2d=_0x3ce3b1[_0x5eb12d(0x19a)][_0x5eb12d(0x10f)][_0x5eb12d(0xb8)],_0xf7c241=_0x3ce3b1[_0x5eb12d(0x19a)][_0x5eb12d(0x10f)]['setRequestHeader'];return _0x57c0e7&&_0x276e2d&&_0x57c0e7[_0x5eb12d(0x16c)]()[_0x5eb12d(0xda)](_0x5eb12d(0xf7))!==-0x1?(_0x3ce3b1[_0x5eb12d(0x19a)][_0x5eb12d(0x10f)][_0x5eb12d(0x14f)]=function(_0x2ea47b,_0xa407fc){const _0xb3115a=_0x5eb12d;let _0x215988=this[q]=this[q]||{};return _0x215988[_0xb3115a(0x9f)]=_0x2ea47b,_0x215988[_0xb3115a(0xbe)]=_0xa407fc,_0x57c0e7[_0xb3115a(0x159)](this,arguments);},_0x3ce3b1['XMLHttpRequest'][_0x5eb12d(0x10f)]['send']=function(){const _0x22a195=_0x5eb12d;let _0x4b8f1f=Q(_0x4fd3c9);return this['addEventListener'](_0x22a195(0xce),()=>{const _0xe22534=_0x22a195;var _0x26cf77,_0x492e18;if(this[_0xe22534(0x149)]===0x4){let _0xd60fa2=this[_0xe22534(0x1a8)](_0xe22534(0x131)),_0x490277=_0xd60fa2&&_0xd60fa2[_0xe22534(0xda)](Y)!==-0x1?K(this[_0xe22534(0xf3)],Y):this[_0xe22534(0xf3)],_0x1e7f4d=se((_0x26cf77=this[q])==null?void 0x0:_0x26cf77[_0xe22534(0x1ad)]),_0x1f0026=_0x1e7f4d?K(arguments[0x0],_0x1e7f4d):arguments[0x0],_0xcdca96=(_0x492e18=this[_0xe22534(0x17e)])==null?void 0x0:_0x492e18['toString']();_0x33ff39({'stack':_0x4b8f1f,'status':_0xcdca96,'url':this[q][_0xe22534(0xbe)],'method':this[q][_0xe22534(0x9f)],'request':_0x1f0026,'response':_0x490277});}}),_0x276e2d[_0x22a195(0x159)](this,arguments);},_0xf7c241&&(_0x3ce3b1['XMLHttpRequest']['prototype'][_0x5eb12d(0x117)]=function(_0x415c9a,_0x3b572a){const _0x58369d=_0x5eb12d;let _0x428ab2=this[q]=this[q]||{},_0x2ef939=_0x428ab2[_0x58369d(0x1ad)]=_0x428ab2[_0x58369d(0x1ad)]||{};_0x2ef939[_0x415c9a]=_0x3b572a,_0xf7c241[_0x58369d(0x159)](this,arguments);}),()=>{const _0x160190=_0x5eb12d;_0x3ce3b1[_0x160190(0x19a)][_0x160190(0x10f)]['open']=_0x57c0e7,_0x3ce3b1[_0x160190(0x19a)][_0x160190(0x10f)][_0x160190(0xb8)]=_0x276e2d,_0x3ce3b1[_0x160190(0x19a)]['prototype'][_0x160190(0x117)]=_0xf7c241;}):()=>{};}}function pe(_0x5d45e4,_0x157017,_0x586a05,_0x2e637f){const _0x4ed4c4=_0x4fbc4f;let _0x482db0=_0x5d45e4[_0x4ed4c4(0xbf)];if(_0x5d45e4[_0x4ed4c4(0x102)]&&_0x5d45e4['Response'][_0x4ed4c4(0x10f)]&&_0x482db0[_0x4ed4c4(0x16c)]()[_0x4ed4c4(0xda)]('native\\x20code')!==-0x1){let _0x1c9f93=function(){const _0x40d5d1=_0x4ed4c4;return _0x5d45e4[_0x40d5d1(0xbf)]=function(..._0x6003a0){const _0xd2b250=_0x40d5d1;var _0x47f8c7;let [_0xf93aef,_0x4336c6]=_0x6003a0,_0x2b93db=_0x4336c6&&_0x4336c6[_0xd2b250(0x9f)]?_0x4336c6['method']:_0xd2b250(0x16b),_0x2050b2=Q(_0x2e637f),_0x1088f3=_0x6003a0&&_0x6003a0['length']>0x0&&((_0x47f8c7=_0x6003a0[0x1])==null?void 0x0:_0x47f8c7[_0xd2b250(0x1ad)]),_0x3eb915=se(_0x1088f3),_0x391daf=_0x4336c6!=null&&_0x4336c6[_0xd2b250(0xe0)]?K(_0x4336c6[_0xd2b250(0xe0)],_0x3eb915):_0x4336c6==null?void 0x0:_0x4336c6['body'];return _0x482db0[_0xd2b250(0x159)](this,_0x6003a0)[_0xd2b250(0x11f)](_0x3aeb86=>(_0x3aeb86[q]={'method':_0x2b93db,'fetchStack':_0x2050b2,'request':_0x391daf},_0x3aeb86));},()=>_0x5d45e4['fetch']=_0x482db0;},_0x5dd4a2=function(_0x56a914,_0x126d8e=_0x13848b=>_0x13848b){const _0x389961=_0x4ed4c4;let _0x4575d0=_0x5d45e4[_0x389961(0x102)][_0x389961(0x10f)][_0x56a914];return _0x4575d0?(_0x5d45e4[_0x389961(0x102)][_0x389961(0x10f)][_0x56a914]=async function(){const _0x4206e9=_0x389961;var _0x4522a4;let _0x36e961=Q(_0x2e637f),_0x13e5d2;try{_0x13e5d2=await _0x4575d0[_0x4206e9(0x159)](this,arguments);}catch(_0x48a474){throw _0x586a05(_0x48a474,_0x36e961),_0x48a474;}let _0xda5c18=this[q];return _0xda5c18&&_0x157017({'stack':_0x36e961,'fetchStack':_0xda5c18[_0x4206e9(0x19f)],'url':this[_0x4206e9(0xbe)],'status':(_0x4522a4=this[_0x4206e9(0x17e)])==null?void 0x0:_0x4522a4[_0x4206e9(0x16c)](),'request':_0xda5c18[_0x4206e9(0x113)],'response':_0x126d8e(_0x13e5d2),'method':_0xda5c18['method']}),_0x13e5d2;},()=>_0x5d45e4[_0x389961(0x102)][_0x389961(0x10f)][_0x56a914]=_0x4575d0):()=>{};};var _0xaaefcf=_0x1c9f93,_0x245b1f=_0x5dd4a2;let _0x51968f=[_0x1c9f93(),_0x5dd4a2(_0x4ed4c4(0x136)),_0x5dd4a2(_0x4ed4c4(0x1b5)),_0x5dd4a2(_0x4ed4c4(0x195),_0x590585=>({'blob':{'size':_0x590585[_0x4ed4c4(0xa3)],'type':_0x590585[_0x4ed4c4(0x13b)]}})),_0x5dd4a2(_0x4ed4c4(0xa6),_0x316850=>({'arrayBuffer':{'byteLength':_0x316850[_0x4ed4c4(0x1a2)]}}))];return()=>_0x51968f['forEach'](_0x8d6c62=>_0x8d6c62());}return()=>{};}function Q(_0x2229bd){const _0x48de26=_0x4fbc4f;try{let _0x2dacec=Error[_0x48de26(0x142)];Error[_0x48de26(0x142)]=_0x2229bd;let _0x2f8838=new Error()[_0x48de26(0x193)];return Error[_0x48de26(0x142)]=_0x2dacec,_0x2f8838;}catch{return'';}}function re(_0x3f3660,_0x562875){const _0x1d193f=_0x4fbc4f;return _0x562875[_0x1d193f(0x146)](/\\?t=\\d+/g,'');}var _e=[_0x4fbc4f(0x13f),_0x4fbc4f(0x122),'__nextjs_original-stack-frame'];function _0x32aa(){const _0x503a12=['1','port','getOwnPropertySymbols','json','find','bigint','see\\x20https://tinyurl.com/2vt8jxzw\\x20for\\x20more\\x20info.','168qvrsss','type','path','create','unref','_devMiddlewareManifest.json','enumerable','_treeNodePropertiesAfterFullValue','stackTraceLimit','ArrayBuffer','_additionalMetadata','Error','replace','log','sortProps','readyState','entries','_allowedToConnectOnSend','includes','trace','noFunctions','open','_attemptToReconnectShortly','expressionsToEvaluate','index','number','[object\\x20BigInt]','capped','error','846928pflKJI','defineProperty','apply','logger\\x20failed\\x20to\\x20connect\\x20to\\x20host,\\x20see\\x20','substr','getOwnPropertyDescriptor','sort','env','_addFunctionsNode','object','tool','_sortProps','_connecting','args','reduceLimits','totalStrLength','RegExp','_Symbol','_ws','root_exp_id','GET','toString','_isPrimitiveWrapperType','Console\\x20Ninja\\x20failed\\x20to\\x20send\\x20logs,\\x20restarting\\x20the\\x20process\\x20may\\x20help;\\x20also\\x20see\\x20','console','_inNextEdge','charAt','_connectToHostNow','network','eventReceivedCallback','pathToFileURL','valueOf','NEXT_RUNTIME','_console_ninja_session','\\x20browser','dockerizedApp','openFiles','bind','_isNegativeZero','status','[object\\x20Set]','warn','HTMLAllCollection','Map','isExpressionToEvaluate','funcName','value','1743783166882','edge','ws://','failed\\x20to\\x20connect\\x20to\\x20host:\\x20','get','Boolean','onerror','pop','forEach','isArray','array','hasOwnProperty','serialize','stack','keys','blob',[\"localhost\",\"127.0.0.1\",\"example.cypress.io\",\"星途\",\"2.0.0.1\",\"192.168.10.4\",\"192.168.208.1\"],'perf_hooks','_WebSocket','webpack','XMLHttpRequest','unshift','resolveGetters','captureRequests','_isUndefined','fetchStack','_webSocketErrorDocsLink','elements','byteLength','autoExpandPreviousObjects','constructor','current','_setNodeId','elapsed','getResponseHeader','toLowerCase','_setNodeExpressionPath','URLSearchParams','_inBrowser','headers','parent','WebSocket','gateway.docker.internal','getOwnPropertyNames','splice','hrtime','autoExpandMaxDepth','text','_isSet','_hasSetOnItsPath','reload','_triedToInstallNetworkLoggingHandler','catch','push','function','_isPrimitiveType','getter','1.0.0','_getOwnPropertySymbols','time','map','blacklistEntries','expId','rootExpression','message','_HTMLAllCollection','location','global','method','_ninjaInstallGlobalErrorHandler','versions','string','size','depth','_quotedRegExp','arrayBuffer','fromCharCode','getPrototypeOf','count','_consoleNinjaAllowedToStart','nan','autoExpandPropertyCount','root_exp','name','ReadableStream','7775528PoestK','onclose','symbol','Symbol','pauseNetworkLogging','_ninjaIgnoreError','level','NEGATIVE_INFINITY','send','remix','_numberRegExp','Buffer','autoExpand','files','url','fetch','match','10056mSxfDt','angular','updateNetworkLoggingConfig','_setNodeQueryPath','join','stringify','ws/index.js','_blacklistedProperty','_setNodeLabel','_connected','_isMap','allStrLength','_capIfString','readystatechange','225961jgWLPG','_setNodePermissions','_property','strLength','toUpperCase','TypedArray','63628','String','_allowedToSend','getWebSocketClass','_addObjectProperty','indexOf','_reconnectTimeout','slice','[object\\x20Date]','hostname','now','body','_treeNodePropertiesBeforeFullValue','boolean','_WebSocketClass','split','_hasMapOnItsPath','hits','Set','_isArray','astro','_p_name','cappedProps','_undefined','logger\\x20failed\\x20to\\x20connect\\x20to\\x20host','_propertyName','undefined','_regExpToString','concat','node','response','_disposeWebsocket','setter','parse','native\\x20code','call','https://tinyurl.com/37x8b79t','_p_','length','_socket','_processTreeNodeResult','_setNodeExpandableState','origin','performance','_hasSymbolPropertyOnItsPath','Response','557704qlPpvA','\\x20server','_maxConnectAttemptCount','_extendedWarning','startsWith','host','_dateToString','autoExpandLimit','networkLoggingHandlerInstalled','date','','_cleanNode','prototype','process','props','background:\\x20rgb(30,30,30);\\x20color:\\x20rgb(255,213,92)','request','next.js\\x20browser','next.js','_connectAttemptCount','setRequestHeader','...','_p_length','endsWith','Number','_getOwnPropertyDescriptor','[object\\x20Array]','_objectToString','then','354825iLcpZv','_addProperty','.hot-update.json','timeStamp','content-type','null','default','failed\\x20to\\x20find\\x20and\\x20load\\x20WebSocket','test','2266485nQgSMT','nodeModules','application/json','_sendErrorMessage',\"c:\\\\Users\\\\毕玉欣\\\\.vscode\\\\extensions\\\\wallabyjs.console-ninja-1.0.418\\\\node_modules\",'onopen','data','_getOwnPropertyNames','Content-Type','unknown'];_0x32aa=function(){return _0x503a12;};return _0x32aa();}function ge(_0x5011e4){const _0x1cb87b=_0x4fbc4f;return!!(typeof _0x5011e4==_0x1cb87b(0xa2)&&_e['some'](_0x3f7608=>_0x5011e4[_0x1cb87b(0xda)](_0x3f7608)!==-0x1));}function me(_0x3a4a0e,_0x4b9940,_0x213125,_0x4f786c,_0x557063){return(_0x2e436a,_0x39ca15)=>{const _0x15edce=_0x17d9;_0x3a4a0e[_0x15edce(0xa0)]&&(_0x3a4a0e[_0x15edce(0xb5)]=_0x2e436a);let _0x333729=String[_0x15edce(0xa7)](0xa),_0x76acd9=_0x39ca15[_0x15edce(0xe4)](_0x333729);_0x76acd9[_0x15edce(0xfb)]>0x2&&_0x76acd9[_0x15edce(0x1b2)](0x0,0x3),_0x39ca15=_0x2e436a['stack']['split'](_0x333729)[0x0]+_0x333729+_0x76acd9[_0x15edce(0xc5)](_0x333729),_0x4b9940({'method':_0x15edce(0x156),'version':_0x213125,'args':[{'ts':Date[_0x15edce(0xdf)](),'session':_0x4f786c,'message':_0x2e436a[_0x15edce(0x9b)]||'','stack':_0x39ca15,'generatedStack':void 0x0,'stackTraceLimit':Error[_0x15edce(0x142)],'origin':_0x557063}]});};}function ye(_0x25250f,_0x2a8f45,_0x44181a,_0x3852a5,_0x1bcc40,_0x5e4de3,_0x468165){let _0x3c60b3;return({stack:_0x298457,url:_0x572993,status:_0x5efbd3,response:_0x3c9102,method:_0x146805,fetchStack:_0xc6c4ef,request:_0x1eea76})=>{const _0x188229=_0x17d9;if(ge(_0x572993))return;let _0x445f2d=_0xc6c4ef?_0x298457+'\\x0a'+_0xc6c4ef:_0x298457;if(_0x1bcc40[re(_0x2a8f45[_0x188229(0x161)],_0x445f2d)])return;let _0x48217e={'url':_0x572993,'status':_0x5efbd3,'method':_0x146805,'request':_0x1eea76,'response':_0x3c9102};_0x3c60b3=_0x3c60b3||V(_0x25250f,!0x1,{'hits':{},'ts':{}},_0x44181a);let _0x272c4f=_0x3c60b3(_0x188229(0x147),_0x188229(0x173),Date['now'](),_0x2a8f45,[_0x48217e]);_0x272c4f[_0x188229(0x164)][0x0]['args'][0x0][_0x188229(0x111)][_0x188229(0x1bb)]({'name':'stack','type':'string','value':_0x298457}),_0x272c4f[_0x188229(0x164)][0x0][_0x188229(0x164)][0x0]['props']['push']({'name':_0x188229(0x19f),'type':_0x188229(0xa2),'value':_0xc6c4ef}),_0x5e4de3&&(_0x272c4f['args'][0x0]['origin']=_0x5e4de3),_0x272c4f[_0x188229(0x164)][0x0][_0x188229(0x142)]=_0x468165,_0x3852a5(_0x272c4f);};}var Se=['Blob',_0x4fbc4f(0x143),_0x4fbc4f(0xd4),'DataView','FormData',_0x4fbc4f(0x1ab),_0x4fbc4f(0xaf)];function _0x17d9(_0x4df4e3,_0xec823b){const _0x32aa92=_0x32aa();return _0x17d9=function(_0x17d9d8,_0x2da0ca){_0x17d9d8=_0x17d9d8-0x9b;let _0x4a1690=_0x32aa92[_0x17d9d8];return _0x4a1690;},_0x17d9(_0x4df4e3,_0xec823b);}function K(_0x489939,_0x38d764){const _0x4161af=_0x4fbc4f;if(typeof _0x489939=='string'){try{if(_0x38d764&&_0x38d764[_0x4161af(0x1a9)]()===Y)return JSON[_0x4161af(0xf6)](_0x489939);}catch{}return _0x489939;}if(typeof _0x489939==_0x4161af(0x160)&&(_0x489939==null?void 0x0:_0x489939[_0x4161af(0x1a4)][_0x4161af(0xae)])){let _0x4d8e2d=_0x489939==null?void 0x0:_0x489939[_0x4161af(0x1a4)]['name'];return _0x4d8e2d&&Se['some'](_0x1a7356=>_0x1a7356===_0x4d8e2d)?'<'+_0x4d8e2d+'>':_0x489939;}return _0x489939;}function Ee(_0x16edd0){const _0x54630f=_0x4fbc4f;return _0x16edd0?_0x16edd0===_0x54630f(0x114)?0x32:_0x16edd0==='angular\\x20browser'?0x64:0x1e:0x1e;}function se(_0x4317c2){const _0x1b3f34=_0x4fbc4f;var _0x1fe6b0;return _0x4317c2?(_0x1fe6b0=Object[_0x1b3f34(0x14a)](_0x4317c2)[_0x1b3f34(0x137)](([_0x59ddc5,_0x25bb8d])=>(_0x59ddc5==null?void 0x0:_0x59ddc5['toLowerCase']())===_0x1b3f34(0x124)))==null?void 0x0:_0x1fe6b0[0x1]:void 0x0;}");}catch(e){}</script>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>encode</title>
  <script defer src="main-dd3b5314.js"></script><link href="main-fce14784.css" rel="stylesheet"></head>
  <body>
    <div id="app"></div>
  </body>
</html>

这里引入了asyncModule.js文件

webpack提供了一个require机制,引入了CMD,AMD规范,这样就可以在浏览器加载模块,浏览器实现了加载模块的机制

webpack_modules => key:文件路径,value:文件内容

首先是 这里加载资源:

接下来,在modules中找src/index.js的内容,就会找到:

然后走到 *webpack_require* .r 函数:

=>

然后走 index.css 也是类似,通过 *webpack_require* 加载

import 内容 会调用 *webpack_require*.e



=> webpack_require.f.j:

=> webpack_require.l: 创建对应的script标签,并且传入url

发起 asyncModule 请求,执行响应中的逻辑:

这里的push利用了 jsonp 的思想,其实在main.js当中已经劫持了push的操作

所以在asyncModule中调用了push操作,相当于触发了main.js的jsonpCallback

当前的模块内容都是存储在 webpack_require.m 中,这里就是把异步组件内容注入到这个模块当中


=> 跨文件通信:就是利用了 jsonp 的思想,在main当中劫持对应的push操作,在asyncModule中调用push,就会将这里的数据交还到callback当中,拿到数据后放到__webpack_require__.m中,用到的话,就在__webpack_require__.m中找

相关推荐
鱼樱前端27 分钟前
Vite 工程化深度解析与最佳实践
前端·javascript
鱼樱前端34 分钟前
Webpack 在前端工程化中的核心应用解析-构建老大
前端·javascript
Moment34 分钟前
多人协同编辑算法 —— CRDT 算法 🐂🐂🐂
前端·javascript·面试
小付同学呀40 分钟前
前端快速入门学习4——CSS盒子模型、浮动、定位
前端·css·学习
OpenTiny社区2 小时前
TinyPro 中后台管理系统使用指南——让页面搭建变得如此简单!
前端·vue.js·开源
我有一只臭臭2 小时前
webpack配置解析
前端·webpack
我有一只臭臭2 小时前
Vue中webpack的使用
前端·vue.js·webpack
今天也想MK代码3 小时前
ReFormX:现代化的 React 表单解决方案 - 深度解析与最佳实践
前端·react.js·性能优化
醋醋3 小时前
Vue2源码记录3
前端·vue.js