@next-core/brick-container 3.24.17 → 3.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@next-core/brick-container",
3
- "version": "3.24.17",
3
+ "version": "3.25.0",
4
4
  "description": "Brick Container Server",
5
5
  "homepage": "https://github.com/easyops-cn/next-core/tree/v3/packages/brick-container",
6
6
  "license": "GPL-3.0",
@@ -75,5 +75,5 @@
75
75
  "@next-core/runtime": "*",
76
76
  "@next-core/utils": "*"
77
77
  },
78
- "gitHead": "7c5321e9771f9baf5660930b54ec2b09ad5796f5"
78
+ "gitHead": "342bc655e525ebdef40b0ed012bc51003612ac65"
79
79
  }
package/serve/env.js CHANGED
@@ -1,8 +1,9 @@
1
- import { existsSync } from "node:fs";
1
+ import { existsSync, readFileSync } from "node:fs";
2
2
  import path from "node:path";
3
3
  import meow from "meow";
4
4
  import chalk from "chalk";
5
5
  import glob from "glob";
6
+ import yaml from "js-yaml";
6
7
  import { getLocalBrickPackageNames } from "@next-core/serve-helpers";
7
8
  import { getSizeCheckApp } from "./utils/sizeCheck.js";
8
9
 
@@ -25,6 +26,7 @@ const cli = meow(
25
26
  --size-check Enable size-check mode
26
27
  --cookie-same-site-none Append "Same-Site: none" for cookies
27
28
  --verbose Print verbose logs
29
+ --proxy-config Specify custom proxy config file path (defaults to "dev.proxy.yaml" in project root)
28
30
  --help Show help message
29
31
  --version Show brick container version
30
32
  `,
@@ -75,6 +77,9 @@ const cli = meow(
75
77
  verbose: {
76
78
  type: "boolean",
77
79
  },
80
+ proxyConfig: {
81
+ type: "string",
82
+ },
78
83
  },
79
84
  allowUnknownFlags: false,
80
85
  }
@@ -159,6 +164,7 @@ export async function getEnv(rootDir, runtimeFlags) {
159
164
  sizeCheck: flags.sizeCheck,
160
165
  sizeCheckFilter,
161
166
  verbose: flags.verbose,
167
+ localProxies: getLocalProxies(rootDir, flags.proxyConfig),
162
168
  };
163
169
 
164
170
  env.localMocks = localMocks?.map((mock) => ({
@@ -222,9 +228,44 @@ export async function getEnv(rootDir, runtimeFlags) {
222
228
  env.useRemote || !env.useLocalContainer ? env.server : "N/A"
223
229
  );
224
230
 
231
+ if (
232
+ env.localProxies.proxies &&
233
+ Object.keys(env.localProxies.proxies).length > 0
234
+ ) {
235
+ console.log();
236
+ console.log("local proxies:", env.localProxies.proxies);
237
+ if (env.localProxies.auth) {
238
+ console.log(
239
+ "local proxy auth: clientId=%s, org=%s, user=%s",
240
+ env.localProxies.auth.clientId,
241
+ env.localProxies.auth.org,
242
+ env.localProxies.auth.user
243
+ );
244
+ }
245
+ }
246
+
225
247
  return env;
226
248
  }
227
249
 
250
+ function getLocalProxies(rootDir, customPath) {
251
+ const proxyConfigPath = customPath
252
+ ? path.resolve(customPath)
253
+ : path.join(rootDir, "dev.proxy.yaml");
254
+ if (existsSync(proxyConfigPath)) {
255
+ console.log(chalk.cyan("proxy config:"), proxyConfigPath);
256
+ const content = yaml.load(readFileSync(proxyConfigPath, "utf8"));
257
+ if (!content) return {};
258
+ if (content.proxies) {
259
+ return content;
260
+ }
261
+ return { proxies: content };
262
+ }
263
+ if (customPath) {
264
+ console.error(chalk.red("proxy config not found:"), proxyConfigPath);
265
+ }
266
+ return {};
267
+ }
268
+
228
269
  function getServerPath(server) {
229
270
  if (server) {
230
271
  if (!server.startsWith("http://") && !server.startsWith("https://")) {
package/serve/index.js CHANGED
@@ -16,6 +16,7 @@ import {
16
16
  getPreMiddlewares,
17
17
  } from "./middlewares/getMiddlewares.js";
18
18
  import liveReloadServer from "./utils/liveReloadServer.js";
19
+ import { setupLocalProxies } from "./localProxy.js";
19
20
 
20
21
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
21
22
 
@@ -55,6 +56,9 @@ for (const middleware of middlewares) {
55
56
  }
56
57
  }
57
58
 
59
+ // Register local service proxies before remote proxies.
60
+ setupLocalProxies(app, env);
61
+
58
62
  const proxy = getProxy(env, getRawIndexHtml);
59
63
 
60
64
  const browseHappyHtml = "browse-happy.html";
@@ -0,0 +1,82 @@
1
+ import { createProxyMiddleware } from "http-proxy-middleware";
2
+ import chalk from "chalk";
3
+ import { getToken } from "./tokenManager.js";
4
+
5
+ export function setupLocalProxies(app, env) {
6
+ const config = env.localProxies;
7
+ if (!config || !config.proxies || Object.keys(config.proxies).length === 0) {
8
+ return;
9
+ }
10
+
11
+ const { proxies, auth } = config;
12
+ const org = auth && auth.org;
13
+ const user = auth && auth.user;
14
+ const serverUrl = env.server;
15
+
16
+ if (auth && !auth.token) {
17
+ getToken(serverUrl, auth).catch((e) =>
18
+ console.error(
19
+ chalk.red("[local-proxy]"),
20
+ "Token pre-warm failed:",
21
+ e.message
22
+ )
23
+ );
24
+ }
25
+
26
+ for (const [pathPattern, target] of Object.entries(proxies)) {
27
+ const gatewayPath = pathPattern.startsWith("/")
28
+ ? pathPattern
29
+ : `/api/gateway/${pathPattern}`;
30
+ const fullPath = `${env.baseHref}${gatewayPath.slice(1)}`;
31
+
32
+ const proxy = createProxyMiddleware({
33
+ target,
34
+ secure: false,
35
+ changeOrigin: true,
36
+ logger: {
37
+ info() {},
38
+ warn(...args) {
39
+ return console.warn(...args);
40
+ },
41
+ error(...args) {
42
+ return console.error(...args);
43
+ },
44
+ },
45
+ pathRewrite: { [`^${fullPath}`]: "" },
46
+ on: {
47
+ proxyReq: (proxyReq) => {
48
+ if (org && !proxyReq.getHeader("org")) {
49
+ proxyReq.setHeader("org", String(org));
50
+ }
51
+ if (user && !proxyReq.getHeader("user")) {
52
+ proxyReq.setHeader("user", user);
53
+ }
54
+ },
55
+ },
56
+ });
57
+
58
+ app.use(fullPath, async (req, res, next) => {
59
+ console.log(
60
+ chalk.cyan("[local-proxy]"),
61
+ chalk.green(pathPattern) + chalk.white(":"),
62
+ chalk.yellow(req.method),
63
+ chalk.white(req.url)
64
+ );
65
+ if (auth) {
66
+ try {
67
+ const token = await getToken(serverUrl, auth);
68
+ if (token) {
69
+ req.headers["authorization"] = `Bearer ${token}`;
70
+ }
71
+ } catch (e) {
72
+ console.error(
73
+ chalk.red("[local-proxy]"),
74
+ "Failed to get token:",
75
+ e.message
76
+ );
77
+ }
78
+ }
79
+ proxy(req, res, next);
80
+ });
81
+ }
82
+ }
@@ -0,0 +1,209 @@
1
+ import crypto from "node:crypto";
2
+ import https from "node:https";
3
+ import http from "node:http";
4
+ import { URL } from "node:url";
5
+ import chalk from "chalk";
6
+
7
+ const TOKEN_CACHE_TTL = 1800 * 1000;
8
+ const CREDENTIALS_CACHE_TTL = 3600 * 1000;
9
+ const DEFAULT_APP_ID = "api_gateway";
10
+ const GATEWAY_INNER_PORT = 8107;
11
+ const GATEWAY_SERVICE_PATH = "/api/gateway/user_service.apikey";
12
+
13
+ let _tokenCache = null;
14
+ let _credentialsCache = null;
15
+
16
+ function generateSignature(
17
+ method,
18
+ urlPath,
19
+ query,
20
+ contentType,
21
+ clientId,
22
+ secret,
23
+ timestamp
24
+ ) {
25
+ const keyList = Object.keys(query)
26
+ .filter((k) => k !== "signature")
27
+ .sort();
28
+
29
+ const queryParts = [];
30
+ for (const key of keyList) {
31
+ const val = query[key];
32
+ if (Array.isArray(val)) {
33
+ for (const v of val) {
34
+ queryParts.push(`${key}${v}`);
35
+ }
36
+ } else {
37
+ queryParts.push(`${key}${val}`);
38
+ }
39
+ }
40
+
41
+ const data = [
42
+ method,
43
+ urlPath,
44
+ queryParts.join(""),
45
+ contentType,
46
+ clientId,
47
+ secret,
48
+ timestamp,
49
+ ].join("\n");
50
+ return crypto.createHmac("sha256", secret).update(data).digest("hex");
51
+ }
52
+
53
+ function httpRequest(fullUrl, options, body) {
54
+ return new Promise((resolve, reject) => {
55
+ const parsed = new URL(fullUrl);
56
+ const mod = parsed.protocol === "https:" ? https : http;
57
+
58
+ if (body) {
59
+ options.headers = options.headers || {};
60
+ options.headers["Content-Length"] = Buffer.byteLength(body);
61
+ }
62
+
63
+ const req = mod.request(
64
+ fullUrl,
65
+ { ...options, rejectUnauthorized: false, timeout: 30000 },
66
+ (res) => {
67
+ let data = "";
68
+ res.on("data", (chunk) => (data += chunk));
69
+ res.on("end", () => {
70
+ if (res.statusCode !== 200) {
71
+ return reject(new Error(`HTTP ${res.statusCode}: ${data}`));
72
+ }
73
+ try {
74
+ resolve(JSON.parse(data));
75
+ } catch (e) {
76
+ reject(new Error(`JSON parse error: ${e.message}`));
77
+ }
78
+ });
79
+ }
80
+ );
81
+ req.on("error", (e) => reject(new Error(`network error: ${e.message}`)));
82
+ req.on("timeout", () => {
83
+ req.destroy();
84
+ reject(new Error("request timeout"));
85
+ });
86
+ req.end(body || undefined);
87
+ });
88
+ }
89
+
90
+ function getInnerGatewayUrl(serverUrl) {
91
+ const parsed = new URL(serverUrl);
92
+ return `http://${parsed.hostname}:${GATEWAY_INNER_PORT}${GATEWAY_SERVICE_PATH}`;
93
+ }
94
+
95
+ async function createServerApiKey(serverUrl, clientId) {
96
+ const now = Date.now();
97
+ if (_credentialsCache && now < _credentialsCache.expireAt) {
98
+ return _credentialsCache.value;
99
+ }
100
+
101
+ const timestamp = String(Math.floor(now / 1000));
102
+ const servicePath = "/api/v1/apikey/server";
103
+ const signature = generateSignature(
104
+ "POST",
105
+ servicePath,
106
+ {},
107
+ "application/json",
108
+ clientId,
109
+ clientId,
110
+ timestamp
111
+ );
112
+
113
+ const baseUrl = getInnerGatewayUrl(serverUrl);
114
+ const fullUrl = `${baseUrl}${servicePath}`;
115
+ console.log(
116
+ chalk.cyan("[token-manager]"),
117
+ "Creating server apikey for",
118
+ clientId,
119
+ "(via inner port)"
120
+ );
121
+
122
+ const data = await httpRequest(
123
+ fullUrl,
124
+ {
125
+ method: "POST",
126
+ headers: {
127
+ "Content-Type": "application/json",
128
+ "X-Timestamp": timestamp,
129
+ },
130
+ },
131
+ JSON.stringify({ clientId, signature })
132
+ );
133
+
134
+ const secret = data.data?.secret;
135
+ if (!secret) {
136
+ throw new Error(
137
+ `CreateServerApiKey: unexpected response: ${JSON.stringify(data)}`
138
+ );
139
+ }
140
+
141
+ const value = { clientId, secret };
142
+ _credentialsCache = { value, expireAt: now + CREDENTIALS_CACHE_TTL };
143
+ return value;
144
+ }
145
+
146
+ async function requestToken(serverUrl, clientId, secret, user, org) {
147
+ const timestamp = String(Math.floor(Date.now() / 1000));
148
+ const servicePath = `/api/v1/apikey/request_token/client_id/${encodeURIComponent(
149
+ clientId
150
+ )}`;
151
+
152
+ const query = { user: user || "defaultUser", org: String(org) };
153
+ query.signature = generateSignature(
154
+ "GET",
155
+ servicePath,
156
+ query,
157
+ "",
158
+ clientId,
159
+ secret,
160
+ timestamp
161
+ );
162
+
163
+ const qs = Object.entries(query)
164
+ .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)
165
+ .join("&");
166
+
167
+ const baseUrl = getInnerGatewayUrl(serverUrl);
168
+ const fullUrl = `${baseUrl}${servicePath}?${qs}`;
169
+ const data = await httpRequest(fullUrl, {
170
+ method: "GET",
171
+ headers: { "X-Timestamp": timestamp },
172
+ });
173
+
174
+ if (data.code !== 0 || !data.data) {
175
+ throw new Error(
176
+ `RequestToken: unexpected response: ${JSON.stringify(data)}`
177
+ );
178
+ }
179
+ return data.data.token || "";
180
+ }
181
+
182
+ export async function getToken(serverUrl, auth) {
183
+ if (auth.token) {
184
+ return auth.token;
185
+ }
186
+
187
+ const appId = auth.appId || DEFAULT_APP_ID;
188
+ const clientId = `easyops_server_${appId}`;
189
+
190
+ const now = Date.now();
191
+ if (_tokenCache && now < _tokenCache.expireAt) {
192
+ return _tokenCache.token;
193
+ }
194
+
195
+ const creds = await createServerApiKey(serverUrl, clientId);
196
+ const token = await requestToken(
197
+ serverUrl,
198
+ creds.clientId,
199
+ creds.secret,
200
+ auth.user,
201
+ auth.org
202
+ );
203
+ _tokenCache = { token, expireAt: now + TOKEN_CACHE_TTL };
204
+ console.log(
205
+ chalk.green("[token-manager]"),
206
+ "Token acquired, cached for 30 minutes"
207
+ );
208
+ return token;
209
+ }
@@ -1,2 +0,0 @@
1
- (()=>{"use strict";var e,t,r,n,o,a,i,l,u,c,s,f,d,h,p,m,b,v,y,g,x,w,_,k,S,j={2585:()=>{},4861:(e,t,r)=>{r.a(e,(async(e,t)=>{try{if(r(2585),r(6118),r(8898),window.BRICK_NEXT_VERSIONS={"brick-container":"3.24.17"},window.MOCK_DATE)try{const{set:e}=await r.e(621).then(r.t.bind(r,3132,23));e(window.MOCK_DATE)}catch(e){console.error("Mock date failed:",e)}r.e(668).then(r.bind(r,5046)),t()}catch(e){t(e)}}),1)},6118:()=>{},8898:()=>{}},E={};function O(e){var t=E[e];if(void 0!==t)return t.exports;var r=E[e]={id:e,loaded:!1,exports:{}};return j[e].call(r.exports,r,r.exports,O),r.loaded=!0,r.exports}O.m=j,O.c=E,e="function"==typeof Symbol?Symbol("webpack queues"):"__webpack_queues__",t="function"==typeof Symbol?Symbol("webpack exports"):"__webpack_exports__",r="function"==typeof Symbol?Symbol("webpack error"):"__webpack_error__",n=e=>{e&&e.d<1&&(e.d=1,e.forEach((e=>e.r--)),e.forEach((e=>e.r--?e.r++:e())))},O.a=(o,a,i)=>{var l;i&&((l=[]).d=-1);var u,c,s,f=new Set,d=o.exports,h=new Promise(((e,t)=>{s=t,c=e}));h[t]=d,h[e]=e=>(l&&e(l),f.forEach(e),h.catch((e=>{}))),o.exports=h,a((o=>{var a;u=(o=>o.map((o=>{if(null!==o&&"object"==typeof o){if(o[e])return o;if(o.then){var a=[];a.d=0,o.then((e=>{i[t]=e,n(a)}),(e=>{i[r]=e,n(a)}));var i={};return i[e]=e=>e(a),i}}var l={};return l[e]=e=>{},l[t]=o,l})))(o);var i=()=>u.map((e=>{if(e[r])throw e[r];return e[t]})),c=new Promise((t=>{(a=()=>t(i)).r=0;var r=e=>e!==l&&!f.has(e)&&(f.add(e),e&&!e.d&&(a.r++,e.push(a)));u.map((t=>t[e](r)))}));return a.r?c:i()}),(e=>(e?s(h[r]=e):c(d),n(l)))),l&&l.d<0&&(l.d=0)},O.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return O.d(t,{a:t}),t},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,O.t=function(e,t){if(1&t&&(e=this(e)),8&t)return e;if("object"==typeof e&&e){if(4&t&&e.__esModule)return e;if(16&t&&"function"==typeof e.then)return e}var r=Object.create(null);O.r(r);var n={};o=o||[null,a({}),a([]),a(a)];for(var i=2&t&&e;"object"==typeof i&&!~o.indexOf(i);i=a(i))Object.getOwnPropertyNames(i).forEach((t=>n[t]=()=>e[t]));return n.default=()=>e,O.d(r,n),r},O.d=(e,t)=>{for(var r in t)O.o(t,r)&&!O.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},O.f={},O.e=e=>Promise.all(Object.keys(O.f).reduce(((t,r)=>(O.f[r](e,t),t)),[])),O.u=e=>({621:"mockdate",668:"all"}[e]+"."+{621:"85073b97",668:"cdbcb286"}[e]+".js"),O.miniCssF=e=>"all.ae8498c8.css",O.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),O.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),i={},l="@next-core/brick-container:",O.l=(e,t,r,n)=>{if(i[e])i[e].push(t);else{var o,a;if(void 0!==r)for(var u=document.getElementsByTagName("script"),c=0;c<u.length;c++){var s=u[c];if(s.getAttribute("src")==e||s.getAttribute("data-webpack")==l+r){o=s;break}}o||(a=!0,(o=document.createElement("script")).charset="utf-8",o.timeout=120,O.nc&&o.setAttribute("nonce",O.nc),o.setAttribute("data-webpack",l+r),o.src=e),i[e]=[t];var f=(t,r)=>{o.onerror=o.onload=null,clearTimeout(d);var n=i[e];if(delete i[e],o.parentNode&&o.parentNode.removeChild(o),n&&n.forEach((e=>e(r))),t)return t(r)},d=setTimeout(f.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=f.bind(null,o.onerror),o.onload=f.bind(null,o.onload),a&&document.head.appendChild(o)}},O.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},O.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),O.j=792,(()=>{O.S={};var e={},t={};O.I=(r,n)=>{n||(n=[]);var o=t[r];if(o||(o=t[r]={}),!(n.indexOf(o)>=0)){if(n.push(o),e[r])return e[r];O.o(O.S,r)||(O.S[r]={});var a=O.S[r],i="@next-core/brick-container",l=(e,t,r,n)=>{var o=a[e]=a[e]||{},l=o[t];(!l||!l.loaded&&(!n!=!l.eager?n:i>l.from))&&(o[t]={get:r,from:i,eager:!!n})},u=[];return"default"===r&&(l("@babel/parser","7.27.5",(()=>O.e(668).then((()=>()=>O(6773))))),l("@easyops-cn/brick-next-pipes","0.7.6",(()=>O.e(668).then((()=>()=>O(4306))))),l("@next-core/cook","2.5.14",(()=>O.e(668).then((()=>()=>O(8382))))),l("@next-core/easyops-runtime","0.15.35",(()=>O.e(668).then((()=>()=>O(970))))),l("@next-core/http","1.2.16",(()=>O.e(668).then((()=>()=>O(3032))))),l("@next-core/i18n","1.0.93",(()=>O.e(668).then((()=>()=>O(6319))))),l("@next-core/inject","1.0.65",(()=>O.e(668).then((()=>()=>O(6095))))),l("@next-core/loader","1.6.21",(()=>O.e(668).then((()=>()=>O(9321))))),l("@next-core/pipes","2.0.38",(()=>O.e(668).then((()=>()=>O(8604))))),l("@next-core/runtime","1.72.10",(()=>O.e(668).then((()=>()=>O(4046))))),l("@next-core/supply","2.3.11",(()=>O.e(668).then((()=>()=>O(5702))))),l("@next-core/theme","1.6.1",(()=>O.e(668).then((()=>()=>O(90))))),l("@next-core/utils/general","1.8.11",(()=>O.e(668).then((()=>()=>O(763))))),l("@next-core/utils/storyboard","1.8.11",(()=>O.e(668).then((()=>()=>O(4395))))),l("history","4.10.1",(()=>O.e(668).then((()=>()=>O(9669))))),l("i18next-browser-languagedetector","7.2.2",(()=>O.e(668).then((()=>()=>O(726))))),l("i18next","22.5.1",(()=>O.e(668).then((()=>()=>O(843))))),l("js-yaml","3.14.1",(()=>O.e(668).then((()=>()=>O(9515))))),l("lodash","4.17.21",(()=>O.e(668).then((()=>()=>O(5250))))),l("moment/locale/zh-cn.js","2.30.1",(()=>O.e(668).then((()=>()=>O(1329))))),l("moment","2.30.1",(()=>O.e(668).then((()=>()=>O(9420)))))),e[r]=u.length?Promise.all(u).then((()=>e[r]=1)):1}}})(),(()=>{var e;O.g.importScripts&&(e=O.g.location+"");var t=O.g.document;if(!e&&t&&(t.currentScript&&"SCRIPT"===t.currentScript.tagName.toUpperCase()&&(e=t.currentScript.src),!e)){var r=t.getElementsByTagName("script");if(r.length)for(var n=r.length-1;n>-1&&(!e||!/^http(s?):/.test(e));)e=r[n--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),O.p=e})(),u=e=>{var t=e=>e.split(".").map((e=>+e==e?+e:e)),r=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(e),n=r[1]?t(r[1]):[];return r[2]&&(n.length++,n.push.apply(n,t(r[2]))),r[3]&&(n.push([]),n.push.apply(n,t(r[3]))),n},c=(e,t)=>{e=u(e),t=u(t);for(var r=0;;){if(r>=e.length)return r<t.length&&"u"!=(typeof t[r])[0];var n=e[r],o=(typeof n)[0];if(r>=t.length)return"u"==o;var a=t[r],i=(typeof a)[0];if(o!=i)return"o"==o&&"n"==i||"s"==i||"u"==o;if("o"!=o&&"u"!=o&&n!=a)return n<a;r++}},s=e=>{var t=e[0],r="";if(1===e.length)return"*";if(t+.5){r+=0==t?">=":-1==t?"<":1==t?"^":2==t?"~":t>0?"=":"!=";for(var n=1,o=1;o<e.length;o++)n--,r+="u"==(typeof(i=e[o]))[0]?"-":(n>0?".":"")+(n=2,i);return r}var a=[];for(o=1;o<e.length;o++){var i=e[o];a.push(0===i?"not("+l()+")":1===i?"("+l()+" || "+l()+")":2===i?a.pop()+" "+a.pop():s(i))}return l();function l(){return a.pop().replace(/^\((.+)\)$/,"$1")}},f=(e,t)=>{if(0 in e){t=u(t);var r=e[0],n=r<0;n&&(r=-r-1);for(var o=0,a=1,i=!0;;a++,o++){var l,c,s=a<e.length?(typeof e[a])[0]:"";if(o>=t.length||"o"==(c=(typeof(l=t[o]))[0]))return!i||("u"==s?a>r&&!n:""==s!=n);if("u"==c){if(!i||"u"!=s)return!1}else if(i)if(s==c)if(a<=r){if(l!=e[a])return!1}else{if(n?l>e[a]:l<e[a])return!1;l!=e[a]&&(i=!1)}else if("s"!=s&&"n"!=s){if(n||a<=r)return!1;i=!1,a--}else{if(a<=r||c<s!=n)return!1;i=!1}else"s"!=s&&"n"!=s&&(i=!1,a--)}}var d=[],h=d.pop.bind(d);for(o=1;o<e.length;o++){var p=e[o];d.push(1==p?h()|h():2==p?h()&h():p?f(p,t):!h())}return!!h()},d=(e,t)=>e&&O.o(e,t),h=e=>(e.loaded=1,e.get()),p=e=>Object.keys(e).reduce(((t,r)=>(e[r].eager&&(t[r]=e[r]),t)),{}),m=(e,t,r)=>{var n=r?p(e[t]):e[t];return Object.keys(n).reduce(((e,t)=>!e||!n[e].loaded&&c(e,t)?t:e),0)},b=(e,t,r,n)=>"Unsatisfied version "+r+" from "+(r&&e[t][r].from)+" of shared singleton module "+t+" (required "+s(n)+")",v=e=>{throw new Error(e)},y=e=>{"undefined"!=typeof console&&console.warn&&console.warn(e)},g=(e,t,r)=>r?r():((e,t)=>v("Shared module "+t+" doesn't exist in shared scope "+e))(e,t),x=(e=>function(t,r,n,o,a){var i=O.I(t);return i&&i.then&&!n?i.then(e.bind(e,t,O.S[t],r,!1,o,a)):e(t,O.S[t],r,n,o,a)})(((e,t,r,n,o,a)=>{if(!d(t,r))return g(e,r,a);var i=m(t,r,n);return f(o,i)||y(b(t,r,i,o)),h(t[r][i])})),w={},_={1727:()=>x("default","@next-core/theme",!1,[1,1,6,1],(()=>O.e(668).then((()=>()=>O(90))))),3647:()=>x("default","@next-core/runtime",!1,[0],(()=>O.e(668).then((()=>()=>O(4046))))),7551:()=>x("default","@next-core/http",!1,[0],(()=>O.e(668).then((()=>()=>O(3032))))),8046:()=>x("default","@next-core/i18n",!1,[1,1,0,93],(()=>O.e(668).then((()=>()=>O(6319))))),9755:()=>x("default","@next-core/easyops-runtime",!1,[2,0,15,35],(()=>O.e(668).then((()=>()=>O(970))))),1030:()=>x("default","lodash",!1,[1,4,17,21],(()=>O.e(668).then((()=>()=>O(5250))))),4113:()=>x("default","@next-core/utils/general",!1,[0],(()=>O.e(668).then((()=>()=>O(763))))),1060:()=>x("default","js-yaml",!1,[1,3,14,1],(()=>O.e(668).then((()=>()=>O(9515))))),8577:()=>x("default","@next-core/loader",!1,[1,1,6,21],(()=>O.e(668).then((()=>()=>O(9321))))),5069:()=>x("default","@next-core/utils/storyboard",!1,[0],(()=>O.e(668).then((()=>()=>O(4395))))),1858:()=>x("default","moment/locale/zh-cn.js",!1,[0],(()=>O.e(668).then((()=>()=>O(1329))))),1916:()=>x("default","moment",!1,[0],(()=>O.e(668).then((()=>()=>O(9420))))),5630:()=>x("default","i18next",!1,[0],(()=>O.e(668).then((()=>()=>O(843))))),1732:()=>x("default","history",!1,[0],(()=>O.e(668).then((()=>()=>O(9669))))),848:()=>x("default","i18next-browser-languagedetector",!1,[0],(()=>O.e(668).then((()=>()=>O(726))))),8303:()=>x("default","@next-core/cook",!1,[0],(()=>O.e(668).then((()=>()=>O(8382))))),3575:()=>x("default","@next-core/inject",!1,[0],(()=>O.e(668).then((()=>()=>O(6095))))),8319:()=>x("default","@next-core/supply",!1,[0],(()=>O.e(668).then((()=>()=>O(5702))))),5285:()=>x("default","@next-core/pipes",!1,[0],(()=>O.e(668).then((()=>()=>O(8604))))),580:()=>x("default","@babel/parser",!1,[0],(()=>O.e(668).then((()=>()=>O(6773))))),8377:()=>x("default","@easyops-cn/brick-next-pipes",!1,[0],(()=>O.e(668).then((()=>()=>O(4306)))))},k={668:[1727,3647,7551,8046,9755,1030,4113,1060,8577,5069,1858,1916,5630,1732,848,8303,3575,8319,5285,580,8377]},S={},O.f.consumes=(e,t)=>{O.o(k,e)&&k[e].forEach((e=>{if(O.o(w,e))return t.push(w[e]);if(!S[e]){var r=t=>{w[e]=0,O.m[e]=r=>{delete O.c[e],r.exports=t()}};S[e]=!0;var n=t=>{delete w[e],O.m[e]=r=>{throw delete O.c[e],t}};try{var o=_[e]();o.then?t.push(w[e]=o.then(r).catch(n)):r(o)}catch(e){n(e)}}}))},(()=>{if("undefined"!=typeof document){var e={792:0};O.f.miniCss=(t,r)=>{e[t]?r.push(e[t]):0!==e[t]&&{668:1}[t]&&r.push(e[t]=(e=>new Promise(((t,r)=>{var n=O.miniCssF(e),o=O.p+n;if(((e,t)=>{for(var r=document.getElementsByTagName("link"),n=0;n<r.length;n++){var o=(i=r[n]).getAttribute("data-href")||i.getAttribute("href");if("stylesheet"===i.rel&&(o===e||o===t))return i}var a=document.getElementsByTagName("style");for(n=0;n<a.length;n++){var i;if((o=(i=a[n]).getAttribute("data-href"))===e||o===t)return i}})(n,o))return t();((e,t,r,n,o)=>{var a=document.createElement("link");a.rel="stylesheet",a.type="text/css",O.nc&&(a.nonce=O.nc),a.onerror=a.onload=r=>{if(a.onerror=a.onload=null,"load"===r.type)n();else{var i=r&&r.type,l=r&&r.target&&r.target.href||t,u=new Error("Loading CSS chunk "+e+" failed.\n("+i+": "+l+")");u.name="ChunkLoadError",u.code="CSS_CHUNK_LOAD_FAILED",u.type=i,u.request=l,a.parentNode&&a.parentNode.removeChild(a),o(u)}},a.href=t,document.head.appendChild(a)})(e,o,0,t,r)})))(t).then((()=>{e[t]=0}),(r=>{throw delete e[t],r})))}}})(),(()=>{var e={792:0};O.f.j=(t,r)=>{var n=O.o(e,t)?e[t]:void 0;if(0!==n)if(n)r.push(n[2]);else{var o=new Promise(((r,o)=>n=e[t]=[r,o]));r.push(n[2]=o);var a=O.p+O.u(t),i=new Error;O.l(a,(r=>{if(O.o(e,t)&&(0!==(n=e[t])&&(e[t]=void 0),n)){var o=r&&("load"===r.type?"missing":r.type),a=r&&r.target&&r.target.src;i.message="Loading chunk "+t+" failed.\n("+o+": "+a+")",i.name="ChunkLoadError",i.type=o,i.request=a,n[1](i)}}),"chunk-"+t,t)}};var t=(t,r)=>{var n,o,[a,i,l]=r,u=0;if(a.some((t=>0!==e[t]))){for(n in i)O.o(i,n)&&(O.m[n]=i[n]);l&&l(O)}for(t&&t(r);u<a.length;u++)o=a[u],O.o(e,o)&&e[o]&&e[o][0](),e[o]=0},r=globalThis.webpackChunk_next_core_brick_container=globalThis.webpackChunk_next_core_brick_container||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})(),O(4861)})();
2
- //# sourceMappingURL=main.8930f0b2.js.map