@fastkit/plugboy 0.2.7 → 1.0.0-next.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/README.md +355 -0
- package/dist/cli.d.mts +5 -0
- package/dist/cli.mjs +33 -128
- package/dist/cli.mjs.map +1 -1
- package/dist/combine-rules-CWp-M491.mjs +66 -0
- package/dist/combine-rules-CWp-M491.mjs.map +1 -0
- package/dist/dependencies/bundle-require.d.mts +1 -0
- package/dist/dependencies/bundle-require.mjs +3 -3
- package/dist/dependencies/cac.d.mts +1 -0
- package/dist/dependencies/cac.mjs +3 -3
- package/dist/dependencies/glob.d.mts +1 -0
- package/dist/dependencies/glob.mjs +3 -3
- package/dist/dependencies/inquirer.d.mts +1 -0
- package/dist/dependencies/inquirer.mjs +3 -3
- package/dist/dependencies/pkg-types.d.mts +1 -0
- package/dist/dependencies/pkg-types.mjs +3 -3
- package/dist/dependencies/sort-package-json.d.mts +2 -0
- package/dist/dependencies/sort-package-json.mjs +5 -4
- package/dist/dependencies/sort-package-json.mjs.map +1 -1
- package/dist/dependencies/tsdown.d.mts +1 -0
- package/dist/dependencies/tsdown.mjs +3 -0
- package/dist/optimize-layer-CK8NR_VC.mjs +58 -0
- package/dist/optimize-layer-CK8NR_VC.mjs.map +1 -0
- package/dist/optimize-media-Bxy27Cj7.mjs +86 -0
- package/dist/optimize-media-Bxy27Cj7.mjs.map +1 -0
- package/dist/plugboy.d.mts +6284 -0
- package/dist/plugboy.mjs +3 -103
- package/dist/runtime-utils.d.mts +28 -0
- package/dist/runtime-utils.mjs +94 -0
- package/dist/runtime-utils.mjs.map +1 -0
- package/dist/workspace-BqcryYAT.mjs +1391 -0
- package/dist/workspace-BqcryYAT.mjs.map +1 -0
- package/env.d.ts +0 -18
- package/package.json +21 -17
- package/dist/chunk-MN572VU2.mjs +0 -1616
- package/dist/chunk-MN572VU2.mjs.map +0 -1
- package/dist/cli.d.ts +0 -3
- package/dist/combine-rules-2CRG6D4B.mjs +0 -69
- package/dist/combine-rules-2CRG6D4B.mjs.map +0 -1
- package/dist/dependencies/bundle-require.d.ts +0 -7
- package/dist/dependencies/bundle-require.mjs.map +0 -1
- package/dist/dependencies/cac.d.ts +0 -1
- package/dist/dependencies/cac.mjs.map +0 -1
- package/dist/dependencies/esbuild.d.ts +0 -1
- package/dist/dependencies/esbuild.mjs +0 -3
- package/dist/dependencies/esbuild.mjs.map +0 -1
- package/dist/dependencies/glob.d.ts +0 -1
- package/dist/dependencies/glob.mjs.map +0 -1
- package/dist/dependencies/inquirer.d.ts +0 -1
- package/dist/dependencies/inquirer.mjs.map +0 -1
- package/dist/dependencies/pkg-types.d.ts +0 -1
- package/dist/dependencies/pkg-types.mjs.map +0 -1
- package/dist/dependencies/sort-package-json.d.ts +0 -2
- package/dist/dependencies/tsup.d.ts +0 -1
- package/dist/dependencies/tsup.mjs +0 -3
- package/dist/dependencies/tsup.mjs.map +0 -1
- package/dist/optimize-layer-Q35C25P4.mjs +0 -61
- package/dist/optimize-layer-Q35C25P4.mjs.map +0 -1
- package/dist/optimize-media-ZZWDHLLV.mjs +0 -99
- package/dist/optimize-media-ZZWDHLLV.mjs.map +0 -1
- package/dist/plugboy.d.ts +0 -777
- package/dist/plugboy.mjs.map +0 -1
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
export * from "pkg-types"
|
|
2
|
+
|
|
3
|
+
export { };
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
// src/dependencies/sort-package-json.ts
|
|
2
1
|
import sortPackageJson from "sort-package-json";
|
|
2
|
+
|
|
3
|
+
//#region src/dependencies/sort-package-json.ts
|
|
3
4
|
var sort_package_json_default = sortPackageJson;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
};
|
|
5
|
+
|
|
6
|
+
//#endregion
|
|
7
|
+
export { sort_package_json_default as default };
|
|
7
8
|
//# sourceMappingURL=sort-package-json.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/dependencies/sort-package-json.ts"],"sourcesContent":["import sortPackageJson from 'sort-package-json';\n\nexport default sortPackageJson;\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"sort-package-json.mjs","names":[],"sources":["../../src/dependencies/sort-package-json.ts"],"sourcesContent":["import sortPackageJson from 'sort-package-json';\n\nexport default sortPackageJson;\n"],"mappings":";;;AAEA,gCAAe"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "tsdown";
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import postcss, { Root } from "postcss";
|
|
2
|
+
|
|
3
|
+
//#region src/postcss/plugins/optimize-layer.ts
|
|
4
|
+
function resolveFilter(spec, defaults) {
|
|
5
|
+
if (!spec) return () => defaults;
|
|
6
|
+
if (typeof spec === "function") return spec;
|
|
7
|
+
const conditions = Array.isArray(spec) ? spec : [spec];
|
|
8
|
+
return (layerName) => conditions.some((condition) => typeof condition === "string" ? layerName.includes(condition) : condition.test(layerName));
|
|
9
|
+
}
|
|
10
|
+
function optimizeLayer(css, opts = {}) {
|
|
11
|
+
const root = css instanceof Root ? css : postcss.parse(css);
|
|
12
|
+
const layers = [];
|
|
13
|
+
const include = resolveFilter(opts.include, true);
|
|
14
|
+
const exclude = resolveFilter(opts.exclude, false);
|
|
15
|
+
const getLayer = (layerRule) => {
|
|
16
|
+
const name = layerRule.params;
|
|
17
|
+
const layer = layers.find((_layer) => _layer.name === name);
|
|
18
|
+
if (layer) return {
|
|
19
|
+
layer,
|
|
20
|
+
atFirst: false
|
|
21
|
+
};
|
|
22
|
+
const created = {
|
|
23
|
+
name,
|
|
24
|
+
rule: layerRule
|
|
25
|
+
};
|
|
26
|
+
layers.push(created);
|
|
27
|
+
return {
|
|
28
|
+
layer: created,
|
|
29
|
+
atFirst: true
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
root.walkAtRules("layer", (layerRule) => {
|
|
33
|
+
if (layerRule.parent?.type !== "root") return;
|
|
34
|
+
const { params, nodes } = layerRule;
|
|
35
|
+
if (!nodes || !include(params, layerRule) || exclude(params, layerRule)) return;
|
|
36
|
+
const { layer, atFirst } = getLayer(layerRule);
|
|
37
|
+
if (atFirst) return;
|
|
38
|
+
layerRule.nodes?.forEach((node) => {
|
|
39
|
+
layer.rule.append(node.clone());
|
|
40
|
+
});
|
|
41
|
+
layerRule.remove();
|
|
42
|
+
});
|
|
43
|
+
return root;
|
|
44
|
+
}
|
|
45
|
+
const PLUGIN_NAME = "optimize-layer";
|
|
46
|
+
function OptimizeLayer(opts) {
|
|
47
|
+
return {
|
|
48
|
+
postcssPlugin: PLUGIN_NAME,
|
|
49
|
+
Once(root) {
|
|
50
|
+
optimizeLayer(root, opts);
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
OptimizeLayer.postcss = true;
|
|
55
|
+
|
|
56
|
+
//#endregion
|
|
57
|
+
export { OptimizeLayer };
|
|
58
|
+
//# sourceMappingURL=optimize-layer-CK8NR_VC.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optimize-layer-CK8NR_VC.mjs","names":[],"sources":["../src/postcss/plugins/optimize-layer.ts"],"sourcesContent":["import postcss, { AtRule, Plugin, Root } from 'postcss';\n\ntype Filter = (layerName: string, rule: AtRule) => boolean;\n\ntype FilterSpec = string | RegExp | (string | RegExp)[] | Filter;\n\nexport interface OptimizeLayerOptions {\n include?: FilterSpec;\n exclude?: FilterSpec;\n}\n\nfunction resolveFilter(\n spec: FilterSpec | undefined,\n defaults: boolean,\n): Filter {\n if (!spec) return () => defaults;\n if (typeof spec === 'function') return spec;\n const conditions = Array.isArray(spec) ? spec : [spec];\n return (layerName) =>\n conditions.some((condition) =>\n typeof condition === 'string'\n ? layerName.includes(condition)\n : condition.test(layerName),\n );\n}\n\ninterface Layer {\n name: string;\n rule: AtRule;\n}\n\nexport function optimizeLayer(\n css: string | { toString(): string } | Root,\n opts: OptimizeLayerOptions = {},\n): Root {\n const root = css instanceof Root ? css : postcss.parse(css);\n const layers: Layer[] = [];\n const include = resolveFilter(opts.include, true);\n const exclude = resolveFilter(opts.exclude, false);\n\n const getLayer = (\n layerRule: AtRule,\n ): {\n layer: Layer;\n atFirst: boolean;\n } => {\n const name = layerRule.params;\n const layer = layers.find((_layer) => _layer.name === name);\n if (layer)\n return {\n layer,\n atFirst: false,\n };\n\n const created: Layer = { name, rule: layerRule };\n layers.push(created);\n return {\n layer: created,\n atFirst: true,\n };\n };\n\n root.walkAtRules('layer', (layerRule) => {\n if (layerRule.parent?.type !== 'root') return;\n const { params, nodes } = layerRule;\n if (!nodes || !include(params, layerRule) || exclude(params, layerRule))\n return;\n\n const { layer, atFirst } = getLayer(layerRule);\n\n if (atFirst) return;\n\n layerRule.nodes?.forEach((node) => {\n layer.rule.append(node.clone());\n });\n\n layerRule.remove();\n });\n\n return root;\n}\n\nconst PLUGIN_NAME = 'optimize-layer';\n\nexport function OptimizeLayer(opts?: OptimizeLayerOptions): Plugin {\n return {\n postcssPlugin: PLUGIN_NAME,\n Once(root) {\n optimizeLayer(root, opts);\n },\n };\n}\n\nOptimizeLayer.postcss = true;\n\nexport default OptimizeLayer;\n"],"mappings":";;;AAWA,SAAS,cACP,MACA,UACQ;AACR,KAAI,CAAC,KAAM,cAAa;AACxB,KAAI,OAAO,SAAS,WAAY,QAAO;CACvC,MAAM,aAAa,MAAM,QAAQ,KAAK,GAAG,OAAO,CAAC,KAAK;AACtD,SAAQ,cACN,WAAW,MAAM,cACf,OAAO,cAAc,WACjB,UAAU,SAAS,UAAU,GAC7B,UAAU,KAAK,UAAU,CAC9B;;AAQL,SAAgB,cACd,KACA,OAA6B,EAAE,EACzB;CACN,MAAM,OAAO,eAAe,OAAO,MAAM,QAAQ,MAAM,IAAI;CAC3D,MAAM,SAAkB,EAAE;CAC1B,MAAM,UAAU,cAAc,KAAK,SAAS,KAAK;CACjD,MAAM,UAAU,cAAc,KAAK,SAAS,MAAM;CAElD,MAAM,YACJ,cAIG;EACH,MAAM,OAAO,UAAU;EACvB,MAAM,QAAQ,OAAO,MAAM,WAAW,OAAO,SAAS,KAAK;AAC3D,MAAI,MACF,QAAO;GACL;GACA,SAAS;GACV;EAEH,MAAM,UAAiB;GAAE;GAAM,MAAM;GAAW;AAChD,SAAO,KAAK,QAAQ;AACpB,SAAO;GACL,OAAO;GACP,SAAS;GACV;;AAGH,MAAK,YAAY,UAAU,cAAc;AACvC,MAAI,UAAU,QAAQ,SAAS,OAAQ;EACvC,MAAM,EAAE,QAAQ,UAAU;AAC1B,MAAI,CAAC,SAAS,CAAC,QAAQ,QAAQ,UAAU,IAAI,QAAQ,QAAQ,UAAU,CACrE;EAEF,MAAM,EAAE,OAAO,YAAY,SAAS,UAAU;AAE9C,MAAI,QAAS;AAEb,YAAU,OAAO,SAAS,SAAS;AACjC,SAAM,KAAK,OAAO,KAAK,OAAO,CAAC;IAC/B;AAEF,YAAU,QAAQ;GAClB;AAEF,QAAO;;AAGT,MAAM,cAAc;AAEpB,SAAgB,cAAc,MAAqC;AACjE,QAAO;EACL,eAAe;EACf,KAAK,MAAM;AACT,iBAAc,MAAM,KAAK;;EAE5B;;AAGH,cAAc,UAAU"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import postcss, { AtRule, Root } from "postcss";
|
|
2
|
+
|
|
3
|
+
//#region src/postcss/plugins/optimize-media.ts
|
|
4
|
+
function resolveFilter(spec, defaults) {
|
|
5
|
+
if (!spec) return () => defaults;
|
|
6
|
+
if (typeof spec === "function") return spec;
|
|
7
|
+
const conditions = Array.isArray(spec) ? spec : [spec];
|
|
8
|
+
return (layerName) => conditions.some((condition) => typeof condition === "string" ? layerName.includes(condition) : condition.test(layerName));
|
|
9
|
+
}
|
|
10
|
+
function parseMedia(mediaRule) {
|
|
11
|
+
const { params, parent } = mediaRule;
|
|
12
|
+
if (!parent) throw mediaRule.error("@media rules require a parent container.");
|
|
13
|
+
return {
|
|
14
|
+
query: params,
|
|
15
|
+
rule: mediaRule,
|
|
16
|
+
container: parent
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
function isSourceMapAnnotation(node) {
|
|
20
|
+
if (!node) return false;
|
|
21
|
+
if (node.type !== "comment") return false;
|
|
22
|
+
return node.text.toLowerCase().startsWith("# sourcemappingurl=");
|
|
23
|
+
}
|
|
24
|
+
function getSourceMapAnnotation(container) {
|
|
25
|
+
const maybeAnnotation = container.last;
|
|
26
|
+
if (isSourceMapAnnotation(maybeAnnotation)) return maybeAnnotation;
|
|
27
|
+
}
|
|
28
|
+
function optimizeMedia(css, opts = {}) {
|
|
29
|
+
const root = css instanceof Root ? css : postcss.parse(css);
|
|
30
|
+
const include = resolveFilter(opts.include, true);
|
|
31
|
+
const exclude = resolveFilter(opts.exclude, false);
|
|
32
|
+
const sourceMap = getSourceMapAnnotation(root);
|
|
33
|
+
const containerMap = /* @__PURE__ */ new Map();
|
|
34
|
+
root.walkAtRules("media", (mediaRule) => {
|
|
35
|
+
const media = parseMedia(mediaRule);
|
|
36
|
+
if (!mediaRule.nodes || !include(media.query, media) || exclude(media.query, media)) return;
|
|
37
|
+
let bucket = containerMap.get(media.container);
|
|
38
|
+
if (!bucket) {
|
|
39
|
+
bucket = [];
|
|
40
|
+
containerMap.set(media.container, bucket);
|
|
41
|
+
}
|
|
42
|
+
bucket.push(media);
|
|
43
|
+
});
|
|
44
|
+
containerMap.forEach((bucket, container) => {
|
|
45
|
+
if (opts.sort) bucket.sort(opts.sort);
|
|
46
|
+
const combinedRules = [];
|
|
47
|
+
bucket.forEach((media) => {
|
|
48
|
+
let rule = combinedRules.find((r) => r.query === media.query);
|
|
49
|
+
if (!rule) {
|
|
50
|
+
rule = {
|
|
51
|
+
query: media.query,
|
|
52
|
+
medias: []
|
|
53
|
+
};
|
|
54
|
+
combinedRules.push(rule);
|
|
55
|
+
}
|
|
56
|
+
rule.medias.push(media);
|
|
57
|
+
});
|
|
58
|
+
combinedRules.forEach((rule) => {
|
|
59
|
+
const nodes = rule.medias.map((media) => (media.rule.nodes || []).map((node) => node.clone())).flat();
|
|
60
|
+
const newAtRule = new AtRule({
|
|
61
|
+
name: "media",
|
|
62
|
+
params: rule.query,
|
|
63
|
+
nodes
|
|
64
|
+
});
|
|
65
|
+
rule.medias.forEach((media) => media.rule.remove());
|
|
66
|
+
container.append(newAtRule);
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
containerMap.clear();
|
|
70
|
+
if (sourceMap) root.append(sourceMap);
|
|
71
|
+
return root;
|
|
72
|
+
}
|
|
73
|
+
const PLUGIN_NAME = "optimize-media";
|
|
74
|
+
function OptimizeMedia(opts) {
|
|
75
|
+
return {
|
|
76
|
+
postcssPlugin: PLUGIN_NAME,
|
|
77
|
+
Once(root) {
|
|
78
|
+
optimizeMedia(root, opts);
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
OptimizeMedia.postcss = true;
|
|
83
|
+
|
|
84
|
+
//#endregion
|
|
85
|
+
export { OptimizeMedia };
|
|
86
|
+
//# sourceMappingURL=optimize-media-Bxy27Cj7.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optimize-media-Bxy27Cj7.mjs","names":[],"sources":["../src/postcss/plugins/optimize-media.ts"],"sourcesContent":["import postcss, {\n AtRule,\n Plugin,\n Root,\n Container,\n ChildNode,\n Comment,\n} from 'postcss';\n\ninterface Media {\n query: string;\n rule: AtRule;\n container: Container;\n}\n\ntype Filter = (query: string, media: Media) => boolean;\n\ntype FilterSpec = string | RegExp | (string | RegExp)[] | Filter;\n\nfunction resolveFilter(\n spec: FilterSpec | undefined,\n defaults: boolean,\n): Filter {\n if (!spec) return () => defaults;\n if (typeof spec === 'function') return spec;\n const conditions = Array.isArray(spec) ? spec : [spec];\n return (layerName) =>\n conditions.some((condition) =>\n typeof condition === 'string'\n ? layerName.includes(condition)\n : condition.test(layerName),\n );\n}\n\ntype SortMedia = (a: Media, b: Media) => number;\n\nexport interface OptimizeMediaOptions {\n include?: FilterSpec;\n exclude?: FilterSpec;\n sort?: SortMedia;\n}\n\nfunction parseMedia(mediaRule: AtRule): Media {\n const { params, parent } = mediaRule;\n if (!parent) {\n throw mediaRule.error('@media rules require a parent container.');\n }\n return {\n query: params,\n rule: mediaRule,\n container: parent,\n };\n}\n\nfunction isSourceMapAnnotation(node: ChildNode | undefined): node is Comment {\n if (!node) return false;\n if (node.type !== 'comment') return false;\n return node.text.toLowerCase().startsWith('# sourcemappingurl=');\n}\n\nfunction getSourceMapAnnotation(container: Container): ChildNode | undefined {\n const maybeAnnotation = container.last;\n if (isSourceMapAnnotation(maybeAnnotation)) {\n return maybeAnnotation;\n }\n}\n\nexport function optimizeMedia(\n css: string | { toString(): string } | Root,\n opts: OptimizeMediaOptions = {},\n): Root {\n const root = css instanceof Root ? css : postcss.parse(css);\n const include = resolveFilter(opts.include, true);\n const exclude = resolveFilter(opts.exclude, false);\n\n const sourceMap = getSourceMapAnnotation(root);\n\n const containerMap = new Map<Container, Media[]>();\n\n root.walkAtRules('media', (mediaRule) => {\n const media = parseMedia(mediaRule);\n if (\n !mediaRule.nodes ||\n !include(media.query, media) ||\n exclude(media.query, media)\n )\n return;\n\n let bucket = containerMap.get(media.container);\n if (!bucket) {\n bucket = [];\n containerMap.set(media.container, bucket);\n }\n bucket.push(media);\n });\n\n containerMap.forEach((bucket, container) => {\n if (opts.sort) {\n bucket.sort(opts.sort);\n }\n\n const combinedRules: {\n query: string;\n medias: Media[];\n }[] = [];\n\n bucket.forEach((media) => {\n let rule = combinedRules.find((r) => r.query === media.query);\n if (!rule) {\n rule = { query: media.query, medias: [] };\n combinedRules.push(rule);\n }\n rule.medias.push(media);\n });\n\n combinedRules.forEach((rule) => {\n const nodes = rule.medias\n .map((media) => (media.rule.nodes || []).map((node) => node.clone()))\n .flat();\n const newAtRule = new AtRule({\n name: 'media',\n params: rule.query,\n nodes,\n });\n rule.medias.forEach((media) => media.rule.remove());\n container.append(newAtRule);\n });\n });\n\n containerMap.clear();\n\n if (sourceMap) {\n root.append(sourceMap);\n }\n\n return root;\n}\n\nconst PLUGIN_NAME = 'optimize-media';\n\nexport function OptimizeMedia(opts?: OptimizeMediaOptions): Plugin {\n return {\n postcssPlugin: PLUGIN_NAME,\n Once(root) {\n optimizeMedia(root, opts);\n },\n };\n}\n\nOptimizeMedia.postcss = true;\n\nexport default OptimizeMedia;\n"],"mappings":";;;AAmBA,SAAS,cACP,MACA,UACQ;AACR,KAAI,CAAC,KAAM,cAAa;AACxB,KAAI,OAAO,SAAS,WAAY,QAAO;CACvC,MAAM,aAAa,MAAM,QAAQ,KAAK,GAAG,OAAO,CAAC,KAAK;AACtD,SAAQ,cACN,WAAW,MAAM,cACf,OAAO,cAAc,WACjB,UAAU,SAAS,UAAU,GAC7B,UAAU,KAAK,UAAU,CAC9B;;AAWL,SAAS,WAAW,WAA0B;CAC5C,MAAM,EAAE,QAAQ,WAAW;AAC3B,KAAI,CAAC,OACH,OAAM,UAAU,MAAM,2CAA2C;AAEnE,QAAO;EACL,OAAO;EACP,MAAM;EACN,WAAW;EACZ;;AAGH,SAAS,sBAAsB,MAA8C;AAC3E,KAAI,CAAC,KAAM,QAAO;AAClB,KAAI,KAAK,SAAS,UAAW,QAAO;AACpC,QAAO,KAAK,KAAK,aAAa,CAAC,WAAW,sBAAsB;;AAGlE,SAAS,uBAAuB,WAA6C;CAC3E,MAAM,kBAAkB,UAAU;AAClC,KAAI,sBAAsB,gBAAgB,CACxC,QAAO;;AAIX,SAAgB,cACd,KACA,OAA6B,EAAE,EACzB;CACN,MAAM,OAAO,eAAe,OAAO,MAAM,QAAQ,MAAM,IAAI;CAC3D,MAAM,UAAU,cAAc,KAAK,SAAS,KAAK;CACjD,MAAM,UAAU,cAAc,KAAK,SAAS,MAAM;CAElD,MAAM,YAAY,uBAAuB,KAAK;CAE9C,MAAM,+BAAe,IAAI,KAAyB;AAElD,MAAK,YAAY,UAAU,cAAc;EACvC,MAAM,QAAQ,WAAW,UAAU;AACnC,MACE,CAAC,UAAU,SACX,CAAC,QAAQ,MAAM,OAAO,MAAM,IAC5B,QAAQ,MAAM,OAAO,MAAM,CAE3B;EAEF,IAAI,SAAS,aAAa,IAAI,MAAM,UAAU;AAC9C,MAAI,CAAC,QAAQ;AACX,YAAS,EAAE;AACX,gBAAa,IAAI,MAAM,WAAW,OAAO;;AAE3C,SAAO,KAAK,MAAM;GAClB;AAEF,cAAa,SAAS,QAAQ,cAAc;AAC1C,MAAI,KAAK,KACP,QAAO,KAAK,KAAK,KAAK;EAGxB,MAAM,gBAGA,EAAE;AAER,SAAO,SAAS,UAAU;GACxB,IAAI,OAAO,cAAc,MAAM,MAAM,EAAE,UAAU,MAAM,MAAM;AAC7D,OAAI,CAAC,MAAM;AACT,WAAO;KAAE,OAAO,MAAM;KAAO,QAAQ,EAAE;KAAE;AACzC,kBAAc,KAAK,KAAK;;AAE1B,QAAK,OAAO,KAAK,MAAM;IACvB;AAEF,gBAAc,SAAS,SAAS;GAC9B,MAAM,QAAQ,KAAK,OAChB,KAAK,WAAW,MAAM,KAAK,SAAS,EAAE,EAAE,KAAK,SAAS,KAAK,OAAO,CAAC,CAAC,CACpE,MAAM;GACT,MAAM,YAAY,IAAI,OAAO;IAC3B,MAAM;IACN,QAAQ,KAAK;IACb;IACD,CAAC;AACF,QAAK,OAAO,SAAS,UAAU,MAAM,KAAK,QAAQ,CAAC;AACnD,aAAU,OAAO,UAAU;IAC3B;GACF;AAEF,cAAa,OAAO;AAEpB,KAAI,UACF,MAAK,OAAO,UAAU;AAGxB,QAAO;;AAGT,MAAM,cAAc;AAEpB,SAAgB,cAAc,MAAqC;AACjE,QAAO;EACL,eAAe;EACf,KAAK,MAAM;AACT,iBAAc,MAAM,KAAK;;EAE5B;;AAGH,cAAc,UAAU"}
|