@fastkit/plugboy 0.3.0 → 1.0.0-next.1
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 +8 -5
- package/dist/cli.d.mts +5 -0
- package/dist/cli.mjs +33 -129
- 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-DvJYpZA7.mjs +1414 -0
- package/dist/workspace-DvJYpZA7.mjs.map +1 -0
- package/env.d.ts +0 -18
- package/package.json +15 -12
- package/dist/chunk-IDJLTVUE.mjs +0 -1619
- package/dist/chunk-IDJLTVUE.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
package/README.md
CHANGED
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
|
|
4
4
|
🌐 English | [日本語](https://github.com/dadajam4/fastkit/blob/main/packages/plugboy/README-ja.md)
|
|
5
5
|
|
|
6
|
-
A monorepo-compatible module bundler and project management tool. Provides a high-speed build system based on
|
|
6
|
+
A monorepo-compatible module bundler and project management tool. Provides a high-speed build system based on tsdown, and other tools.
|
|
7
7
|
|
|
8
8
|
## Features
|
|
9
9
|
|
|
10
|
-
- **High-Speed Build**: Ultra-fast bundling based on
|
|
10
|
+
- **High-Speed Build**: Ultra-fast bundling based on tsdown
|
|
11
11
|
- **Monorepo Support**: Integrated management of multi-package projects
|
|
12
12
|
- **Full TypeScript Support**: Automatic type definition generation and optimization
|
|
13
13
|
- **Plugin System**: Extensible architecture
|
|
@@ -49,6 +49,7 @@ plugboy gen [workspaceName]
|
|
|
49
49
|
### Workspace Configuration
|
|
50
50
|
|
|
51
51
|
**`plugboy.workspace.ts`**:
|
|
52
|
+
|
|
52
53
|
```typescript
|
|
53
54
|
import { defineWorkspaceConfig } from '@fastkit/plugboy';
|
|
54
55
|
|
|
@@ -70,13 +71,14 @@ export default defineWorkspaceConfig({
|
|
|
70
71
|
### Project Configuration
|
|
71
72
|
|
|
72
73
|
**`plugboy.project.ts`**:
|
|
74
|
+
|
|
73
75
|
```typescript
|
|
74
76
|
import { defineProjectConfig } from '@fastkit/plugboy';
|
|
75
77
|
|
|
76
78
|
export default defineProjectConfig({
|
|
77
79
|
workspacesDir: 'packages',
|
|
78
80
|
peerDependencies: {
|
|
79
|
-
'vue': '^3.
|
|
81
|
+
'vue': '^3.5.0'
|
|
80
82
|
},
|
|
81
83
|
scripts: [
|
|
82
84
|
{
|
|
@@ -149,7 +151,7 @@ export default defineProjectConfig({
|
|
|
149
151
|
workspacesDir: 'packages',
|
|
150
152
|
peerDependencies: {
|
|
151
153
|
'react': '^18.0.0',
|
|
152
|
-
'vue': '^3.
|
|
154
|
+
'vue': '^3.5.0'
|
|
153
155
|
}
|
|
154
156
|
});
|
|
155
157
|
```
|
|
@@ -341,8 +343,9 @@ export default defineWorkspaceConfig({
|
|
|
341
343
|
## Dependencies
|
|
342
344
|
|
|
343
345
|
### Main Dependencies
|
|
346
|
+
|
|
344
347
|
- `esbuild`: High-speed JavaScript builder
|
|
345
|
-
- `
|
|
348
|
+
- `tsdown`: TypeScript build tool
|
|
346
349
|
- `cac`: CLI creation library
|
|
347
350
|
- `glob`: File matching
|
|
348
351
|
- `cssnano`: CSS optimization
|
package/dist/cli.d.mts
ADDED
package/dist/cli.mjs
CHANGED
|
@@ -1,136 +1,40 @@
|
|
|
1
|
-
import {
|
|
2
|
-
generateWorkspace,
|
|
3
|
-
getWorkspace
|
|
4
|
-
} from "./chunk-IDJLTVUE.mjs";
|
|
5
|
-
|
|
6
|
-
// src/cli.ts
|
|
1
|
+
import { i as getWorkspace, t as generateWorkspace } from "./workspace-DvJYpZA7.mjs";
|
|
7
2
|
import { cac } from "cac";
|
|
8
3
|
|
|
9
|
-
|
|
10
|
-
var
|
|
11
|
-
name: "@fastkit/plugboy",
|
|
12
|
-
version: "0.3.0",
|
|
13
|
-
description: "",
|
|
14
|
-
keywords: [],
|
|
15
|
-
repository: {
|
|
16
|
-
type: "git",
|
|
17
|
-
url: "git+https://github.com/dadajam4/fastkit.git"
|
|
18
|
-
},
|
|
19
|
-
license: "MIT",
|
|
20
|
-
author: "dadajam4",
|
|
21
|
-
type: "module",
|
|
22
|
-
exports: {
|
|
23
|
-
"./package.json": "./package.json",
|
|
24
|
-
"./dependencies/bundle-require": {
|
|
25
|
-
import: "./dist/dependencies/bundle-require.mjs",
|
|
26
|
-
types: "./dist/dependencies/bundle-require.d.ts"
|
|
27
|
-
},
|
|
28
|
-
"./dependencies/cac": {
|
|
29
|
-
import: "./dist/dependencies/cac.mjs",
|
|
30
|
-
types: "./dist/dependencies/cac.d.ts"
|
|
31
|
-
},
|
|
32
|
-
"./dependencies/esbuild": {
|
|
33
|
-
import: "./dist/dependencies/esbuild.mjs",
|
|
34
|
-
types: "./dist/dependencies/esbuild.d.ts"
|
|
35
|
-
},
|
|
36
|
-
"./dependencies/glob": {
|
|
37
|
-
import: "./dist/dependencies/glob.mjs",
|
|
38
|
-
types: "./dist/dependencies/glob.d.ts"
|
|
39
|
-
},
|
|
40
|
-
"./dependencies/inquirer": {
|
|
41
|
-
import: "./dist/dependencies/inquirer.mjs",
|
|
42
|
-
types: "./dist/dependencies/inquirer.d.ts"
|
|
43
|
-
},
|
|
44
|
-
"./dependencies/pkg-types": {
|
|
45
|
-
import: "./dist/dependencies/pkg-types.mjs",
|
|
46
|
-
types: "./dist/dependencies/pkg-types.d.ts"
|
|
47
|
-
},
|
|
48
|
-
"./dependencies/sort-package-json": {
|
|
49
|
-
import: "./dist/dependencies/sort-package-json.mjs",
|
|
50
|
-
types: "./dist/dependencies/sort-package-json.d.ts"
|
|
51
|
-
},
|
|
52
|
-
"./dependencies/tsup": {
|
|
53
|
-
import: "./dist/dependencies/tsup.mjs",
|
|
54
|
-
types: "./dist/dependencies/tsup.d.ts"
|
|
55
|
-
},
|
|
56
|
-
"./env": {
|
|
57
|
-
types: "./env.d.ts"
|
|
58
|
-
},
|
|
59
|
-
".": {
|
|
60
|
-
import: "./dist/plugboy.mjs",
|
|
61
|
-
types: "./dist/plugboy.d.ts"
|
|
62
|
-
}
|
|
63
|
-
},
|
|
64
|
-
bin: {
|
|
65
|
-
plugboy: "./cli.mjs"
|
|
66
|
-
},
|
|
67
|
-
files: [
|
|
68
|
-
"env.d.ts",
|
|
69
|
-
"cli.mjs",
|
|
70
|
-
"dist"
|
|
71
|
-
],
|
|
72
|
-
scripts: {
|
|
73
|
-
build: "tsup",
|
|
74
|
-
clean: "rm -rf .turbo && rm -rf node_modules && rm -rf dist",
|
|
75
|
-
eslint: "eslint . --ext ts,tsx,js,vue,html,yaml",
|
|
76
|
-
"eslint:fix": "eslint . --ext ts,tsx,js,vue,html,yaml --fix",
|
|
77
|
-
lint: "pnpm run eslint",
|
|
78
|
-
format: "pnpm run eslint:fix",
|
|
79
|
-
typecheck: "tsc --noEmit --skipLibCheck",
|
|
80
|
-
test: "vitest run"
|
|
81
|
-
},
|
|
82
|
-
dependencies: {
|
|
83
|
-
"@inquirer/prompts": "^7.8.6",
|
|
84
|
-
"@swc/core": "^1.13.5",
|
|
85
|
-
"bundle-require": "^5.1.0",
|
|
86
|
-
cac: "^6.7.14",
|
|
87
|
-
cssnano: "^7.1.1",
|
|
88
|
-
esbuild: "^0.25.10",
|
|
89
|
-
execa: "^9.6.0",
|
|
90
|
-
glob: "^11.0.3",
|
|
91
|
-
"pkg-types": "^2.3.0",
|
|
92
|
-
"sort-package-json": "^3.4.0",
|
|
93
|
-
tsup: "^8.5.0"
|
|
94
|
-
}
|
|
95
|
-
};
|
|
4
|
+
//#region package.json
|
|
5
|
+
var version = "1.0.0-next.1";
|
|
96
6
|
|
|
97
|
-
|
|
7
|
+
//#endregion
|
|
8
|
+
//#region src/cli.ts
|
|
98
9
|
async function main() {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
"generate [workspaceName]",
|
|
125
|
-
"Generate a workspace for your project."
|
|
126
|
-
).alias("gen").action(async (workspaceName, options) => {
|
|
127
|
-
await generateWorkspace(workspaceName);
|
|
128
|
-
});
|
|
129
|
-
cli.help();
|
|
130
|
-
cli.parse();
|
|
10
|
+
const cli = cac("plugboy");
|
|
11
|
+
cli.version(version);
|
|
12
|
+
cli.command("json", "Apply workspace settings in package.json.").action(async (files, options) => {
|
|
13
|
+
await (await getWorkspace()).preparePackageJSON();
|
|
14
|
+
});
|
|
15
|
+
cli.command("stub", "Link workspace distributions and source directories.").action(async (files, options) => {
|
|
16
|
+
const workspace = await getWorkspace();
|
|
17
|
+
await workspace.preparePackageJSON();
|
|
18
|
+
await workspace.stub();
|
|
19
|
+
});
|
|
20
|
+
cli.command("build", "Guess all entries in the workspace and bundle the source code.").action(async (files, options) => {
|
|
21
|
+
const workspace = await getWorkspace();
|
|
22
|
+
await workspace.preparePackageJSON();
|
|
23
|
+
await workspace.build();
|
|
24
|
+
});
|
|
25
|
+
cli.command("clean", "Deletes the distribution directory of the workspace.").action(async (files, options) => {
|
|
26
|
+
const workspace = await getWorkspace();
|
|
27
|
+
await workspace.preparePackageJSON();
|
|
28
|
+
await workspace.clean();
|
|
29
|
+
});
|
|
30
|
+
cli.command("generate [workspaceName]", "Generate a workspace for your project.").alias("gen").action(async (workspaceName, options) => {
|
|
31
|
+
await generateWorkspace(workspaceName);
|
|
32
|
+
});
|
|
33
|
+
cli.help();
|
|
34
|
+
cli.parse();
|
|
131
35
|
}
|
|
132
36
|
main();
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
};
|
|
37
|
+
|
|
38
|
+
//#endregion
|
|
39
|
+
export { main };
|
|
136
40
|
//# sourceMappingURL=cli.mjs.map
|
package/dist/cli.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"cli.mjs","names":["pkg.version"],"sources":["../package.json","../src/cli.ts"],"sourcesContent":["","import { cac } from 'cac';\nimport { getWorkspace, generateWorkspace } from './workspace';\nimport pkg from '../package.json';\n\nexport async function main() {\n const cli = cac('plugboy');\n cli.version(pkg.version);\n\n cli\n .command('json', 'Apply workspace settings in package.json.')\n .action(async (files, options) => {\n const workspace = await getWorkspace();\n await workspace.preparePackageJSON();\n });\n\n cli\n .command('stub', 'Link workspace distributions and source directories.')\n .action(async (files, options) => {\n const workspace = await getWorkspace();\n await workspace.preparePackageJSON();\n await workspace.stub();\n });\n\n cli\n .command(\n 'build',\n 'Guess all entries in the workspace and bundle the source code.',\n )\n .action(async (files, options) => {\n const workspace = await getWorkspace();\n await workspace.preparePackageJSON();\n await workspace.build();\n });\n\n cli\n .command('clean', 'Deletes the distribution directory of the workspace.')\n .action(async (files, options) => {\n const workspace = await getWorkspace();\n await workspace.preparePackageJSON();\n await workspace.clean();\n });\n\n cli\n .command(\n 'generate [workspaceName]',\n 'Generate a workspace for your project.',\n )\n .alias('gen')\n .action(async (workspaceName: string | undefined, options) => {\n await generateWorkspace(workspaceName);\n });\n\n cli.help();\n cli.parse();\n}\n\nmain();\n"],"mappings":";;;;;;;;ACIA,eAAsB,OAAO;CAC3B,MAAM,MAAM,IAAI,UAAU;AAC1B,KAAI,QAAQA,QAAY;AAExB,KACG,QAAQ,QAAQ,4CAA4C,CAC5D,OAAO,OAAO,OAAO,YAAY;AAEhC,SADkB,MAAM,cAAc,EACtB,oBAAoB;GACpC;AAEJ,KACG,QAAQ,QAAQ,uDAAuD,CACvE,OAAO,OAAO,OAAO,YAAY;EAChC,MAAM,YAAY,MAAM,cAAc;AACtC,QAAM,UAAU,oBAAoB;AACpC,QAAM,UAAU,MAAM;GACtB;AAEJ,KACG,QACC,SACA,iEACD,CACA,OAAO,OAAO,OAAO,YAAY;EAChC,MAAM,YAAY,MAAM,cAAc;AACtC,QAAM,UAAU,oBAAoB;AACpC,QAAM,UAAU,OAAO;GACvB;AAEJ,KACG,QAAQ,SAAS,uDAAuD,CACxE,OAAO,OAAO,OAAO,YAAY;EAChC,MAAM,YAAY,MAAM,cAAc;AACtC,QAAM,UAAU,oBAAoB;AACpC,QAAM,UAAU,OAAO;GACvB;AAEJ,KACG,QACC,4BACA,yCACD,CACA,MAAM,MAAM,CACZ,OAAO,OAAO,eAAmC,YAAY;AAC5D,QAAM,kBAAkB,cAAc;GACtC;AAEJ,KAAI,MAAM;AACV,KAAI,OAAO;;AAGb,MAAM"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import postcss, { Root } from "postcss";
|
|
2
|
+
|
|
3
|
+
//#region src/postcss/plugins/combine-rules.ts
|
|
4
|
+
function buildFilterFn(spec) {
|
|
5
|
+
return (rule) => {
|
|
6
|
+
if (typeof spec === "function") return spec(rule);
|
|
7
|
+
const { selector } = rule;
|
|
8
|
+
return spec.some((target) => {
|
|
9
|
+
if (typeof target === "string") return selector === target;
|
|
10
|
+
return target.test(selector);
|
|
11
|
+
});
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
function combineContainerRules(container, filter) {
|
|
15
|
+
const { nodes } = container;
|
|
16
|
+
if (!nodes) return;
|
|
17
|
+
const rules = nodes.filter(filter);
|
|
18
|
+
const combinedRules = [];
|
|
19
|
+
rules.forEach((rule) => {
|
|
20
|
+
const { selector } = rule;
|
|
21
|
+
let combinedRule = combinedRules.find((c) => c.selector === selector);
|
|
22
|
+
if (!combinedRule) {
|
|
23
|
+
combinedRule = {
|
|
24
|
+
selector,
|
|
25
|
+
rules: [],
|
|
26
|
+
container: rule
|
|
27
|
+
};
|
|
28
|
+
combinedRules.push(combinedRule);
|
|
29
|
+
}
|
|
30
|
+
combinedRule.rules.push(rule);
|
|
31
|
+
});
|
|
32
|
+
combinedRules.forEach((combinedRule) => {
|
|
33
|
+
combinedRule.rules.forEach((rule, index) => {
|
|
34
|
+
if (index === 0) return;
|
|
35
|
+
const { nodes } = rule;
|
|
36
|
+
if (!nodes) return;
|
|
37
|
+
nodes.forEach((node) => {
|
|
38
|
+
combinedRule.container.append(node.clone());
|
|
39
|
+
});
|
|
40
|
+
rule.remove();
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
function combineRules(css, opts) {
|
|
45
|
+
const root = css instanceof Root ? css : postcss.parse(css);
|
|
46
|
+
const filter = buildFilterFn(opts.rules);
|
|
47
|
+
combineContainerRules(root, filter);
|
|
48
|
+
root.walkAtRules((atRule) => {
|
|
49
|
+
combineContainerRules(atRule, filter);
|
|
50
|
+
});
|
|
51
|
+
return root;
|
|
52
|
+
}
|
|
53
|
+
const PLUGIN_NAME = "combine-rules";
|
|
54
|
+
function CombineRules(opts) {
|
|
55
|
+
return {
|
|
56
|
+
postcssPlugin: PLUGIN_NAME,
|
|
57
|
+
Once(root) {
|
|
58
|
+
combineRules(root, opts);
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
CombineRules.postcss = true;
|
|
63
|
+
|
|
64
|
+
//#endregion
|
|
65
|
+
export { CombineRules };
|
|
66
|
+
//# sourceMappingURL=combine-rules-CWp-M491.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"combine-rules-CWp-M491.mjs","names":[],"sources":["../src/postcss/plugins/combine-rules.ts"],"sourcesContent":["import postcss, { Plugin, Root, Container, Rule } from 'postcss';\n\nexport type RuleFilter = string | RegExp;\n\nexport type RuleSpecFn = (rule: Rule) => boolean;\n\nexport type RuleSpec = RuleFilter[] | RuleSpecFn;\n\nexport interface CombineRulesOptions {\n rules: RuleSpec;\n}\n\nfunction buildFilterFn(spec: RuleSpec): RuleSpecFn {\n return (rule) => {\n if (typeof spec === 'function') return spec(rule);\n const { selector } = rule;\n return spec.some((target) => {\n if (typeof target === 'string') return selector === target;\n return target.test(selector);\n });\n };\n}\n\nexport function combineContainerRules(\n container: Container,\n filter: RuleSpecFn,\n) {\n const { nodes } = container;\n if (!nodes) return;\n\n const rules: Rule[] = (nodes as Rule[]).filter(filter);\n const combinedRules: { selector: string; rules: Rule[]; container: Rule }[] =\n [];\n rules.forEach((rule) => {\n const { selector } = rule;\n let combinedRule = combinedRules.find((c) => c.selector === selector);\n if (!combinedRule) {\n combinedRule = {\n selector,\n rules: [],\n container: rule,\n };\n combinedRules.push(combinedRule);\n }\n combinedRule.rules.push(rule);\n });\n\n combinedRules.forEach((combinedRule) => {\n combinedRule.rules.forEach((rule, index) => {\n if (index === 0) return;\n\n const { nodes } = rule;\n if (!nodes) return;\n nodes.forEach((node) => {\n combinedRule.container.append(node.clone());\n });\n rule.remove();\n });\n });\n}\n\nexport function combineRules(\n css: string | { toString(): string } | Root,\n opts: CombineRulesOptions,\n): Root {\n const root = css instanceof Root ? css : postcss.parse(css);\n const filter = buildFilterFn(opts.rules);\n combineContainerRules(root, filter);\n root.walkAtRules((atRule) => {\n combineContainerRules(atRule, filter);\n });\n return root;\n}\n\nconst PLUGIN_NAME = 'combine-rules';\n\nexport function CombineRules(opts: CombineRulesOptions): Plugin {\n return {\n postcssPlugin: PLUGIN_NAME,\n Once(root) {\n combineRules(root, opts);\n },\n };\n}\n\nCombineRules.postcss = true;\n\nexport default CombineRules;\n"],"mappings":";;;AAYA,SAAS,cAAc,MAA4B;AACjD,SAAQ,SAAS;AACf,MAAI,OAAO,SAAS,WAAY,QAAO,KAAK,KAAK;EACjD,MAAM,EAAE,aAAa;AACrB,SAAO,KAAK,MAAM,WAAW;AAC3B,OAAI,OAAO,WAAW,SAAU,QAAO,aAAa;AACpD,UAAO,OAAO,KAAK,SAAS;IAC5B;;;AAIN,SAAgB,sBACd,WACA,QACA;CACA,MAAM,EAAE,UAAU;AAClB,KAAI,CAAC,MAAO;CAEZ,MAAM,QAAiB,MAAiB,OAAO,OAAO;CACtD,MAAM,gBACJ,EAAE;AACJ,OAAM,SAAS,SAAS;EACtB,MAAM,EAAE,aAAa;EACrB,IAAI,eAAe,cAAc,MAAM,MAAM,EAAE,aAAa,SAAS;AACrE,MAAI,CAAC,cAAc;AACjB,kBAAe;IACb;IACA,OAAO,EAAE;IACT,WAAW;IACZ;AACD,iBAAc,KAAK,aAAa;;AAElC,eAAa,MAAM,KAAK,KAAK;GAC7B;AAEF,eAAc,SAAS,iBAAiB;AACtC,eAAa,MAAM,SAAS,MAAM,UAAU;AAC1C,OAAI,UAAU,EAAG;GAEjB,MAAM,EAAE,UAAU;AAClB,OAAI,CAAC,MAAO;AACZ,SAAM,SAAS,SAAS;AACtB,iBAAa,UAAU,OAAO,KAAK,OAAO,CAAC;KAC3C;AACF,QAAK,QAAQ;IACb;GACF;;AAGJ,SAAgB,aACd,KACA,MACM;CACN,MAAM,OAAO,eAAe,OAAO,MAAM,QAAQ,MAAM,IAAI;CAC3D,MAAM,SAAS,cAAc,KAAK,MAAM;AACxC,uBAAsB,MAAM,OAAO;AACnC,MAAK,aAAa,WAAW;AAC3B,wBAAsB,QAAQ,OAAO;GACrC;AACF,QAAO;;AAGT,MAAM,cAAc;AAEpB,SAAgB,aAAa,MAAmC;AAC9D,QAAO;EACL,eAAe;EACf,KAAK,MAAM;AACT,gBAAa,MAAM,KAAK;;EAE3B;;AAGH,aAAa,UAAU"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "bundle-require";
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
export * from "bundle-require"
|
|
2
|
+
|
|
3
|
+
export { };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "cac";
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
export * from "cac"
|
|
2
|
+
|
|
3
|
+
export { };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "glob";
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
export * from "glob"
|
|
2
|
+
|
|
3
|
+
export { };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "@inquirer/prompts";
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
export * from "@inquirer/prompts"
|
|
2
|
+
|
|
3
|
+
export { };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "pkg-types";
|
|
@@ -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"}
|