Befor generating
This commit is contained in:
1 parent
3383f4bf4a
commit
1aa1b5f625
6756 files changed
+649946
-1
No files matched your search
Generated
Vendored
+30
@@ -0,0 +1,30 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.FEATURES = void 0;
|
||||
exports.enableFeature = enableFeature;
|
||||
exports.featuresKey = void 0;
|
||||
exports.hasFeature = hasFeature;
|
||||
exports.runtimeKey = void 0;
|
||||
const FEATURES = exports.FEATURES = Object.freeze({
|
||||
unicodeFlag: 1 << 0,
|
||||
dotAllFlag: 1 << 1,
|
||||
unicodePropertyEscape: 1 << 2,
|
||||
namedCaptureGroups: 1 << 3,
|
||||
unicodeSetsFlag_syntax: 1 << 4,
|
||||
unicodeSetsFlag: 1 << 5,
|
||||
duplicateNamedCaptureGroups: 1 << 6,
|
||||
modifiers: 1 << 7
|
||||
});
|
||||
const featuresKey = exports.featuresKey = "@babel/plugin-regexp-features/featuresKey";
|
||||
const runtimeKey = exports.runtimeKey = "@babel/plugin-regexp-features/runtimeKey";
|
||||
function enableFeature(features, feature) {
|
||||
return features | feature;
|
||||
}
|
||||
function hasFeature(features, feature) {
|
||||
return !!(features & feature);
|
||||
}
|
||||
|
||||
//# sourceMappingURL=features.js.map
|
||||
Generated
Vendored
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"names":["FEATURES","exports","Object","freeze","unicodeFlag","dotAllFlag","unicodePropertyEscape","namedCaptureGroups","unicodeSetsFlag_syntax","unicodeSetsFlag","duplicateNamedCaptureGroups","modifiers","featuresKey","runtimeKey","enableFeature","features","feature","hasFeature"],"sources":["../src/features.ts"],"sourcesContent":["export const FEATURES = Object.freeze({\n unicodeFlag: 1 << 0,\n dotAllFlag: 1 << 1,\n unicodePropertyEscape: 1 << 2,\n namedCaptureGroups: 1 << 3,\n // Not used, for backward compatibility with syntax-unicode-sets-regex\n unicodeSetsFlag_syntax: 1 << 4,\n unicodeSetsFlag: 1 << 5,\n duplicateNamedCaptureGroups: 1 << 6,\n modifiers: 1 << 7,\n});\n\n// We can't use a symbol because this needs to always be the same, even if\n// this package isn't deduped by npm. e.g.\n// - node_modules/\n// - @babel/plugin-regexp-features\n// - @babel/plugin-transform-unicode-property-regex\n// - node_modules\n// - @babel-plugin-regexp-features\nexport const featuresKey = \"@babel/plugin-regexp-features/featuresKey\";\nexport const runtimeKey = \"@babel/plugin-regexp-features/runtimeKey\";\n\ntype FeatureType = (typeof FEATURES)[keyof typeof FEATURES];\n\nexport function enableFeature(features: number, feature: FeatureType): number {\n return features | feature;\n}\n\nexport function hasFeature(features: number, feature: FeatureType) {\n return !!(features & feature);\n}\n"],"mappings":";;;;;;;;;;AAAO,MAAMA,QAAQ,GAAAC,OAAA,CAAAD,QAAA,GAAGE,MAAM,CAACC,MAAM,CAAC;EACpCC,WAAW,EAAE,CAAC,IAAI,CAAC;EACnBC,UAAU,EAAE,CAAC,IAAI,CAAC;EAClBC,qBAAqB,EAAE,CAAC,IAAI,CAAC;EAC7BC,kBAAkB,EAAE,CAAC,IAAI,CAAC;EAE1BC,sBAAsB,EAAE,CAAC,IAAI,CAAC;EAC9BC,eAAe,EAAE,CAAC,IAAI,CAAC;EACvBC,2BAA2B,EAAE,CAAC,IAAI,CAAC;EACnCC,SAAS,EAAE,CAAC,IAAI;AAClB,CAAC,CAAC;AASK,MAAMC,WAAW,GAAAX,OAAA,CAAAW,WAAA,GAAG,2CAA2C;AAC/D,MAAMC,UAAU,GAAAZ,OAAA,CAAAY,UAAA,GAAG,0CAA0C;AAI7D,SAASC,aAAaA,CAACC,QAAgB,EAAEC,OAAoB,EAAU;EAC5E,OAAOD,QAAQ,GAAGC,OAAO;AAC3B;AAEO,SAASC,UAAUA,CAACF,QAAgB,EAAEC,OAAoB,EAAE;EACjE,OAAO,CAAC,EAAED,QAAQ,GAAGC,OAAO,CAAC;AAC/B","ignoreList":[]}
|
||||
Generated
Vendored
+114
@@ -0,0 +1,114 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.createRegExpFeaturePlugin = createRegExpFeaturePlugin;
|
||||
var _regexpuCore = require("regexpu-core");
|
||||
var _core = require("@babel/core");
|
||||
var _helperAnnotateAsPure = require("@babel/helper-annotate-as-pure");
|
||||
var _semver = require("semver");
|
||||
var _features = require("./features.js");
|
||||
var _util = require("./util.js");
|
||||
const versionKey = "@babel/plugin-regexp-features/version";
|
||||
function createRegExpFeaturePlugin({
|
||||
name,
|
||||
feature,
|
||||
options = {},
|
||||
manipulateOptions = () => {}
|
||||
}) {
|
||||
return {
|
||||
name,
|
||||
manipulateOptions,
|
||||
pre() {
|
||||
var _file$get;
|
||||
const {
|
||||
file
|
||||
} = this;
|
||||
const features = (_file$get = file.get(_features.featuresKey)) != null ? _file$get : 0;
|
||||
let newFeatures = (0, _features.enableFeature)(features, _features.FEATURES[feature]);
|
||||
const {
|
||||
useUnicodeFlag,
|
||||
runtime
|
||||
} = options;
|
||||
if (useUnicodeFlag === false) {
|
||||
newFeatures = (0, _features.enableFeature)(newFeatures, _features.FEATURES.unicodeFlag);
|
||||
}
|
||||
if (newFeatures !== features) {
|
||||
file.set(_features.featuresKey, newFeatures);
|
||||
}
|
||||
if (runtime !== undefined) {
|
||||
if (file.has(_features.runtimeKey) && file.get(_features.runtimeKey) !== runtime && (0, _features.hasFeature)(newFeatures, _features.FEATURES.duplicateNamedCaptureGroups)) {
|
||||
throw new Error(`The 'runtime' option must be the same for ` + `'@babel/plugin-transform-named-capturing-groups-regex' and ` + `'@babel/plugin-transform-duplicate-named-capturing-groups-regex'.`);
|
||||
}
|
||||
if (feature === "namedCaptureGroups") {
|
||||
if (!runtime || !file.has(_features.runtimeKey)) file.set(_features.runtimeKey, runtime);
|
||||
} else {
|
||||
file.set(_features.runtimeKey, runtime);
|
||||
}
|
||||
}
|
||||
if (typeof file.get(versionKey) === "number") {
|
||||
file.set(versionKey, "7.29.7");
|
||||
return;
|
||||
}
|
||||
if (!file.get(versionKey) || _semver.lt(file.get(versionKey), "7.29.7")) {
|
||||
file.set(versionKey, "7.29.7");
|
||||
}
|
||||
},
|
||||
visitor: {
|
||||
RegExpLiteral(path) {
|
||||
var _file$get2;
|
||||
const {
|
||||
node
|
||||
} = path;
|
||||
const {
|
||||
file
|
||||
} = this;
|
||||
const features = file.get(_features.featuresKey);
|
||||
const runtime = (_file$get2 = file.get(_features.runtimeKey)) != null ? _file$get2 : true;
|
||||
const regexpuOptions = (0, _util.generateRegexpuOptions)(node.pattern, features);
|
||||
if ((0, _util.canSkipRegexpu)(node, regexpuOptions)) {
|
||||
return;
|
||||
}
|
||||
const namedCaptureGroups = {
|
||||
__proto__: null
|
||||
};
|
||||
if (regexpuOptions.namedGroups === "transform") {
|
||||
regexpuOptions.onNamedGroup = (name, index) => {
|
||||
const prev = namedCaptureGroups[name];
|
||||
if (typeof prev === "number") {
|
||||
namedCaptureGroups[name] = [prev, index];
|
||||
} else if (Array.isArray(prev)) {
|
||||
prev.push(index);
|
||||
} else {
|
||||
namedCaptureGroups[name] = index;
|
||||
}
|
||||
};
|
||||
}
|
||||
let newFlags;
|
||||
if (regexpuOptions.modifiers === "transform") {
|
||||
regexpuOptions.onNewFlags = flags => {
|
||||
newFlags = flags;
|
||||
};
|
||||
}
|
||||
node.pattern = _regexpuCore(node.pattern, node.flags, regexpuOptions);
|
||||
if (regexpuOptions.namedGroups === "transform" && Object.keys(namedCaptureGroups).length > 0 && runtime && !isRegExpTest(path)) {
|
||||
const call = _core.types.callExpression(this.addHelper("wrapRegExp"), [node, _core.types.valueToNode(namedCaptureGroups)]);
|
||||
(0, _helperAnnotateAsPure.default)(call);
|
||||
path.replaceWith(call);
|
||||
}
|
||||
node.flags = (0, _util.transformFlags)(regexpuOptions, newFlags != null ? newFlags : node.flags);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
function isRegExpTest(path) {
|
||||
return path.parentPath.isMemberExpression({
|
||||
object: path.node,
|
||||
computed: false
|
||||
}) && path.parentPath.get("property").isIdentifier({
|
||||
name: "test"
|
||||
});
|
||||
}
|
||||
|
||||
//# sourceMappingURL=index.js.map
|
||||
Generated
Vendored
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"names":["_regexpuCore","require","_core","_helperAnnotateAsPure","_semver","_features","_util","versionKey","createRegExpFeaturePlugin","name","feature","options","manipulateOptions","pre","_file$get","file","features","get","featuresKey","newFeatures","enableFeature","FEATURES","useUnicodeFlag","runtime","unicodeFlag","set","undefined","has","runtimeKey","hasFeature","duplicateNamedCaptureGroups","Error","semver","lt","visitor","RegExpLiteral","path","_file$get2","node","regexpuOptions","generateRegexpuOptions","pattern","canSkipRegexpu","namedCaptureGroups","__proto__","namedGroups","onNamedGroup","index","prev","Array","isArray","push","newFlags","modifiers","onNewFlags","flags","rewritePattern","Object","keys","length","isRegExpTest","call","t","callExpression","addHelper","valueToNode","annotateAsPure","replaceWith","transformFlags","parentPath","isMemberExpression","object","computed","isIdentifier"],"sources":["../src/index.ts"],"sourcesContent":["import rewritePattern from \"regexpu-core\";\nimport { types as t, type PluginObject, type NodePath } from \"@babel/core\";\nimport annotateAsPure from \"@babel/helper-annotate-as-pure\";\n\nimport semver from \"semver\";\n\nimport {\n featuresKey,\n FEATURES,\n enableFeature,\n runtimeKey,\n hasFeature,\n} from \"./features.ts\";\nimport {\n generateRegexpuOptions,\n canSkipRegexpu,\n transformFlags,\n} from \"./util.ts\";\n\nconst versionKey = \"@babel/plugin-regexp-features/version\";\n\nexport interface Options {\n name: string;\n feature: keyof typeof FEATURES;\n options?: {\n useUnicodeFlag?: boolean;\n runtime?: boolean;\n };\n manipulateOptions?: PluginObject[\"manipulateOptions\"];\n}\n\nexport function createRegExpFeaturePlugin({\n name,\n feature,\n options = {},\n manipulateOptions = () => {},\n}: Options): PluginObject {\n return {\n name,\n\n manipulateOptions,\n\n pre() {\n const { file } = this;\n const features = file.get(featuresKey) ?? 0;\n let newFeatures = enableFeature(features, FEATURES[feature]);\n\n const { useUnicodeFlag, runtime } = options;\n if (useUnicodeFlag === false) {\n newFeatures = enableFeature(newFeatures, FEATURES.unicodeFlag);\n }\n if (newFeatures !== features) {\n file.set(featuresKey, newFeatures);\n }\n\n if (runtime !== undefined) {\n if (\n file.has(runtimeKey) &&\n file.get(runtimeKey) !== runtime &&\n (process.env.BABEL_8_BREAKING ||\n // This check. Is necessary because in Babel 7 we allow multiple\n // copies of transform-named-capturing-groups-regex with\n // conflicting 'runtime' options.\n hasFeature(newFeatures, FEATURES.duplicateNamedCaptureGroups))\n ) {\n throw new Error(\n `The 'runtime' option must be the same for ` +\n `'@babel/plugin-transform-named-capturing-groups-regex' and ` +\n `'@babel/plugin-transform-duplicate-named-capturing-groups-regex'.`,\n );\n }\n\n if (process.env.BABEL_8_BREAKING) {\n file.set(runtimeKey, runtime);\n } else if (\n // This check. Is necessary because in Babel 7 we allow multiple\n // copies of transform-named-capturing-groups-regex with\n // conflicting 'runtime' options.\n feature === \"namedCaptureGroups\"\n ) {\n if (!runtime || !file.has(runtimeKey)) file.set(runtimeKey, runtime);\n } else {\n file.set(runtimeKey, runtime);\n }\n }\n\n if (!process.env.BABEL_8_BREAKING) {\n // Until 7.21.4, we used to encode the version as a number.\n // If file.get(versionKey) is a number, it has thus been\n // set by an older version of this plugin.\n if (typeof file.get(versionKey) === \"number\") {\n file.set(versionKey, PACKAGE_JSON.version);\n return;\n }\n }\n if (\n !file.get(versionKey) ||\n semver.lt(file.get(versionKey), PACKAGE_JSON.version)\n ) {\n file.set(versionKey, PACKAGE_JSON.version);\n }\n },\n\n visitor: {\n RegExpLiteral(path) {\n const { node } = path;\n const { file } = this;\n const features = file.get(featuresKey);\n const runtime = file.get(runtimeKey) ?? true;\n\n const regexpuOptions = generateRegexpuOptions(node.pattern, features);\n if (canSkipRegexpu(node, regexpuOptions)) {\n return;\n }\n\n const namedCaptureGroups: Record<string, number | number[]> = {\n __proto__: null,\n };\n if (regexpuOptions.namedGroups === \"transform\") {\n regexpuOptions.onNamedGroup = (name, index) => {\n const prev = namedCaptureGroups[name];\n if (typeof prev === \"number\") {\n namedCaptureGroups[name] = [prev, index];\n } else if (Array.isArray(prev)) {\n Line truncated
|
||||
Generated
Vendored
+71
@@ -0,0 +1,71 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.canSkipRegexpu = canSkipRegexpu;
|
||||
exports.generateRegexpuOptions = generateRegexpuOptions;
|
||||
exports.transformFlags = transformFlags;
|
||||
var _features = require("./features.js");
|
||||
function generateRegexpuOptions(pattern, toTransform) {
|
||||
const feat = name => {
|
||||
return (0, _features.hasFeature)(toTransform, _features.FEATURES[name]) ? "transform" : false;
|
||||
};
|
||||
const featDuplicateNamedGroups = () => {
|
||||
if (!feat("duplicateNamedCaptureGroups")) return false;
|
||||
const regex = /\(\?<([^>]+)(>|$)/g;
|
||||
const seen = new Set();
|
||||
for (let match; (match = regex.exec(pattern)) && match[2]; seen.add(match[1])) {
|
||||
if (seen.has(match[1])) return "transform";
|
||||
}
|
||||
return false;
|
||||
};
|
||||
return {
|
||||
unicodeFlag: feat("unicodeFlag"),
|
||||
unicodeSetsFlag: feat("unicodeSetsFlag"),
|
||||
dotAllFlag: feat("dotAllFlag"),
|
||||
unicodePropertyEscapes: feat("unicodePropertyEscape"),
|
||||
namedGroups: feat("namedCaptureGroups") || featDuplicateNamedGroups(),
|
||||
onNamedGroup: () => {},
|
||||
modifiers: feat("modifiers")
|
||||
};
|
||||
}
|
||||
function canSkipRegexpu(node, options) {
|
||||
const {
|
||||
flags,
|
||||
pattern
|
||||
} = node;
|
||||
if (flags.includes("v")) {
|
||||
if (options.unicodeSetsFlag === "transform") return false;
|
||||
}
|
||||
if (flags.includes("u")) {
|
||||
if (options.unicodeFlag === "transform") return false;
|
||||
if (options.unicodePropertyEscapes === "transform" && /\\p\{/i.test(pattern)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (flags.includes("s")) {
|
||||
if (options.dotAllFlag === "transform") return false;
|
||||
}
|
||||
if (options.namedGroups === "transform" && /\(\?<(?![=!])/.test(pattern)) {
|
||||
return false;
|
||||
}
|
||||
if (options.modifiers === "transform" && /\(\?[\w-]+:/.test(pattern)) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
function transformFlags(regexpuOptions, flags) {
|
||||
if (regexpuOptions.unicodeSetsFlag === "transform") {
|
||||
flags = flags.replace("v", "u");
|
||||
}
|
||||
if (regexpuOptions.unicodeFlag === "transform") {
|
||||
flags = flags.replace("u", "");
|
||||
}
|
||||
if (regexpuOptions.dotAllFlag === "transform") {
|
||||
flags = flags.replace("s", "");
|
||||
}
|
||||
return flags;
|
||||
}
|
||||
|
||||
//# sourceMappingURL=util.js.map
|
||||
Generated
Vendored
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"names":["_features","require","generateRegexpuOptions","pattern","toTransform","feat","name","hasFeature","FEATURES","featDuplicateNamedGroups","regex","seen","Set","match","exec","add","has","unicodeFlag","unicodeSetsFlag","dotAllFlag","unicodePropertyEscapes","namedGroups","onNamedGroup","modifiers","canSkipRegexpu","node","options","flags","includes","test","transformFlags","regexpuOptions","replace"],"sources":["../src/util.ts"],"sourcesContent":["import type { types as t } from \"@babel/core\";\nimport { FEATURES, hasFeature } from \"./features.ts\";\n\nimport type { RegexpuOptions } from \"regexpu-core\";\n\nexport function generateRegexpuOptions(\n pattern: string,\n toTransform: number,\n): RegexpuOptions {\n const feat = (name: keyof typeof FEATURES) => {\n return hasFeature(toTransform, FEATURES[name]) ? \"transform\" : false;\n };\n\n const featDuplicateNamedGroups = (): \"transform\" | false => {\n if (!feat(\"duplicateNamedCaptureGroups\")) return false;\n\n // This can return false positive, for example for /\\(?<a>\\)/.\n // However, it's such a rare occurrence that it's ok to compile\n // the regexp even if we only need to compile regexps with\n // duplicate named capturing groups.\n // The $ is to exit early for malicious input such as \\(?<\\(?<\\(?<...\n const regex = /\\(\\?<([^>]+)(>|$)/g;\n const seen = new Set();\n for (\n let match;\n (match = regex.exec(pattern)) && match[2];\n seen.add(match[1])\n ) {\n if (seen.has(match[1])) return \"transform\";\n }\n return false;\n };\n\n return {\n unicodeFlag: feat(\"unicodeFlag\"),\n unicodeSetsFlag: feat(\"unicodeSetsFlag\"),\n dotAllFlag: feat(\"dotAllFlag\"),\n unicodePropertyEscapes: feat(\"unicodePropertyEscape\"),\n namedGroups: feat(\"namedCaptureGroups\") || featDuplicateNamedGroups(),\n onNamedGroup: () => {},\n modifiers: feat(\"modifiers\"),\n };\n}\n\nexport function canSkipRegexpu(\n node: t.RegExpLiteral,\n options: RegexpuOptions,\n): boolean {\n const { flags, pattern } = node;\n\n if (flags.includes(\"v\")) {\n if (options.unicodeSetsFlag === \"transform\") return false;\n }\n\n if (flags.includes(\"u\")) {\n if (options.unicodeFlag === \"transform\") return false;\n if (\n options.unicodePropertyEscapes === \"transform\" &&\n /\\\\p\\{/i.test(pattern)\n ) {\n return false;\n }\n }\n\n if (flags.includes(\"s\")) {\n if (options.dotAllFlag === \"transform\") return false;\n }\n\n if (options.namedGroups === \"transform\" && /\\(\\?<(?![=!])/.test(pattern)) {\n return false;\n }\n\n if (options.modifiers === \"transform\" && /\\(\\?[\\w-]+:/.test(pattern)) {\n return false;\n }\n\n return true;\n}\n\nexport function transformFlags(regexpuOptions: RegexpuOptions, flags: string) {\n if (regexpuOptions.unicodeSetsFlag === \"transform\") {\n flags = flags.replace(\"v\", \"u\");\n }\n if (regexpuOptions.unicodeFlag === \"transform\") {\n flags = flags.replace(\"u\", \"\");\n }\n if (regexpuOptions.dotAllFlag === \"transform\") {\n flags = flags.replace(\"s\", \"\");\n }\n return flags;\n}\n"],"mappings":";;;;;;;;AACA,IAAAA,SAAA,GAAAC,OAAA;AAIO,SAASC,sBAAsBA,CACpCC,OAAe,EACfC,WAAmB,EACH;EAChB,MAAMC,IAAI,GAAIC,IAA2B,IAAK;IAC5C,OAAO,IAAAC,oBAAU,EAACH,WAAW,EAAEI,kBAAQ,CAACF,IAAI,CAAC,CAAC,GAAG,WAAW,GAAG,KAAK;EACtE,CAAC;EAED,MAAMG,wBAAwB,GAAGA,CAAA,KAA2B;IAC1D,IAAI,CAACJ,IAAI,CAAC,6BAA6B,CAAC,EAAE,OAAO,KAAK;IAOtD,MAAMK,KAAK,GAAG,oBAAoB;IAClC,MAAMC,IAAI,GAAG,IAAIC,GAAG,CAAC,CAAC;IACtB,KACE,IAAIC,KAAK,EACT,CAACA,KAAK,GAAGH,KAAK,CAACI,IAAI,CAACX,OAAO,CAAC,KAAKU,KAAK,CAAC,CAAC,CAAC,EACzCF,IAAI,CAACI,GAAG,CAACF,KAAK,CAAC,CAAC,CAAC,CAAC,EAClB;MACA,IAAIF,IAAI,CAACK,GAAG,CAACH,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,WAAW;IAC5C;IACA,OAAO,KAAK;EACd,CAAC;EAED,OAAO;IACLI,WAAW,EAAEZ,IAAI,CAAC,aAAa,CAAC;IAChCa,eAAe,EAAEb,IAAI,CAAC,iBAAiB,CAAC;IACxCc,UAAU,EAAEd,IAAI,CAAC,YAAY,CAAC;IAC9Be,sBAAsB,EAAEf,IAAI,CAAC,uBAAuB,CAAC;IACrDgB,WAAW,EAAEhB,IAAI,CAAC,oBAAoB,CAAC,IAAII,wBAAwB,CAAC,CAAC;IACrEa,YAAY,EAAEA,CAAA,KAAM,CAAC,CAAC;IACtBC,SAAS,EAAElB,IAAI,CAAC,WAAW;EAC7B,CAAC;AACH;AAEO,SAASmB,cAAcA,CAC5BC,IAAqB,EACrBC,OAAuB,EACd;EACT,MAAM;IAAEC,KAAK;IAAExB;EAAQ,CAAC,GAAGsB,IAAI;EAE/B,IAAIE,KAAK,CAACC,QAAQ,CAAC,GAAG,CAAC,EAAE;IACvB,IAAIF,OAAO,CAACR,eAAe,KAAK,WAAW,EAAE,OAAO,KAAK;EAC3D;EAEA,IAAIS,KAAK,CAACC,QAAQ,CAAC,GAAG,CAAC,EAAE;IACvB,IAAIF,OAAO,CAACT,WAAW,KAAK,WAAW,EAAE,OAAO,KAAK;IACrD,IACES,OAAO,CAACN,sBAAsB,KAAK,WAAW,IAC9C,QAAQ,CAACS,IAAI,CAAC1B,OAAO,CAAC,EACtB;MACA,OAAO,KAAK;IACd;EACF;EAEA,IAAIwB,KAAK,CAACC,QAAQ,CAAC,GAAG,CAAC,EAAE;IACvB,IAAIF,OAAO,CAACP,UAAU,KAAK,WAAW,EAAE,OAAO,KAAK;EACtD;EAEA,IAAIO,OAAO,CAACL,WAAW,KAAK,WAAW,IAAI,eAAe,CAACQ,IAAI,CAAC1B,OAAO,CAAC,EAAE;IACxE,OAAO,KAAK;EACd;EAEA,IAAIuB,OAAO,CAACH,SAAS,KAAK,WAAW,IAAI,aAAa,CAACM,IAAI,CAAC1B,OAAO,CAAC,EAAE;IACpE,OAAO,KAAK;EACd;EAEA,OAAO,IAAI;AACb;AAEO,SAAS2B,cAAcA,CAACC,cAA8B,EAAEJ,KAAa,EAAE;EAC5E,IAAII,cAAc,CAACb,eAAe,KAAK,WAAW,Line truncated
|
||||
Reference in new issue
Block a user