@better-t-stack/template-generator 3.17.1 → 3.18.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/dist/fs-writer.d.mts +23 -4
- package/dist/fs-writer.d.mts.map +1 -1
- package/dist/fs-writer.mjs +47 -16
- package/dist/fs-writer.mjs.map +1 -1
- package/dist/index.d.mts +17 -3
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +19812 -19784
- package/dist/index.mjs.map +1 -1
- package/dist/{types-CSDwmt8U.d.mts → types-DUzPfsFZ.d.mts} +12 -7
- package/dist/types-DUzPfsFZ.d.mts.map +1 -0
- package/package.json +3 -2
- package/dist/types-CSDwmt8U.d.mts.map +0 -1
package/dist/fs-writer.d.mts
CHANGED
|
@@ -1,8 +1,27 @@
|
|
|
1
|
-
import { a as VirtualFileTree } from "./types-
|
|
1
|
+
import { a as VirtualFileTree } from "./types-DUzPfsFZ.mjs";
|
|
2
|
+
import * as better_result0 from "better-result";
|
|
3
|
+
import { Result } from "better-result";
|
|
2
4
|
|
|
3
5
|
//#region src/fs-writer.d.ts
|
|
4
|
-
declare
|
|
5
|
-
|
|
6
|
+
declare const FileWriteError_base: better_result0.TaggedErrorClass<"FileWriteError", {
|
|
7
|
+
message: string;
|
|
8
|
+
path?: string;
|
|
9
|
+
cause?: unknown;
|
|
10
|
+
}>;
|
|
11
|
+
/**
|
|
12
|
+
* Error class for filesystem write failures
|
|
13
|
+
*/
|
|
14
|
+
declare class FileWriteError extends FileWriteError_base {}
|
|
15
|
+
/**
|
|
16
|
+
* Writes a virtual file tree to the filesystem.
|
|
17
|
+
* Returns a Result type for type-safe error handling.
|
|
18
|
+
*/
|
|
19
|
+
declare function writeTree(tree: VirtualFileTree, destDir: string): Promise<Result<void, FileWriteError>>;
|
|
20
|
+
/**
|
|
21
|
+
* Writes selected files from a virtual file tree to the filesystem.
|
|
22
|
+
* Returns a Result with the list of written file paths.
|
|
23
|
+
*/
|
|
24
|
+
declare function writeSelected(tree: VirtualFileTree, destDir: string, filter: (filePath: string) => boolean): Promise<Result<string[], FileWriteError>>;
|
|
6
25
|
//#endregion
|
|
7
|
-
export {
|
|
26
|
+
export { FileWriteError, writeSelected, writeTree };
|
|
8
27
|
//# sourceMappingURL=fs-writer.d.mts.map
|
package/dist/fs-writer.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fs-writer.d.mts","names":[],"sources":["../src/fs-writer.ts"],"sourcesContent":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fs-writer.d.mts","names":[],"sources":["../src/fs-writer.ts"],"sourcesContent":[],"mappings":";;;;;cAI2F,qBAAA,cAAA,CAAA;;;EAAA,KAAA,CAAA,EAAA,OAAA;AAS3F,CAAA,CAAA;AAUA;;;AAGW,cAbE,cAAA,SAAuB,mBAAA,CAazB;;AA8CX;;;AAIW,iBArDW,SAAA,CAqDX,IAAA,EApDH,eAoDG,EAAA,OAAA,EAAA,MAAA,CAAA,EAlDR,OAkDQ,CAlDA,MAkDA,CAAA,IAAA,EAlDa,cAkDb,CAAA,CAAA;;;;;iBAJW,aAAA,OACd,0EAGL,QAAQ,iBAAiB"}
|
package/dist/fs-writer.mjs
CHANGED
|
@@ -1,13 +1,33 @@
|
|
|
1
1
|
import { t as getBinaryTemplatesRoot } from "./template-reader-DOXCnctl.mjs";
|
|
2
|
+
import { Result, TaggedError } from "better-result";
|
|
2
3
|
import { dirname, join } from "pathe";
|
|
3
4
|
import * as fs from "node:fs/promises";
|
|
4
5
|
|
|
5
6
|
//#region src/fs-writer.ts
|
|
6
7
|
const BINARY_FILE_MARKER = "[Binary file]";
|
|
7
|
-
|
|
8
|
-
|
|
8
|
+
/**
|
|
9
|
+
* Error class for filesystem write failures
|
|
10
|
+
*/
|
|
11
|
+
var FileWriteError = class extends TaggedError("FileWriteError")() {};
|
|
12
|
+
/**
|
|
13
|
+
* Writes a virtual file tree to the filesystem.
|
|
14
|
+
* Returns a Result type for type-safe error handling.
|
|
15
|
+
*/
|
|
16
|
+
async function writeTree(tree, destDir) {
|
|
17
|
+
return Result.tryPromise({
|
|
18
|
+
try: async () => {
|
|
19
|
+
for (const child of tree.root.children) await writeNodeInternal(child, destDir, "");
|
|
20
|
+
},
|
|
21
|
+
catch: (e) => {
|
|
22
|
+
if (FileWriteError.is(e)) return e;
|
|
23
|
+
return new FileWriteError({
|
|
24
|
+
message: e instanceof Error ? e.message : String(e),
|
|
25
|
+
cause: e
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
});
|
|
9
29
|
}
|
|
10
|
-
async function
|
|
30
|
+
async function writeNodeInternal(node, baseDir, relativePath) {
|
|
11
31
|
const fullPath = join(baseDir, relativePath, node.name);
|
|
12
32
|
const nodePath = relativePath ? join(relativePath, node.name) : node.name;
|
|
13
33
|
if (node.type === "file") {
|
|
@@ -17,15 +37,30 @@ async function writeNode(node, baseDir, relativePath) {
|
|
|
17
37
|
else if (fileNode.content !== BINARY_FILE_MARKER) await fs.writeFile(fullPath, fileNode.content, "utf-8");
|
|
18
38
|
} else {
|
|
19
39
|
await fs.mkdir(fullPath, { recursive: true });
|
|
20
|
-
for (const child of node.children) await
|
|
40
|
+
for (const child of node.children) await writeNodeInternal(child, baseDir, nodePath);
|
|
21
41
|
}
|
|
22
42
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
43
|
+
/**
|
|
44
|
+
* Writes selected files from a virtual file tree to the filesystem.
|
|
45
|
+
* Returns a Result with the list of written file paths.
|
|
46
|
+
*/
|
|
47
|
+
async function writeSelected(tree, destDir, filter) {
|
|
48
|
+
return Result.tryPromise({
|
|
49
|
+
try: async () => {
|
|
50
|
+
const writtenFiles = [];
|
|
51
|
+
await writeSelectedNodeInternal(tree.root, destDir, "", filter, writtenFiles);
|
|
52
|
+
return writtenFiles;
|
|
53
|
+
},
|
|
54
|
+
catch: (e) => {
|
|
55
|
+
if (FileWriteError.is(e)) return e;
|
|
56
|
+
return new FileWriteError({
|
|
57
|
+
message: e instanceof Error ? e.message : String(e),
|
|
58
|
+
cause: e
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
});
|
|
27
62
|
}
|
|
28
|
-
async function
|
|
63
|
+
async function writeSelectedNodeInternal(node, baseDir, relativePath, filter, writtenFiles) {
|
|
29
64
|
const nodePath = relativePath ? `${relativePath}/${node.name}` : node.name;
|
|
30
65
|
if (node.type === "file") {
|
|
31
66
|
if (filter(nodePath)) {
|
|
@@ -35,17 +70,13 @@ async function writeSelectedNode(node, baseDir, relativePath, filter, writtenFil
|
|
|
35
70
|
else if (fileNode.content !== BINARY_FILE_MARKER) await fs.writeFile(join(baseDir, nodePath), fileNode.content, "utf-8");
|
|
36
71
|
writtenFiles.push(nodePath);
|
|
37
72
|
}
|
|
38
|
-
} else for (const child of node.children) await
|
|
73
|
+
} else for (const child of node.children) await writeSelectedNodeInternal(child, baseDir, nodePath, filter, writtenFiles);
|
|
39
74
|
}
|
|
40
75
|
async function copyBinaryFile(templatePath, destPath) {
|
|
41
76
|
const sourcePath = join(getBinaryTemplatesRoot(), templatePath);
|
|
42
|
-
|
|
43
|
-
await fs.copyFile(sourcePath, destPath);
|
|
44
|
-
} catch (error) {
|
|
45
|
-
console.warn(`Failed to copy binary file: ${templatePath}`, error);
|
|
46
|
-
}
|
|
77
|
+
await fs.copyFile(sourcePath, destPath);
|
|
47
78
|
}
|
|
48
79
|
|
|
49
80
|
//#endregion
|
|
50
|
-
export {
|
|
81
|
+
export { FileWriteError, writeSelected, writeTree };
|
|
51
82
|
//# sourceMappingURL=fs-writer.mjs.map
|
package/dist/fs-writer.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fs-writer.mjs","names":["writtenFiles: string[]"],"sources":["../src/fs-writer.ts"],"sourcesContent":["import * as fs from \"node:fs/promises\";\nimport { join, dirname } from \"pathe\";\n\nimport type { VirtualFileTree, VirtualNode, VirtualFile, VirtualDirectory } from \"./types\";\n\nimport { getBinaryTemplatesRoot } from \"./core/template-reader\";\n\nconst BINARY_FILE_MARKER = \"[Binary file]\";\n\nexport async function
|
|
1
|
+
{"version":3,"file":"fs-writer.mjs","names":["writtenFiles: string[]"],"sources":["../src/fs-writer.ts"],"sourcesContent":["import { Result, TaggedError } from \"better-result\";\nimport * as fs from \"node:fs/promises\";\nimport { join, dirname } from \"pathe\";\n\nimport type { VirtualFileTree, VirtualNode, VirtualFile, VirtualDirectory } from \"./types\";\n\nimport { getBinaryTemplatesRoot } from \"./core/template-reader\";\n\nconst BINARY_FILE_MARKER = \"[Binary file]\";\n\n/**\n * Error class for filesystem write failures\n */\nexport class FileWriteError extends TaggedError(\"FileWriteError\")<{\n message: string;\n path?: string;\n cause?: unknown;\n}>() {}\n\n/**\n * Writes a virtual file tree to the filesystem.\n * Returns a Result type for type-safe error handling.\n */\nexport async function writeTree(\n tree: VirtualFileTree,\n destDir: string,\n): Promise<Result<void, FileWriteError>> {\n return Result.tryPromise({\n try: async () => {\n for (const child of tree.root.children) {\n await writeNodeInternal(child, destDir, \"\");\n }\n },\n catch: (e) => {\n if (FileWriteError.is(e)) return e;\n return new FileWriteError({\n message: e instanceof Error ? e.message : String(e),\n cause: e,\n });\n },\n });\n}\n\nasync function writeNodeInternal(\n node: VirtualNode,\n baseDir: string,\n relativePath: string,\n): Promise<void> {\n const fullPath = join(baseDir, relativePath, node.name);\n const nodePath = relativePath ? join(relativePath, node.name) : node.name;\n\n if (node.type === \"file\") {\n const fileNode = node as VirtualFile;\n await fs.mkdir(dirname(fullPath), { recursive: true });\n\n if (fileNode.content === BINARY_FILE_MARKER && fileNode.sourcePath) {\n await copyBinaryFile(fileNode.sourcePath, fullPath);\n } else if (fileNode.content !== BINARY_FILE_MARKER) {\n await fs.writeFile(fullPath, fileNode.content, \"utf-8\");\n }\n } else {\n await fs.mkdir(fullPath, { recursive: true });\n for (const child of (node as VirtualDirectory).children) {\n await writeNodeInternal(child, baseDir, nodePath);\n }\n }\n}\n\n/**\n * Writes selected files from a virtual file tree to the filesystem.\n * Returns a Result with the list of written file paths.\n */\nexport async function writeSelected(\n tree: VirtualFileTree,\n destDir: string,\n filter: (filePath: string) => boolean,\n): Promise<Result<string[], FileWriteError>> {\n return Result.tryPromise({\n try: async () => {\n const writtenFiles: string[] = [];\n await writeSelectedNodeInternal(tree.root, destDir, \"\", filter, writtenFiles);\n return writtenFiles;\n },\n catch: (e) => {\n if (FileWriteError.is(e)) return e;\n return new FileWriteError({\n message: e instanceof Error ? e.message : String(e),\n cause: e,\n });\n },\n });\n}\n\nasync function writeSelectedNodeInternal(\n node: VirtualNode,\n baseDir: string,\n relativePath: string,\n filter: (filePath: string) => boolean,\n writtenFiles: string[],\n): Promise<void> {\n const nodePath = relativePath ? `${relativePath}/${node.name}` : node.name;\n\n if (node.type === \"file\") {\n if (filter(nodePath)) {\n const fileNode = node as VirtualFile;\n await fs.mkdir(dirname(join(baseDir, nodePath)), { recursive: true });\n\n if (fileNode.content === BINARY_FILE_MARKER && fileNode.sourcePath) {\n await copyBinaryFile(fileNode.sourcePath, join(baseDir, nodePath));\n } else if (fileNode.content !== BINARY_FILE_MARKER) {\n await fs.writeFile(join(baseDir, nodePath), fileNode.content, \"utf-8\");\n }\n writtenFiles.push(nodePath);\n }\n } else {\n for (const child of (node as VirtualDirectory).children) {\n await writeSelectedNodeInternal(child, baseDir, nodePath, filter, writtenFiles);\n }\n }\n}\n\nasync function copyBinaryFile(templatePath: string, destPath: string): Promise<void> {\n const templatesRoot = getBinaryTemplatesRoot();\n const sourcePath = join(templatesRoot, templatePath);\n // Let errors propagate - they'll be caught by the Result wrapper\n await fs.copyFile(sourcePath, destPath);\n}\n"],"mappings":";;;;;;AAQA,MAAM,qBAAqB;;;;AAK3B,IAAa,iBAAb,cAAoC,YAAY,iBAAiB,EAI7D,CAAC;;;;;AAML,eAAsB,UACpB,MACA,SACuC;AACvC,QAAO,OAAO,WAAW;EACvB,KAAK,YAAY;AACf,QAAK,MAAM,SAAS,KAAK,KAAK,SAC5B,OAAM,kBAAkB,OAAO,SAAS,GAAG;;EAG/C,QAAQ,MAAM;AACZ,OAAI,eAAe,GAAG,EAAE,CAAE,QAAO;AACjC,UAAO,IAAI,eAAe;IACxB,SAAS,aAAa,QAAQ,EAAE,UAAU,OAAO,EAAE;IACnD,OAAO;IACR,CAAC;;EAEL,CAAC;;AAGJ,eAAe,kBACb,MACA,SACA,cACe;CACf,MAAM,WAAW,KAAK,SAAS,cAAc,KAAK,KAAK;CACvD,MAAM,WAAW,eAAe,KAAK,cAAc,KAAK,KAAK,GAAG,KAAK;AAErE,KAAI,KAAK,SAAS,QAAQ;EACxB,MAAM,WAAW;AACjB,QAAM,GAAG,MAAM,QAAQ,SAAS,EAAE,EAAE,WAAW,MAAM,CAAC;AAEtD,MAAI,SAAS,YAAY,sBAAsB,SAAS,WACtD,OAAM,eAAe,SAAS,YAAY,SAAS;WAC1C,SAAS,YAAY,mBAC9B,OAAM,GAAG,UAAU,UAAU,SAAS,SAAS,QAAQ;QAEpD;AACL,QAAM,GAAG,MAAM,UAAU,EAAE,WAAW,MAAM,CAAC;AAC7C,OAAK,MAAM,SAAU,KAA0B,SAC7C,OAAM,kBAAkB,OAAO,SAAS,SAAS;;;;;;;AASvD,eAAsB,cACpB,MACA,SACA,QAC2C;AAC3C,QAAO,OAAO,WAAW;EACvB,KAAK,YAAY;GACf,MAAMA,eAAyB,EAAE;AACjC,SAAM,0BAA0B,KAAK,MAAM,SAAS,IAAI,QAAQ,aAAa;AAC7E,UAAO;;EAET,QAAQ,MAAM;AACZ,OAAI,eAAe,GAAG,EAAE,CAAE,QAAO;AACjC,UAAO,IAAI,eAAe;IACxB,SAAS,aAAa,QAAQ,EAAE,UAAU,OAAO,EAAE;IACnD,OAAO;IACR,CAAC;;EAEL,CAAC;;AAGJ,eAAe,0BACb,MACA,SACA,cACA,QACA,cACe;CACf,MAAM,WAAW,eAAe,GAAG,aAAa,GAAG,KAAK,SAAS,KAAK;AAEtE,KAAI,KAAK,SAAS,QAChB;MAAI,OAAO,SAAS,EAAE;GACpB,MAAM,WAAW;AACjB,SAAM,GAAG,MAAM,QAAQ,KAAK,SAAS,SAAS,CAAC,EAAE,EAAE,WAAW,MAAM,CAAC;AAErE,OAAI,SAAS,YAAY,sBAAsB,SAAS,WACtD,OAAM,eAAe,SAAS,YAAY,KAAK,SAAS,SAAS,CAAC;YACzD,SAAS,YAAY,mBAC9B,OAAM,GAAG,UAAU,KAAK,SAAS,SAAS,EAAE,SAAS,SAAS,QAAQ;AAExE,gBAAa,KAAK,SAAS;;OAG7B,MAAK,MAAM,SAAU,KAA0B,SAC7C,OAAM,0BAA0B,OAAO,SAAS,UAAU,QAAQ,aAAa;;AAKrF,eAAe,eAAe,cAAsB,UAAiC;CAEnF,MAAM,aAAa,KADG,wBAAwB,EACP,aAAa;AAEpD,OAAM,GAAG,SAAS,YAAY,SAAS"}
|
package/dist/index.d.mts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { a as VirtualFileTree, i as VirtualFile, n as
|
|
1
|
+
import { a as VirtualFileTree, i as VirtualFile, n as GeneratorOptions, o as VirtualNode, r as VirtualDirectory, t as GeneratorError } from "./types-DUzPfsFZ.mjs";
|
|
2
|
+
import { Result, Result as Result$1 } from "better-result";
|
|
2
3
|
import * as memfs0 from "memfs";
|
|
3
4
|
import Handlebars from "handlebars";
|
|
4
5
|
import { ProjectConfig } from "@better-t-stack/types";
|
|
@@ -43,7 +44,20 @@ declare function processFileContent(filePath: string, content: string, context:
|
|
|
43
44
|
type TemplateData = Map<string, string>;
|
|
44
45
|
//#endregion
|
|
45
46
|
//#region src/generator.d.ts
|
|
46
|
-
|
|
47
|
+
/**
|
|
48
|
+
* Generates a virtual project file tree from templates and configuration.
|
|
49
|
+
* Returns a Result type for type-safe error handling.
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```typescript
|
|
53
|
+
* const result = await generate(options);
|
|
54
|
+
* result.match({
|
|
55
|
+
* ok: (tree) => console.log(`Generated ${tree.fileCount} files`),
|
|
56
|
+
* err: (error) => console.error(`Failed: ${error.message}`),
|
|
57
|
+
* });
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
declare function generate(options: GeneratorOptions): Promise<Result$1<VirtualFileTree, GeneratorError>>;
|
|
47
61
|
//#endregion
|
|
48
62
|
//#region src/templates.generated.d.ts
|
|
49
63
|
declare const EMBEDDED_TEMPLATES: Map<string, string>;
|
|
@@ -159,5 +173,5 @@ declare const dependencyVersionMap: {
|
|
|
159
173
|
};
|
|
160
174
|
type AvailableDependencies = keyof typeof dependencyVersionMap;
|
|
161
175
|
//#endregion
|
|
162
|
-
export { type AvailableDependencies, EMBEDDED_TEMPLATES,
|
|
176
|
+
export { type AvailableDependencies, EMBEDDED_TEMPLATES, GeneratorError, GeneratorOptions, Handlebars, Result, TEMPLATE_COUNT, type TemplateData, VirtualDirectory, VirtualFile, VirtualFileSystem, VirtualFileTree, VirtualNode, dependencyVersionMap, generate, isBinaryFile, processFileContent, processTemplateString, transformFilename };
|
|
163
177
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/core/virtual-fs.ts","../src/core/template-processor.ts","../src/template-handlers/utils.ts","../src/generator.ts","../src/templates.generated.ts","../src/utils/add-deps.ts"],"sourcesContent":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/core/virtual-fs.ts","../src/core/template-processor.ts","../src/template-handlers/utils.ts","../src/generator.ts","../src/templates.generated.ts","../src/utils/add-deps.ts"],"sourcesContent":[],"mappings":";;;;;;;cAOa,iBAAA;;;;;;EAAA,QAAA,CAAA,QAAA,EAAA,MAAiB,CAAA,EAAA,MAAA,GAAA,SAAA;EA6Ea,MAAA,CAAA,IAAA,EAAA,MAAA,CAAA,EAAA,OAAA;EAkCX,UAAA,CAAA,QAAA,EAAA,MAAA,CAAA,EAAA,OAAA;EAAgB,eAcrC,CAAA,OAAA,EAAA,MAAA,CAAA,EAAA,OAAA;EAAA,KAGJ,CAAA,OAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAAA,UAAA,CAAA,QAAA,EAAA,MAAA,CAAA,EAAA,OAAA;;2CAnDoC;;ECzE3B,WAAA,CAAA,CAAA,EAAA,MAAA,EAAA;EAIA,iBAAY,CAAA,CAAA,EAAA,MAAA,EAAA;EAIZ,YAAA,CAAA,CAAA,EAAA,MAAiB;EAUjB,iBAAA,CAAA,CAAA,EAAkB,MAAA;6BDyFF;;eAAgB,MAAA,CAcrC;EE9HC,KAAA,CAAA,CAAA,EF8HD,MAAA,CAGJ,GEjIoB;;;;ECyCL,QAAA,aAAQ;;;;iBFpCd,qBAAA,2BAAgD;iBAIhD,YAAA;iBAIA,iBAAA;iBAUA,kBAAA,6CAGL;;;KC1BC,YAAA,GAAe;;;;;AFC3B;;;;;;;;;ACIA;AAIA;AAIgB,iBE4BM,QAAA,CF5BW,OAAA,EE6BtB,gBF7BsB,CAAA,EE8B9B,OF9B8B,CE8BtB,QF9BsB,CE8Bf,eF9Be,EE8BE,cF9BF,CAAA,CAAA;;;cGhBpB,oBAAoB;cA09xBpB,cAAA;;;cCh9xBA;;;ELNA,SAAA,mBAAiB,EAAA,QAAA;EA6Ea,SAAA,eAAA,EAAA,SAAA;EAkCX,SAAA,oBAAA,EAAA,SAAA;EAAgB,SAcrC,6BAAA,EAAA,SAAA;EAAA,SAGJ,mBAAA,EAAA,UAAA;EAAA,SAAA,aAAA,EAAA,SAAA;;;;EC5HS,SAAA,MAAA,EAAA,QAAqB;EAIrB,SAAA,0BAAY,EAAA,QAAA;EAIZ,SAAA,EAAA,EAAA,SAAiB;EAUjB,SAAA,WAAA,EAAkB,SAAA;;;;ECvBtB,SAAA,gBAAY,EAAG,QAAG;;;;ECyCR,SAAA,yBAAQ,EAAA,QAAA;EACnB,SAAA,wBAAA,EAAA,QAAA;EACO,SAAA,gCAAA,EAAA,QAAA;EAAiB,SAAA,oBAAA,EAAA,QAAA;EAAxB,SAAA,6BAAA,EAAA,QAAA;EAAR,SAAA,QAAA,EAAA,SAAA;EAAO,SAAA,iBAAA,EAAA,QAAA;;;;EC9CG,SAAA,MAAA,EAAA,SAw9xBX;EAEW,SAAA,KAAA,EAAA,SAAc;;;;ECh9xBd,SAAA,GAAA,EAAA,SA4IH;EAEE,SAAA,aAAA,EAAqB,WAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAArB,qBAAA,gBAAqC"}
|