@pinnacle0/webpack-util 0.3.38 → 0.3.39
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 +3 -7
- package/src/WebpackConfigGenerator/Rule/RegExpUtil.d.ts +3 -1
- package/src/WebpackConfigGenerator/Rule/RegExpUtil.js +2 -2
- package/src/WebpackConfigGenerator/Rule/RegExpUtil.js.map +1 -1
- package/src/WebpackConfigGenerator/Rule/non-es5.rule.js +1 -1
- package/src/WebpackConfigGenerator/Rule/non-es5.rule.js.map +1 -1
- package/src/WebpackConfigGenerator/Rule/ts.rule.js +5 -16
- package/src/WebpackConfigGenerator/Rule/ts.rule.js.map +1 -1
- package/src/WebpackConfigGenerator/Rule/core-fe-hmr-babel-plugin.d.ts +0 -13
- package/src/WebpackConfigGenerator/Rule/core-fe-hmr-babel-plugin.js +0 -62
- package/src/WebpackConfigGenerator/Rule/core-fe-hmr-babel-plugin.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,14 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pinnacle0/webpack-util",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.39",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"main": "src/index.js",
|
|
6
6
|
"dependencies": {
|
|
7
|
-
"@babel/core": "7.19.3",
|
|
8
|
-
"@babel/plugin-proposal-decorators": "7.19.3",
|
|
9
|
-
"@babel/preset-env": "7.19.4",
|
|
10
|
-
"@babel/preset-react": "7.18.6",
|
|
11
|
-
"@babel/preset-typescript": "7.18.6",
|
|
12
7
|
"@pmmmwh/react-refresh-webpack-plugin": "0.5.8",
|
|
13
8
|
"@swc/core": "1.3.9",
|
|
14
9
|
"autoprefixer": "10.4.12",
|
|
@@ -30,7 +25,8 @@
|
|
|
30
25
|
"terser-webpack-plugin": "5.3.6",
|
|
31
26
|
"webpack": "5.74.0",
|
|
32
27
|
"webpack-dev-server": "4.11.1",
|
|
33
|
-
"yargs": "17.6.0"
|
|
28
|
+
"yargs": "17.6.0",
|
|
29
|
+
"swc-plugin-core-fe-hmr": "0.1.0"
|
|
34
30
|
},
|
|
35
31
|
"peerDependencies": {
|
|
36
32
|
"@pinnacle0/devtool-util": "1.1.4",
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export declare class RegExpUtil {
|
|
2
2
|
static fileExtension(...extensions: [string, ...string[]]): RegExp;
|
|
3
|
-
static
|
|
3
|
+
static webpackExclude({ nonES5Module }: {
|
|
4
|
+
nonES5Module: string[];
|
|
5
|
+
}): RegExp;
|
|
4
6
|
private static validateFileExtension;
|
|
5
7
|
}
|
|
@@ -10,8 +10,8 @@ class RegExpUtil {
|
|
|
10
10
|
}
|
|
11
11
|
return new RegExp(`(${escapedExtensions.join("|")})$`);
|
|
12
12
|
}
|
|
13
|
-
static
|
|
14
|
-
const escapedPatterns =
|
|
13
|
+
static webpackExclude({ nonES5Module }) {
|
|
14
|
+
const escapedPatterns = nonES5Module.filter(_ => _.length > 0).map(_ => _.replace("/", "\\/") + "(\\/|$)");
|
|
15
15
|
if (escapedPatterns.length < 1) {
|
|
16
16
|
return /node_modules/;
|
|
17
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RegExpUtil.js","sourceRoot":"","sources":["../../../../src/WebpackConfigGenerator/Rule/RegExpUtil.ts"],"names":[],"mappings":";;;AAAA,MAAa,UAAU;IACnB,MAAM,CAAC,aAAa,CAAC,GAAG,UAAiC;QACrD,MAAM,iBAAiB,GAAa,EAAE,CAAC;QACvC,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE;YAC1B,UAAU,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;YACtC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAA,IAAI,CAAC,CAAC,CAAC;SAC9D;QACD,OAAO,IAAI,MAAM,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"RegExpUtil.js","sourceRoot":"","sources":["../../../../src/WebpackConfigGenerator/Rule/RegExpUtil.ts"],"names":[],"mappings":";;;AAAA,MAAa,UAAU;IACnB,MAAM,CAAC,aAAa,CAAC,GAAG,UAAiC;QACrD,MAAM,iBAAiB,GAAa,EAAE,CAAC;QACvC,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE;YAC1B,UAAU,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;YACtC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAA,IAAI,CAAC,CAAC,CAAC;SAC9D;QACD,OAAO,IAAI,MAAM,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,EAAC,YAAY,EAA2B;QAC1D,MAAM,eAAe,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,SAAS,CAAC,CAAC;QAC3G,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;YAC5B,OAAO,cAAc,CAAC;SACzB;QACD,OAAO,IAAI,MAAM,CAAC,qBAAqB,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACzE,CAAC;IAEO,MAAM,CAAC,qBAAqB,CAAC,GAAW;QAC5C,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YACnB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;SACjD;aAAM,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YACvB,MAAM,IAAI,KAAK,CAAC,mDAAmD,GAAG,IAAI,CAAC,CAAC;SAC/E;aAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YACtC,MAAM,IAAI,KAAK,CAAC,2FAA2F,GAAG,IAAI,CAAC,CAAC;SACvH;IACL,CAAC;CACJ;AA3BD,gCA2BC"}
|
|
@@ -29,7 +29,7 @@ function nonES5({ nonES5Module }) {
|
|
|
29
29
|
return {
|
|
30
30
|
test: RegExpUtil_1.RegExpUtil.fileExtension(".js", ".jsx"),
|
|
31
31
|
use: [swcLoader],
|
|
32
|
-
exclude: RegExpUtil_1.RegExpUtil.
|
|
32
|
+
exclude: RegExpUtil_1.RegExpUtil.webpackExclude({ nonES5Module }),
|
|
33
33
|
};
|
|
34
34
|
}
|
|
35
35
|
exports.nonES5 = nonES5;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"non-es5.rule.js","sourceRoot":"","sources":["../../../../src/WebpackConfigGenerator/Rule/non-es5.rule.ts"],"names":[],"mappings":";;;AACA,6CAAwC;AAMxC;;;GAGG;AACH,SAAgB,MAAM,CAAC,EAAC,YAAY,EAAO;IACvC,MAAM,SAAS,GAA2B;QACtC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC;QACrC,OAAO,EAAE;YACL,GAAG,EAAE;gBACD,MAAM,EAAE,KAAK;gBACb,MAAM,EAAE;oBACJ,MAAM,EAAE,YAAY;oBACpB,UAAU,EAAE,IAAI;iBACnB;gBACD,SAAS,EAAE;oBACP,KAAK,EAAE;wBACH,OAAO,EAAE,SAAS;qBACrB;oBACD,eAAe,EAAE,IAAI;oBACrB,iBAAiB,EAAE,IAAI;iBAC1B;aACJ;SACJ;KACJ,CAAC;IAEF,OAAO;QACH,IAAI,EAAE,uBAAU,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC;QAC7C,GAAG,EAAE,CAAC,SAAS,CAAC;QAChB,OAAO,EAAE,uBAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"non-es5.rule.js","sourceRoot":"","sources":["../../../../src/WebpackConfigGenerator/Rule/non-es5.rule.ts"],"names":[],"mappings":";;;AACA,6CAAwC;AAMxC;;;GAGG;AACH,SAAgB,MAAM,CAAC,EAAC,YAAY,EAAO;IACvC,MAAM,SAAS,GAA2B;QACtC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC;QACrC,OAAO,EAAE;YACL,GAAG,EAAE;gBACD,MAAM,EAAE,KAAK;gBACb,MAAM,EAAE;oBACJ,MAAM,EAAE,YAAY;oBACpB,UAAU,EAAE,IAAI;iBACnB;gBACD,SAAS,EAAE;oBACP,KAAK,EAAE;wBACH,OAAO,EAAE,SAAS;qBACrB;oBACD,eAAe,EAAE,IAAI;oBACrB,iBAAiB,EAAE,IAAI;iBAC1B;aACJ;SACJ;KACJ,CAAC;IAEF,OAAO;QACH,IAAI,EAAE,uBAAU,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC;QAC7C,GAAG,EAAE,CAAC,SAAS,CAAC;QAChB,OAAO,EAAE,uBAAU,CAAC,cAAc,CAAC,EAAC,YAAY,EAAC,CAAC;KACrD,CAAC;AACN,CAAC;AA1BD,wBA0BC"}
|
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.tsRule = void 0;
|
|
7
|
-
const path_1 = __importDefault(require("path"));
|
|
8
4
|
const RegExpUtil_1 = require("./RegExpUtil");
|
|
9
5
|
/**
|
|
10
6
|
* Handles dependency requests to typescript files
|
|
@@ -18,17 +14,6 @@ const RegExpUtil_1 = require("./RegExpUtil");
|
|
|
18
14
|
* @see https://github.com/pmmmwh/react-refresh-webpack-plugin
|
|
19
15
|
*/
|
|
20
16
|
function tsRule({ fastRefresh }) {
|
|
21
|
-
const babelLoader = {
|
|
22
|
-
loader: require.resolve("babel-loader"),
|
|
23
|
-
options: {
|
|
24
|
-
presets: ["@babel/preset-env", "@babel/preset-react", "@babel/preset-typescript"].map(_ => require.resolve(_)),
|
|
25
|
-
plugins: [
|
|
26
|
-
[require.resolve("@babel/plugin-proposal-decorators"), { version: "legacy" }],
|
|
27
|
-
require.resolve(path_1.default.join(__dirname, "./core-fe-hmr-babel-plugin")),
|
|
28
|
-
require.resolve("react-refresh/babel"),
|
|
29
|
-
],
|
|
30
|
-
},
|
|
31
|
-
};
|
|
32
17
|
const swcLoader = {
|
|
33
18
|
loader: require.resolve("swc-loader"),
|
|
34
19
|
options: {
|
|
@@ -41,16 +26,20 @@ function tsRule({ fastRefresh }) {
|
|
|
41
26
|
transform: {
|
|
42
27
|
react: {
|
|
43
28
|
runtime: "classic",
|
|
29
|
+
refresh: fastRefresh,
|
|
44
30
|
},
|
|
45
31
|
legacyDecorator: true,
|
|
46
32
|
decoratorMetadata: true,
|
|
47
33
|
},
|
|
34
|
+
experimental: {
|
|
35
|
+
plugins: [[require.resolve("swc-plugin-core-fe-hmr"), {}]],
|
|
36
|
+
},
|
|
48
37
|
},
|
|
49
38
|
},
|
|
50
39
|
};
|
|
51
40
|
return {
|
|
52
41
|
test: RegExpUtil_1.RegExpUtil.fileExtension(".ts", ".tsx"),
|
|
53
|
-
use:
|
|
42
|
+
use: [swcLoader],
|
|
54
43
|
};
|
|
55
44
|
}
|
|
56
45
|
exports.tsRule = tsRule;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ts.rule.js","sourceRoot":"","sources":["../../../../src/WebpackConfigGenerator/Rule/ts.rule.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ts.rule.js","sourceRoot":"","sources":["../../../../src/WebpackConfigGenerator/Rule/ts.rule.ts"],"names":[],"mappings":";;;AACA,6CAAwC;AAMxC;;;;;;;;;;GAUG;AACH,SAAgB,MAAM,CAAC,EAAC,WAAW,EAAO;IACtC,MAAM,SAAS,GAA2B;QACtC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC;QACrC,OAAO,EAAE;YACL,GAAG,EAAE;gBACD,MAAM,EAAE,KAAK;gBACb,MAAM,EAAE;oBACJ,MAAM,EAAE,YAAY;oBACpB,UAAU,EAAE,IAAI;iBACnB;gBACD,SAAS,EAAE;oBACP,KAAK,EAAE;wBACH,OAAO,EAAE,SAAS;wBAClB,OAAO,EAAE,WAAW;qBACvB;oBACD,eAAe,EAAE,IAAI;oBACrB,iBAAiB,EAAE,IAAI;iBAC1B;gBACD,YAAY,EAAE;oBACV,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,wBAAwB,CAAC,EAAE,EAAE,CAAC,CAAC;iBAC7D;aACJ;SACJ;KACJ,CAAC;IAEF,OAAO;QACH,IAAI,EAAE,uBAAU,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC;QAC7C,GAAG,EAAE,CAAC,SAAS,CAAC;KACnB,CAAC;AACN,CAAC;AA7BD,wBA6BC"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type * as babel from "@babel/core";
|
|
2
|
-
interface State extends Pick<babel.PluginPass, "file" | "key" | "opts" | "cwd" | "filename"> {
|
|
3
|
-
hasInjectedDeclineWebpackHMRNode: boolean;
|
|
4
|
-
}
|
|
5
|
-
/**
|
|
6
|
-
* Injects `if (module.hot) module.hot.decline()` code snippet in files that contains "core-fe" Module classes.
|
|
7
|
-
*
|
|
8
|
-
* This tells webpack HMR to force refresh the browser when a file containing "core-fe" Module classes is changed,
|
|
9
|
-
* otherwise react loses reference of the MainComponent created by `ModuleProxy` in "core-fe"
|
|
10
|
-
* and throws a runtime error during development (which is bad for developer experience).
|
|
11
|
-
*/
|
|
12
|
-
export default function ({ types: t }: typeof babel): babel.PluginObj<State>;
|
|
13
|
-
export {};
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
/**
|
|
4
|
-
* Injects `if (module.hot) module.hot.decline()` code snippet in files that contains "core-fe" Module classes.
|
|
5
|
-
*
|
|
6
|
-
* This tells webpack HMR to force refresh the browser when a file containing "core-fe" Module classes is changed,
|
|
7
|
-
* otherwise react loses reference of the MainComponent created by `ModuleProxy` in "core-fe"
|
|
8
|
-
* and throws a runtime error during development (which is bad for developer experience).
|
|
9
|
-
*/
|
|
10
|
-
function default_1({ types: t }) {
|
|
11
|
-
return {
|
|
12
|
-
visitor: {
|
|
13
|
-
ImportDeclaration(path, state) {
|
|
14
|
-
if (state.hasInjectedDeclineWebpackHMRNode) {
|
|
15
|
-
return;
|
|
16
|
-
}
|
|
17
|
-
const { node: { source: { value: importSource }, specifiers: importSpecifiers, }, } = path;
|
|
18
|
-
if (importSource !== "core-fe") {
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
|
-
if (!hasImportSpecifierOfIdentifierModule(t, importSpecifiers)) {
|
|
22
|
-
return;
|
|
23
|
-
}
|
|
24
|
-
// We now know the TS/JS file has included `Module`, inject the code snippet
|
|
25
|
-
const programPath = path.findParent(parentPath => t.isProgram(parentPath.node));
|
|
26
|
-
// prettier-ignore
|
|
27
|
-
const declineWebpackHMRNode = t.ifStatement(t.memberExpression(t.identifier("module"), t.identifier("hot")), t.expressionStatement(t.callExpression(t.memberExpression(t.memberExpression(t.identifier("module"), t.identifier("hot")), t.identifier("decline")), [])));
|
|
28
|
-
// Append `if (module.hot) module.hot.decline()` to end of program body
|
|
29
|
-
programPath.pushContainer("body", declineWebpackHMRNode);
|
|
30
|
-
// We only need to inject the code snippet once per file, mark as injected
|
|
31
|
-
state.hasInjectedDeclineWebpackHMRNode = true;
|
|
32
|
-
},
|
|
33
|
-
},
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
exports.default = default_1;
|
|
37
|
-
/**
|
|
38
|
-
* @param t `babel.types`
|
|
39
|
-
* @param importSpecifiers The "specifier" property of a `babel.types.ImportDeclaration` node
|
|
40
|
-
* @returns true if the import declaration includes the identifier `Module`
|
|
41
|
-
*/
|
|
42
|
-
function hasImportSpecifierOfIdentifierModule(t, importSpecifiers) {
|
|
43
|
-
const specifier = importSpecifiers.find(specifier => {
|
|
44
|
-
// Check if it is one of:
|
|
45
|
-
// -> `import { <IMPORT_SPECIFIER_NODE> } from "core-fe";`
|
|
46
|
-
// -> `import DontCareDefaultIdent, { <IMPORT_SPECIFIER_NODE> } from "core-fe";`
|
|
47
|
-
if (t.isImportSpecifier(specifier)) {
|
|
48
|
-
const importedSpecifier = specifier.imported;
|
|
49
|
-
return t.isIdentifier(importedSpecifier) && importedSpecifier.name === "Module";
|
|
50
|
-
}
|
|
51
|
-
// Check if it is:
|
|
52
|
-
// -> `import * as <IMPORT_NAMESPACE_SPECIFIER_NODE> from "core-fe";`
|
|
53
|
-
if (t.isImportNamespaceSpecifier(specifier)) {
|
|
54
|
-
// Not worth the effort to check if <IMPORT_NAMESPACE_SPECIFIER_NODE>.Module is used
|
|
55
|
-
// Maybe enforce "core-fe" should not be imported with a namespace with an ESLint rule?
|
|
56
|
-
return true;
|
|
57
|
-
}
|
|
58
|
-
return false;
|
|
59
|
-
});
|
|
60
|
-
return specifier !== undefined;
|
|
61
|
-
}
|
|
62
|
-
//# sourceMappingURL=core-fe-hmr-babel-plugin.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"core-fe-hmr-babel-plugin.js","sourceRoot":"","sources":["../../../../src/WebpackConfigGenerator/Rule/core-fe-hmr-babel-plugin.ts"],"names":[],"mappings":";;AAMA;;;;;;GAMG;AACH,mBAAyB,EAAC,KAAK,EAAE,CAAC,EAAe;IAC7C,OAAO;QACH,OAAO,EAAE;YACL,iBAAiB,CAAC,IAAI,EAAE,KAAK;gBACzB,IAAI,KAAK,CAAC,gCAAgC,EAAE;oBACxC,OAAO;iBACV;gBAED,MAAM,EACF,IAAI,EAAE,EACF,MAAM,EAAE,EAAC,KAAK,EAAE,YAAY,EAAC,EAC7B,UAAU,EAAE,gBAAgB,GAC/B,GACJ,GAAG,IAAI,CAAC;gBAET,IAAI,YAAY,KAAK,SAAS,EAAE;oBAC5B,OAAO;iBACV;gBAED,IAAI,CAAC,oCAAoC,CAAC,CAAC,EAAE,gBAAgB,CAAC,EAAE;oBAC5D,OAAO;iBACV;gBAED,4EAA4E;gBAC5E,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAyC,CAAC;gBAExH,kBAAkB;gBAClB,MAAM,qBAAqB,GAAG,CAAC,CAAC,WAAW,CACvC,CAAC,CAAC,gBAAgB,CACd,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,EACtB,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CACtB,EACD,CAAC,CAAC,mBAAmB,CACjB,CAAC,CAAC,cAAc,CACZ,CAAC,CAAC,gBAAgB,CACd,CAAC,CAAC,gBAAgB,CACd,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,EACtB,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CACtB,EACD,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAC1B,EACD,EAAE,CACL,CACJ,CACJ,CAAC;gBAEF,uEAAuE;gBACvE,WAAW,CAAC,aAAa,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;gBAEzD,0EAA0E;gBAC1E,KAAK,CAAC,gCAAgC,GAAG,IAAI,CAAC;YAClD,CAAC;SACJ;KACJ,CAAC;AACN,CAAC;AAtDD,4BAsDC;AAED;;;;GAIG;AACH,SAAS,oCAAoC,CAAC,CAAqB,EAAE,gBAA6D;IAC9H,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;QAChD,yBAAyB;QACzB,0DAA0D;QAC1D,gFAAgF;QAChF,IAAI,CAAC,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE;YAChC,MAAM,iBAAiB,GAAG,SAAS,CAAC,QAAQ,CAAC;YAC7C,OAAO,CAAC,CAAC,YAAY,CAAC,iBAAiB,CAAC,IAAI,iBAAiB,CAAC,IAAI,KAAK,QAAQ,CAAC;SACnF;QAED,kBAAkB;QAClB,qEAAqE;QACrE,IAAI,CAAC,CAAC,0BAA0B,CAAC,SAAS,CAAC,EAAE;YACzC,oFAAoF;YACpF,uFAAuF;YACvF,OAAO,IAAI,CAAC;SACf;QAED,OAAO,KAAK,CAAC;IACjB,CAAC,CAAC,CAAC;IACH,OAAO,SAAS,KAAK,SAAS,CAAC;AACnC,CAAC"}
|