前端工程化之模块化开发 & 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中找

相关推荐
To_OC5 小时前
别再串行写 await 了,Promise.all 才是并行请求的正确打开方式
前端·javascript·promise
vipbic6 小时前
中后台越做越乱后,我用插件化把它救回来了
前端·vue.js
Hyyy6 小时前
Computer Use 适合做什么,不适合做什么——一次真实使用后的思考
前端
小和尚同志6 小时前
前端 AI 单元测试思考与落地
前端·人工智能·aigc
invicinble7 小时前
c端系统,其实更像一个信息展示平台
前端
李姆斯8 小时前
管理是否可以被完全量化
前端·产品经理·团队管理
名字还没想好☜9 小时前
Next.js 中间件实战:鉴权、重定向与 A/B 分流
开发语言·前端·javascript·中间件·react·next.js
广州灵眸科技有限公司9 小时前
瑞芯微RV1126B开发板(EASY-EAI-PI2) INI文件操作
java·前端·javascript·网络·人工智能
kaiking_g10 小时前
vue项目中,静态导入 vs 动态导入 详解
前端·javascript·vue.js
江华森10 小时前
Web 开发基础:HTTP 与 REST
前端·网络协议·http