@sundaeswap/sprinkles 0.4.0 → 0.6.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/cjs/Sprinkle/__tests__/encryption.test.js +22 -8
- package/dist/cjs/Sprinkle/__tests__/encryption.test.js.map +1 -1
- package/dist/cjs/Sprinkle/__tests__/enhancements.test.js +37 -46
- package/dist/cjs/Sprinkle/__tests__/enhancements.test.js.map +1 -1
- package/dist/cjs/Sprinkle/__tests__/field-utils.test.js +170 -0
- package/dist/cjs/Sprinkle/__tests__/field-utils.test.js.map +1 -0
- package/dist/cjs/Sprinkle/__tests__/fill-in-struct.test.js +283 -81
- package/dist/cjs/Sprinkle/__tests__/fill-in-struct.test.js.map +1 -1
- package/dist/cjs/Sprinkle/__tests__/formatting.test.js +97 -0
- package/dist/cjs/Sprinkle/__tests__/formatting.test.js.map +1 -0
- package/dist/cjs/Sprinkle/__tests__/show-menu.test.js +97 -7
- package/dist/cjs/Sprinkle/__tests__/show-menu.test.js.map +1 -1
- package/dist/cjs/Sprinkle/__tests__/tx-dialog.test.js +30 -0
- package/dist/cjs/Sprinkle/__tests__/tx-dialog.test.js.map +1 -1
- package/dist/cjs/Sprinkle/encryption.js +131 -0
- package/dist/cjs/Sprinkle/encryption.js.map +1 -0
- package/dist/cjs/Sprinkle/index.js +427 -438
- package/dist/cjs/Sprinkle/index.js.map +1 -1
- package/dist/cjs/Sprinkle/menus/array-menu.js +195 -0
- package/dist/cjs/Sprinkle/menus/array-menu.js.map +1 -0
- package/dist/cjs/Sprinkle/menus/field-menu.js +161 -0
- package/dist/cjs/Sprinkle/menus/field-menu.js.map +1 -0
- package/dist/cjs/Sprinkle/menus/index.js +33 -0
- package/dist/cjs/Sprinkle/menus/index.js.map +1 -0
- package/dist/cjs/Sprinkle/menus/object-menu.js +324 -0
- package/dist/cjs/Sprinkle/menus/object-menu.js.map +1 -0
- package/dist/cjs/Sprinkle/prompts.js +459 -0
- package/dist/cjs/Sprinkle/prompts.js.map +1 -0
- package/dist/cjs/Sprinkle/schemas.js +97 -0
- package/dist/cjs/Sprinkle/schemas.js.map +1 -0
- package/dist/cjs/Sprinkle/tx-dialog.js +101 -0
- package/dist/cjs/Sprinkle/tx-dialog.js.map +1 -0
- package/dist/cjs/Sprinkle/type-guards.js +89 -0
- package/dist/cjs/Sprinkle/type-guards.js.map +1 -0
- package/dist/cjs/Sprinkle/types.js +73 -0
- package/dist/cjs/Sprinkle/types.js.map +1 -0
- package/dist/cjs/Sprinkle/utils/field-utils.js +154 -0
- package/dist/cjs/Sprinkle/utils/field-utils.js.map +1 -0
- package/dist/cjs/Sprinkle/utils/formatting.js +126 -0
- package/dist/cjs/Sprinkle/utils/formatting.js.map +1 -0
- package/dist/cjs/Sprinkle/utils/index.js +56 -0
- package/dist/cjs/Sprinkle/utils/index.js.map +1 -0
- package/dist/cjs/Sprinkle/wallet.js +98 -0
- package/dist/cjs/Sprinkle/wallet.js.map +1 -0
- package/dist/esm/Sprinkle/__tests__/encryption.test.js +22 -8
- package/dist/esm/Sprinkle/__tests__/encryption.test.js.map +1 -1
- package/dist/esm/Sprinkle/__tests__/enhancements.test.js +37 -46
- package/dist/esm/Sprinkle/__tests__/enhancements.test.js.map +1 -1
- package/dist/esm/Sprinkle/__tests__/field-utils.test.js +168 -0
- package/dist/esm/Sprinkle/__tests__/field-utils.test.js.map +1 -0
- package/dist/esm/Sprinkle/__tests__/fill-in-struct.test.js +284 -82
- package/dist/esm/Sprinkle/__tests__/fill-in-struct.test.js.map +1 -1
- package/dist/esm/Sprinkle/__tests__/formatting.test.js +95 -0
- package/dist/esm/Sprinkle/__tests__/formatting.test.js.map +1 -0
- package/dist/esm/Sprinkle/__tests__/show-menu.test.js +98 -8
- package/dist/esm/Sprinkle/__tests__/show-menu.test.js.map +1 -1
- package/dist/esm/Sprinkle/__tests__/tx-dialog.test.js +30 -0
- package/dist/esm/Sprinkle/__tests__/tx-dialog.test.js.map +1 -1
- package/dist/esm/Sprinkle/encryption.js +117 -0
- package/dist/esm/Sprinkle/encryption.js.map +1 -0
- package/dist/esm/Sprinkle/index.js +248 -425
- package/dist/esm/Sprinkle/index.js.map +1 -1
- package/dist/esm/Sprinkle/menus/array-menu.js +190 -0
- package/dist/esm/Sprinkle/menus/array-menu.js.map +1 -0
- package/dist/esm/Sprinkle/menus/field-menu.js +155 -0
- package/dist/esm/Sprinkle/menus/field-menu.js.map +1 -0
- package/dist/esm/Sprinkle/menus/index.js +8 -0
- package/dist/esm/Sprinkle/menus/index.js.map +1 -0
- package/dist/esm/Sprinkle/menus/object-menu.js +318 -0
- package/dist/esm/Sprinkle/menus/object-menu.js.map +1 -0
- package/dist/esm/Sprinkle/prompts.js +443 -0
- package/dist/esm/Sprinkle/prompts.js.map +1 -0
- package/dist/esm/Sprinkle/schemas.js +91 -0
- package/dist/esm/Sprinkle/schemas.js.map +1 -0
- package/dist/esm/Sprinkle/tx-dialog.js +90 -0
- package/dist/esm/Sprinkle/tx-dialog.js.map +1 -0
- package/dist/esm/Sprinkle/type-guards.js +66 -0
- package/dist/esm/Sprinkle/type-guards.js.map +1 -0
- package/dist/esm/Sprinkle/types.js +66 -0
- package/dist/esm/Sprinkle/types.js.map +1 -0
- package/dist/esm/Sprinkle/utils/field-utils.js +145 -0
- package/dist/esm/Sprinkle/utils/field-utils.js.map +1 -0
- package/dist/esm/Sprinkle/utils/formatting.js +118 -0
- package/dist/esm/Sprinkle/utils/formatting.js.map +1 -0
- package/dist/esm/Sprinkle/utils/index.js +7 -0
- package/dist/esm/Sprinkle/utils/index.js.map +1 -0
- package/dist/esm/Sprinkle/wallet.js +90 -0
- package/dist/esm/Sprinkle/wallet.js.map +1 -0
- package/dist/types/Sprinkle/encryption.d.ts +43 -0
- package/dist/types/Sprinkle/encryption.d.ts.map +1 -0
- package/dist/types/Sprinkle/index.d.ts +17 -177
- package/dist/types/Sprinkle/index.d.ts.map +1 -1
- package/dist/types/Sprinkle/menus/array-menu.d.ts +31 -0
- package/dist/types/Sprinkle/menus/array-menu.d.ts.map +1 -0
- package/dist/types/Sprinkle/menus/field-menu.d.ts +34 -0
- package/dist/types/Sprinkle/menus/field-menu.d.ts.map +1 -0
- package/dist/types/Sprinkle/menus/index.d.ts +10 -0
- package/dist/types/Sprinkle/menus/index.d.ts.map +1 -0
- package/dist/types/Sprinkle/menus/object-menu.d.ts +34 -0
- package/dist/types/Sprinkle/menus/object-menu.d.ts.map +1 -0
- package/dist/types/Sprinkle/prompts.d.ts +119 -0
- package/dist/types/Sprinkle/prompts.d.ts.map +1 -0
- package/dist/types/Sprinkle/schemas.d.ts +125 -0
- package/dist/types/Sprinkle/schemas.d.ts.map +1 -0
- package/dist/types/Sprinkle/tx-dialog.d.ts +37 -0
- package/dist/types/Sprinkle/tx-dialog.d.ts.map +1 -0
- package/dist/types/Sprinkle/type-guards.d.ts +45 -0
- package/dist/types/Sprinkle/type-guards.d.ts.map +1 -0
- package/dist/types/Sprinkle/types.d.ts +115 -0
- package/dist/types/Sprinkle/types.d.ts.map +1 -0
- package/dist/types/Sprinkle/utils/field-utils.d.ts +47 -0
- package/dist/types/Sprinkle/utils/field-utils.d.ts.map +1 -0
- package/dist/types/Sprinkle/utils/formatting.d.ts +30 -0
- package/dist/types/Sprinkle/utils/formatting.d.ts.map +1 -0
- package/dist/types/Sprinkle/wallet.d.ts +27 -0
- package/dist/types/Sprinkle/wallet.d.ts.map +1 -0
- package/dist/types/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/Sprinkle/__tests__/encryption.test.ts +23 -8
- package/src/Sprinkle/__tests__/enhancements.test.ts +34 -47
- package/src/Sprinkle/__tests__/field-utils.test.ts +191 -0
- package/src/Sprinkle/__tests__/fill-in-struct.test.ts +301 -86
- package/src/Sprinkle/__tests__/formatting.test.ts +115 -0
- package/src/Sprinkle/__tests__/show-menu.test.ts +102 -8
- package/src/Sprinkle/__tests__/tx-dialog.test.ts +30 -0
- package/src/Sprinkle/encryption.ts +130 -0
- package/src/Sprinkle/index.ts +368 -598
- package/src/Sprinkle/menus/array-menu.ts +191 -0
- package/src/Sprinkle/menus/field-menu.ts +145 -0
- package/src/Sprinkle/menus/index.ts +12 -0
- package/src/Sprinkle/menus/object-menu.ts +336 -0
- package/src/Sprinkle/prompts.ts +551 -0
- package/src/Sprinkle/schemas.ts +111 -0
- package/src/Sprinkle/tx-dialog.ts +100 -0
- package/src/Sprinkle/type-guards.ts +93 -0
- package/src/Sprinkle/types.ts +116 -0
- package/src/Sprinkle/utils/field-utils.ts +158 -0
- package/src/Sprinkle/utils/formatting.ts +127 -0
- package/src/Sprinkle/utils/index.ts +17 -0
- package/src/Sprinkle/wallet.ts +133 -0
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _bunTest = require("bun:test");
|
|
4
|
+
var _formatting = require("../utils/formatting.js");
|
|
5
|
+
(0, _bunTest.describe)("formatValuePreview", () => {
|
|
6
|
+
(0, _bunTest.test)("returns [not set] for undefined", () => {
|
|
7
|
+
(0, _bunTest.expect)((0, _formatting.formatValuePreview)(undefined)).toBe("[not set]");
|
|
8
|
+
});
|
|
9
|
+
(0, _bunTest.test)("returns null for null", () => {
|
|
10
|
+
(0, _bunTest.expect)((0, _formatting.formatValuePreview)(null)).toBe("null");
|
|
11
|
+
});
|
|
12
|
+
(0, _bunTest.test)("formats short strings with quotes", () => {
|
|
13
|
+
(0, _bunTest.expect)((0, _formatting.formatValuePreview)("hello")).toBe('"hello"');
|
|
14
|
+
});
|
|
15
|
+
(0, _bunTest.test)("truncates long strings", () => {
|
|
16
|
+
const longString = "a".repeat(50);
|
|
17
|
+
const result = (0, _formatting.formatValuePreview)(longString, 40);
|
|
18
|
+
(0, _bunTest.expect)(result.length).toBeLessThanOrEqual(40);
|
|
19
|
+
(0, _bunTest.expect)(result).toContain("...");
|
|
20
|
+
});
|
|
21
|
+
(0, _bunTest.test)("formats numbers", () => {
|
|
22
|
+
(0, _bunTest.expect)((0, _formatting.formatValuePreview)(42)).toBe("42");
|
|
23
|
+
(0, _bunTest.expect)((0, _formatting.formatValuePreview)(3.14)).toBe("3.14");
|
|
24
|
+
});
|
|
25
|
+
(0, _bunTest.test)("formats bigints", () => {
|
|
26
|
+
(0, _bunTest.expect)((0, _formatting.formatValuePreview)(42n)).toBe("42");
|
|
27
|
+
});
|
|
28
|
+
(0, _bunTest.test)("formats booleans", () => {
|
|
29
|
+
(0, _bunTest.expect)((0, _formatting.formatValuePreview)(true)).toBe("true");
|
|
30
|
+
(0, _bunTest.expect)((0, _formatting.formatValuePreview)(false)).toBe("false");
|
|
31
|
+
});
|
|
32
|
+
(0, _bunTest.test)("formats arrays with item count", () => {
|
|
33
|
+
(0, _bunTest.expect)((0, _formatting.formatValuePreview)([])).toBe("[0 items]");
|
|
34
|
+
(0, _bunTest.expect)((0, _formatting.formatValuePreview)([1])).toBe("[1 item]");
|
|
35
|
+
(0, _bunTest.expect)((0, _formatting.formatValuePreview)([1, 2, 3])).toBe("[3 items]");
|
|
36
|
+
});
|
|
37
|
+
(0, _bunTest.test)("formats empty objects", () => {
|
|
38
|
+
(0, _bunTest.expect)((0, _formatting.formatValuePreview)({})).toBe("{}");
|
|
39
|
+
});
|
|
40
|
+
(0, _bunTest.test)("formats single-key objects", () => {
|
|
41
|
+
const result = (0, _formatting.formatValuePreview)({
|
|
42
|
+
Signature: "abc123"
|
|
43
|
+
});
|
|
44
|
+
(0, _bunTest.expect)(result).toContain("Signature");
|
|
45
|
+
(0, _bunTest.expect)(result).toContain("abc123");
|
|
46
|
+
});
|
|
47
|
+
(0, _bunTest.test)("formats multi-key objects with abbreviation", () => {
|
|
48
|
+
const result = (0, _formatting.formatValuePreview)({
|
|
49
|
+
a: 1,
|
|
50
|
+
b: 2,
|
|
51
|
+
c: 3
|
|
52
|
+
});
|
|
53
|
+
(0, _bunTest.expect)(result).toContain("a");
|
|
54
|
+
(0, _bunTest.expect)(result).toContain("+2");
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
(0, _bunTest.describe)("formatPath", () => {
|
|
58
|
+
(0, _bunTest.test)("returns empty string for root-only path", () => {
|
|
59
|
+
(0, _bunTest.expect)((0, _formatting.formatPath)(["root"])).toBe("");
|
|
60
|
+
});
|
|
61
|
+
(0, _bunTest.test)("strips root prefix", () => {
|
|
62
|
+
(0, _bunTest.expect)((0, _formatting.formatPath)(["root", "name"])).toBe("name");
|
|
63
|
+
});
|
|
64
|
+
(0, _bunTest.test)("joins multiple segments with dots", () => {
|
|
65
|
+
(0, _bunTest.expect)((0, _formatting.formatPath)(["root", "settings", "permissions"])).toBe("settings.permissions");
|
|
66
|
+
});
|
|
67
|
+
(0, _bunTest.test)("handles paths without root", () => {
|
|
68
|
+
(0, _bunTest.expect)((0, _formatting.formatPath)(["settings", "name"])).toBe("settings.name");
|
|
69
|
+
});
|
|
70
|
+
(0, _bunTest.test)("handles empty path", () => {
|
|
71
|
+
(0, _bunTest.expect)((0, _formatting.formatPath)([])).toBe("");
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
(0, _bunTest.describe)("formatBreadcrumb", () => {
|
|
75
|
+
(0, _bunTest.test)("returns empty string for root-only path", () => {
|
|
76
|
+
(0, _bunTest.expect)((0, _formatting.formatBreadcrumb)(["root"])).toBe("");
|
|
77
|
+
});
|
|
78
|
+
(0, _bunTest.test)("strips root prefix", () => {
|
|
79
|
+
(0, _bunTest.expect)((0, _formatting.formatBreadcrumb)(["root", "name"])).toBe("name");
|
|
80
|
+
});
|
|
81
|
+
(0, _bunTest.test)("joins segments with arrow", () => {
|
|
82
|
+
const result = (0, _formatting.formatBreadcrumb)(["root", "settings", "permissions"]);
|
|
83
|
+
(0, _bunTest.expect)(result).toContain("settings");
|
|
84
|
+
(0, _bunTest.expect)(result).toContain("\u2192"); // Unicode right arrow
|
|
85
|
+
(0, _bunTest.expect)(result).toContain("permissions");
|
|
86
|
+
});
|
|
87
|
+
(0, _bunTest.test)("truncates long paths from left", () => {
|
|
88
|
+
const path = ["root", "a", "b", "c", "d", "e", "final"];
|
|
89
|
+
const result = (0, _formatting.formatBreadcrumb)(path, 20);
|
|
90
|
+
(0, _bunTest.expect)(result).toContain("...");
|
|
91
|
+
(0, _bunTest.expect)(result).toContain("final");
|
|
92
|
+
});
|
|
93
|
+
(0, _bunTest.test)("handles empty path", () => {
|
|
94
|
+
(0, _bunTest.expect)((0, _formatting.formatBreadcrumb)([])).toBe("");
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
//# sourceMappingURL=formatting.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatting.test.js","names":["_bunTest","require","_formatting","describe","test","expect","formatValuePreview","undefined","toBe","longString","repeat","result","length","toBeLessThanOrEqual","toContain","Signature","a","b","c","formatPath","formatBreadcrumb","path"],"sources":["../../../../src/Sprinkle/__tests__/formatting.test.ts"],"sourcesContent":["import { describe, expect, test } from \"bun:test\";\nimport {\n formatValuePreview,\n formatPath,\n formatBreadcrumb,\n} from \"../utils/formatting.js\";\n\ndescribe(\"formatValuePreview\", () => {\n test(\"returns [not set] for undefined\", () => {\n expect(formatValuePreview(undefined)).toBe(\"[not set]\");\n });\n\n test(\"returns null for null\", () => {\n expect(formatValuePreview(null)).toBe(\"null\");\n });\n\n test(\"formats short strings with quotes\", () => {\n expect(formatValuePreview(\"hello\")).toBe('\"hello\"');\n });\n\n test(\"truncates long strings\", () => {\n const longString = \"a\".repeat(50);\n const result = formatValuePreview(longString, 40);\n expect(result.length).toBeLessThanOrEqual(40);\n expect(result).toContain(\"...\");\n });\n\n test(\"formats numbers\", () => {\n expect(formatValuePreview(42)).toBe(\"42\");\n expect(formatValuePreview(3.14)).toBe(\"3.14\");\n });\n\n test(\"formats bigints\", () => {\n expect(formatValuePreview(42n)).toBe(\"42\");\n });\n\n test(\"formats booleans\", () => {\n expect(formatValuePreview(true)).toBe(\"true\");\n expect(formatValuePreview(false)).toBe(\"false\");\n });\n\n test(\"formats arrays with item count\", () => {\n expect(formatValuePreview([])).toBe(\"[0 items]\");\n expect(formatValuePreview([1])).toBe(\"[1 item]\");\n expect(formatValuePreview([1, 2, 3])).toBe(\"[3 items]\");\n });\n\n test(\"formats empty objects\", () => {\n expect(formatValuePreview({})).toBe(\"{}\");\n });\n\n test(\"formats single-key objects\", () => {\n const result = formatValuePreview({ Signature: \"abc123\" });\n expect(result).toContain(\"Signature\");\n expect(result).toContain(\"abc123\");\n });\n\n test(\"formats multi-key objects with abbreviation\", () => {\n const result = formatValuePreview({ a: 1, b: 2, c: 3 });\n expect(result).toContain(\"a\");\n expect(result).toContain(\"+2\");\n });\n});\n\ndescribe(\"formatPath\", () => {\n test(\"returns empty string for root-only path\", () => {\n expect(formatPath([\"root\"])).toBe(\"\");\n });\n\n test(\"strips root prefix\", () => {\n expect(formatPath([\"root\", \"name\"])).toBe(\"name\");\n });\n\n test(\"joins multiple segments with dots\", () => {\n expect(formatPath([\"root\", \"settings\", \"permissions\"])).toBe(\n \"settings.permissions\",\n );\n });\n\n test(\"handles paths without root\", () => {\n expect(formatPath([\"settings\", \"name\"])).toBe(\"settings.name\");\n });\n\n test(\"handles empty path\", () => {\n expect(formatPath([])).toBe(\"\");\n });\n});\n\ndescribe(\"formatBreadcrumb\", () => {\n test(\"returns empty string for root-only path\", () => {\n expect(formatBreadcrumb([\"root\"])).toBe(\"\");\n });\n\n test(\"strips root prefix\", () => {\n expect(formatBreadcrumb([\"root\", \"name\"])).toBe(\"name\");\n });\n\n test(\"joins segments with arrow\", () => {\n const result = formatBreadcrumb([\"root\", \"settings\", \"permissions\"]);\n expect(result).toContain(\"settings\");\n expect(result).toContain(\"\\u2192\"); // Unicode right arrow\n expect(result).toContain(\"permissions\");\n });\n\n test(\"truncates long paths from left\", () => {\n const path = [\"root\", \"a\", \"b\", \"c\", \"d\", \"e\", \"final\"];\n const result = formatBreadcrumb(path, 20);\n expect(result).toContain(\"...\");\n expect(result).toContain(\"final\");\n });\n\n test(\"handles empty path\", () => {\n expect(formatBreadcrumb([])).toBe(\"\");\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -5,10 +5,20 @@ var _index = require("../index.js");
|
|
|
5
5
|
var _testHelpers = require("./test-helpers.js");
|
|
6
6
|
const mockSelect = (0, _bunTest.mock)();
|
|
7
7
|
const mockInput = (0, _bunTest.mock)();
|
|
8
|
+
const mockSelectCancellable = (0, _bunTest.mock)();
|
|
9
|
+
const mockInputCancellable = (0, _bunTest.mock)();
|
|
8
10
|
_bunTest.mock.module("@inquirer/prompts", () => ({
|
|
9
11
|
select: mockSelect,
|
|
10
12
|
input: mockInput
|
|
11
13
|
}));
|
|
14
|
+
_bunTest.mock.module("../prompts.js", () => ({
|
|
15
|
+
selectCancellable: mockSelectCancellable,
|
|
16
|
+
inputCancellable: mockInputCancellable,
|
|
17
|
+
passwordCancellable: (0, _bunTest.mock)(),
|
|
18
|
+
confirmCancellable: (0, _bunTest.mock)(),
|
|
19
|
+
searchCancellable: (0, _bunTest.mock)(),
|
|
20
|
+
select: mockSelectCancellable
|
|
21
|
+
}));
|
|
12
22
|
(0, _bunTest.describe)("showMenu", () => {
|
|
13
23
|
let sprinkle;
|
|
14
24
|
(0, _bunTest.beforeEach)(() => {
|
|
@@ -20,10 +30,11 @@ _bunTest.mock.module("@inquirer/prompts", () => ({
|
|
|
20
30
|
name: "test"
|
|
21
31
|
};
|
|
22
32
|
mockSelect.mockClear();
|
|
33
|
+
mockSelectCancellable.mockClear();
|
|
23
34
|
mockInput.mockClear();
|
|
24
35
|
});
|
|
25
36
|
(0, _bunTest.test)("exits when Exit is selected on main menu", async () => {
|
|
26
|
-
|
|
37
|
+
mockSelectCancellable.mockResolvedValueOnce(-1);
|
|
27
38
|
const menu = {
|
|
28
39
|
title: "Test Menu",
|
|
29
40
|
items: [{
|
|
@@ -35,7 +46,7 @@ _bunTest.mock.module("@inquirer/prompts", () => ({
|
|
|
35
46
|
});
|
|
36
47
|
(0, _bunTest.test)("executes action and re-shows menu", async () => {
|
|
37
48
|
const actionFn = (0, _bunTest.mock)(async () => {});
|
|
38
|
-
|
|
49
|
+
mockSelectCancellable.mockResolvedValueOnce(0).mockResolvedValueOnce(-1);
|
|
39
50
|
const menu = {
|
|
40
51
|
title: "Test Menu",
|
|
41
52
|
items: [{
|
|
@@ -47,7 +58,7 @@ _bunTest.mock.module("@inquirer/prompts", () => ({
|
|
|
47
58
|
(0, _bunTest.expect)(actionFn).toHaveBeenCalledTimes(1);
|
|
48
59
|
});
|
|
49
60
|
(0, _bunTest.test)("main menu includes Settings & Profiles submenu and Exit", async () => {
|
|
50
|
-
|
|
61
|
+
mockSelectCancellable.mockResolvedValueOnce(-1);
|
|
51
62
|
const menu = {
|
|
52
63
|
title: "Test",
|
|
53
64
|
items: [{
|
|
@@ -56,7 +67,7 @@ _bunTest.mock.module("@inquirer/prompts", () => ({
|
|
|
56
67
|
}]
|
|
57
68
|
};
|
|
58
69
|
await sprinkle.showMenu(menu);
|
|
59
|
-
const choices =
|
|
70
|
+
const choices = mockSelectCancellable.mock.calls[0][0].choices;
|
|
60
71
|
const names = choices.map(c => c.name);
|
|
61
72
|
(0, _bunTest.expect)(names).toContain("Settings & Profiles");
|
|
62
73
|
(0, _bunTest.expect)(names).toContain("Exit");
|
|
@@ -65,7 +76,7 @@ _bunTest.mock.module("@inquirer/prompts", () => ({
|
|
|
65
76
|
(0, _bunTest.expect)(names).not.toContain("Edit settings");
|
|
66
77
|
});
|
|
67
78
|
(0, _bunTest.test)("submenu includes Back instead of Exit", async () => {
|
|
68
|
-
|
|
79
|
+
mockSelectCancellable.mockResolvedValueOnce(0).mockResolvedValueOnce(-1).mockResolvedValueOnce(-1);
|
|
69
80
|
const menu = {
|
|
70
81
|
title: "Main",
|
|
71
82
|
items: [{
|
|
@@ -77,7 +88,7 @@ _bunTest.mock.module("@inquirer/prompts", () => ({
|
|
|
77
88
|
}]
|
|
78
89
|
};
|
|
79
90
|
await sprinkle.showMenu(menu);
|
|
80
|
-
const subChoices =
|
|
91
|
+
const subChoices = mockSelectCancellable.mock.calls[1][0].choices;
|
|
81
92
|
const subNames = subChoices.map(c => c.name);
|
|
82
93
|
(0, _bunTest.expect)(subNames).toContain("Back");
|
|
83
94
|
(0, _bunTest.expect)(subNames).not.toContain("Exit");
|
|
@@ -86,7 +97,7 @@ _bunTest.mock.module("@inquirer/prompts", () => ({
|
|
|
86
97
|
sprinkle.settings = {
|
|
87
98
|
name: "original"
|
|
88
99
|
};
|
|
89
|
-
|
|
100
|
+
mockSelectCancellable.mockResolvedValueOnce(0).mockResolvedValueOnce(-1);
|
|
90
101
|
const menu = {
|
|
91
102
|
title: "Test",
|
|
92
103
|
items: [{
|
|
@@ -104,5 +115,84 @@ _bunTest.mock.module("@inquirer/prompts", () => ({
|
|
|
104
115
|
name: "updated"
|
|
105
116
|
});
|
|
106
117
|
});
|
|
118
|
+
(0, _bunTest.test)("Settings submenu includes View settings option", async () => {
|
|
119
|
+
// Select "Settings & Profiles" (-5), then "Back" (-1), then "Exit" (-1)
|
|
120
|
+
mockSelectCancellable.mockResolvedValueOnce(-5) // Settings & Profiles
|
|
121
|
+
.mockResolvedValueOnce(-1) // Back
|
|
122
|
+
.mockResolvedValueOnce(-1); // Exit
|
|
123
|
+
|
|
124
|
+
const menu = {
|
|
125
|
+
title: "Test",
|
|
126
|
+
items: [{
|
|
127
|
+
title: "Action",
|
|
128
|
+
action: async () => {}
|
|
129
|
+
}]
|
|
130
|
+
};
|
|
131
|
+
await sprinkle.showMenu(menu);
|
|
132
|
+
|
|
133
|
+
// Second call is the settings submenu
|
|
134
|
+
const settingsChoices = mockSelectCancellable.mock.calls[1][0].choices;
|
|
135
|
+
const settingsNames = settingsChoices.map(c => c.name);
|
|
136
|
+
(0, _bunTest.expect)(settingsNames).toContain("View settings");
|
|
137
|
+
});
|
|
138
|
+
(0, _bunTest.test)("View settings displays masked settings", async () => {
|
|
139
|
+
const consoleSpy = (0, _bunTest.spyOn)(console, "log").mockImplementation(() => {});
|
|
140
|
+
|
|
141
|
+
// Select "Settings & Profiles" (-5), then "View settings" (0),
|
|
142
|
+
// then "Continue" for the press Enter prompt, then "Back" (-1), then "Exit" (-1)
|
|
143
|
+
mockSelectCancellable.mockResolvedValueOnce(-5) // Settings & Profiles
|
|
144
|
+
.mockResolvedValueOnce(0) // View settings (first item)
|
|
145
|
+
.mockResolvedValueOnce("continue") // Press Enter to continue
|
|
146
|
+
.mockResolvedValueOnce(-1) // Back
|
|
147
|
+
.mockResolvedValueOnce(-1); // Exit
|
|
148
|
+
|
|
149
|
+
const menu = {
|
|
150
|
+
title: "Test",
|
|
151
|
+
items: [{
|
|
152
|
+
title: "Action",
|
|
153
|
+
action: async () => {}
|
|
154
|
+
}]
|
|
155
|
+
};
|
|
156
|
+
await sprinkle.showMenu(menu);
|
|
157
|
+
|
|
158
|
+
// Should have called console.log with the settings (find the JSON output among breadcrumbs)
|
|
159
|
+
(0, _bunTest.expect)(consoleSpy).toHaveBeenCalled();
|
|
160
|
+
const jsonOutput = consoleSpy.mock.calls.find(call => call[0] && typeof call[0] === "string" && call[0].includes('"name"'));
|
|
161
|
+
(0, _bunTest.expect)(jsonOutput).toBeDefined();
|
|
162
|
+
consoleSpy.mockRestore();
|
|
163
|
+
});
|
|
164
|
+
(0, _bunTest.test)("Create profile restores state when FillInStruct is cancelled", async () => {
|
|
165
|
+
// Capture original state
|
|
166
|
+
const originalProfileId = sprinkle.currentProfile?.id;
|
|
167
|
+
const originalSettings = {
|
|
168
|
+
...sprinkle.settings
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
// Settings menu indices: 0=View, 1=Edit, 2=Switch, 3=Create new profile
|
|
172
|
+
mockSelectCancellable.mockResolvedValueOnce(-5) // Settings & Profiles
|
|
173
|
+
.mockResolvedValueOnce(3); // Create new profile
|
|
174
|
+
|
|
175
|
+
// promptProfileMeta: name then description
|
|
176
|
+
mockInputCancellable.mockResolvedValueOnce("New Profile") // Profile name
|
|
177
|
+
.mockResolvedValueOnce("") // Profile description
|
|
178
|
+
.mockResolvedValueOnce(null); // Cancel during FillInStruct (name field)
|
|
179
|
+
|
|
180
|
+
// After cancellation, back out of menus
|
|
181
|
+
mockSelectCancellable.mockResolvedValueOnce(-1) // Back from settings
|
|
182
|
+
.mockResolvedValueOnce(-1); // Exit
|
|
183
|
+
|
|
184
|
+
const menu = {
|
|
185
|
+
title: "Test",
|
|
186
|
+
items: [{
|
|
187
|
+
title: "Action",
|
|
188
|
+
action: async () => {}
|
|
189
|
+
}]
|
|
190
|
+
};
|
|
191
|
+
await sprinkle.showMenu(menu);
|
|
192
|
+
|
|
193
|
+
// State should be restored to original
|
|
194
|
+
(0, _bunTest.expect)(sprinkle.currentProfile?.id).toBe(originalProfileId);
|
|
195
|
+
(0, _bunTest.expect)(sprinkle.settings).toEqual(originalSettings);
|
|
196
|
+
});
|
|
107
197
|
});
|
|
108
198
|
//# sourceMappingURL=show-menu.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"show-menu.test.js","names":["_bunTest","require","_index","_testHelpers","mockSelect","mock","mockInput","module","select","input","describe","sprinkle","beforeEach","schema","Type","Object","name","String","withProfile","Sprinkle","settings","mockClear","test","mockResolvedValueOnce","menu","title","items","action","showMenu","actionFn","expect","toHaveBeenCalledTimes","choices","calls","names","map","c","toContain","not","subChoices","subNames","s","toEqual"],"sources":["../../../../src/Sprinkle/__tests__/show-menu.test.ts"],"sourcesContent":["import { describe, expect, test, mock, beforeEach } from \"bun:test\";\nimport { Sprinkle, Type, type IMenu } from \"../index.js\";\nimport { withProfile } from \"./test-helpers.js\";\n\nconst mockSelect = mock();\nconst mockInput = mock();\n\nmock.module(\"@inquirer/prompts\", () => ({\n select: mockSelect,\n input: mockInput,\n}));\n\ndescribe(\"showMenu\", () => {\n let sprinkle: Sprinkle<any>;\n\n beforeEach(() => {\n const schema = Type.Object({ name: Type.String() });\n sprinkle = withProfile(new Sprinkle(schema, \"/tmp/test\"));\n sprinkle.settings = { name: \"test\" } as any;\n mockSelect.mockClear();\n mockInput.mockClear();\n });\n\n test(\"exits when Exit is selected on main menu\", async () => {\n mockSelect.mockResolvedValueOnce(-1);\n\n const menu: IMenu<any> = {\n title: \"Test Menu\",\n items: [\n {\n title: \"Action 1\",\n action: async () => {},\n },\n ],\n };\n\n await sprinkle.showMenu(menu);\n });\n\n test(\"executes action and re-shows menu\", async () => {\n const actionFn = mock(async () => {});\n\n mockSelect.mockResolvedValueOnce(0).mockResolvedValueOnce(-1);\n\n const menu: IMenu<any> = {\n title: \"Test Menu\",\n items: [\n {\n title: \"My Action\",\n action: actionFn,\n },\n ],\n };\n\n await sprinkle.showMenu(menu);\n expect(actionFn).toHaveBeenCalledTimes(1);\n });\n\n test(\"main menu includes Settings & Profiles submenu and Exit\", async () => {\n mockSelect.mockResolvedValueOnce(-1);\n\n const menu: IMenu<any> = {\n title: \"Test\",\n items: [{ title: \"Action\", action: async () => {} }],\n };\n\n await sprinkle.showMenu(menu);\n\n const choices = mockSelect.mock.calls[0][0].choices;\n const names = choices.map((c: any) => c.name);\n expect(names).toContain(\"Settings & Profiles\");\n expect(names).toContain(\"Exit\");\n expect(names).not.toContain(\"Switch profile\");\n expect(names).not.toContain(\"Manage profiles\");\n expect(names).not.toContain(\"Edit settings\");\n });\n\n test(\"submenu includes Back instead of Exit\", async () => {\n mockSelect\n .mockResolvedValueOnce(0)\n .mockResolvedValueOnce(-1)\n .mockResolvedValueOnce(-1);\n\n const menu: IMenu<any> = {\n title: \"Main\",\n items: [\n {\n title: \"Sub\",\n items: [{ title: \"Sub Action\", action: async () => {} }],\n },\n ],\n };\n\n await sprinkle.showMenu(menu);\n\n const subChoices = mockSelect.mock.calls[1][0].choices;\n const subNames = subChoices.map((c: any) => c.name);\n expect(subNames).toContain(\"Back\");\n expect(subNames).not.toContain(\"Exit\");\n });\n\n test(\"action returning sprinkle instance saves settings\", async () => {\n sprinkle.settings = { name: \"original\" } as any;\n\n mockSelect.mockResolvedValueOnce(0).mockResolvedValueOnce(-1);\n\n const menu: IMenu<any> = {\n title: \"Test\",\n items: [\n {\n title: \"Update\",\n action: async (s: Sprinkle<any>) => {\n s.settings = { name: \"updated\" } as any;\n return s;\n },\n },\n ],\n };\n\n await sprinkle.showMenu(menu);\n expect(sprinkle.settings).toEqual({ name: \"updated\" });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"show-menu.test.js","names":["_bunTest","require","_index","_testHelpers","mockSelect","mock","mockInput","mockSelectCancellable","mockInputCancellable","module","select","input","selectCancellable","inputCancellable","passwordCancellable","confirmCancellable","searchCancellable","describe","sprinkle","beforeEach","schema","Type","Object","name","String","withProfile","Sprinkle","settings","mockClear","test","mockResolvedValueOnce","menu","title","items","action","showMenu","actionFn","expect","toHaveBeenCalledTimes","choices","calls","names","map","c","toContain","not","subChoices","subNames","s","toEqual","settingsChoices","settingsNames","consoleSpy","spyOn","console","mockImplementation","toHaveBeenCalled","jsonOutput","find","call","includes","toBeDefined","mockRestore","originalProfileId","currentProfile","id","originalSettings","toBe"],"sources":["../../../../src/Sprinkle/__tests__/show-menu.test.ts"],"sourcesContent":["import { describe, expect, test, mock, beforeEach, spyOn } from \"bun:test\";\nimport { Sprinkle, Type, type IMenu } from \"../index.js\";\nimport { withProfile } from \"./test-helpers.js\";\n\nconst mockSelect = mock();\nconst mockInput = mock();\nconst mockSelectCancellable = mock();\nconst mockInputCancellable = mock();\n\nmock.module(\"@inquirer/prompts\", () => ({\n select: mockSelect,\n input: mockInput,\n}));\n\nmock.module(\"../prompts.js\", () => ({\n selectCancellable: mockSelectCancellable,\n inputCancellable: mockInputCancellable,\n passwordCancellable: mock(),\n confirmCancellable: mock(),\n searchCancellable: mock(),\n select: mockSelectCancellable,\n}));\n\ndescribe(\"showMenu\", () => {\n let sprinkle: Sprinkle<any>;\n\n beforeEach(() => {\n const schema = Type.Object({ name: Type.String() });\n sprinkle = withProfile(new Sprinkle(schema, \"/tmp/test\"));\n sprinkle.settings = { name: \"test\" } as any;\n mockSelect.mockClear();\n mockSelectCancellable.mockClear();\n mockInput.mockClear();\n });\n\n test(\"exits when Exit is selected on main menu\", async () => {\n mockSelectCancellable.mockResolvedValueOnce(-1);\n\n const menu: IMenu<any> = {\n title: \"Test Menu\",\n items: [\n {\n title: \"Action 1\",\n action: async () => {},\n },\n ],\n };\n\n await sprinkle.showMenu(menu);\n });\n\n test(\"executes action and re-shows menu\", async () => {\n const actionFn = mock(async () => {});\n\n mockSelectCancellable.mockResolvedValueOnce(0).mockResolvedValueOnce(-1);\n\n const menu: IMenu<any> = {\n title: \"Test Menu\",\n items: [\n {\n title: \"My Action\",\n action: actionFn,\n },\n ],\n };\n\n await sprinkle.showMenu(menu);\n expect(actionFn).toHaveBeenCalledTimes(1);\n });\n\n test(\"main menu includes Settings & Profiles submenu and Exit\", async () => {\n mockSelectCancellable.mockResolvedValueOnce(-1);\n\n const menu: IMenu<any> = {\n title: \"Test\",\n items: [{ title: \"Action\", action: async () => {} }],\n };\n\n await sprinkle.showMenu(menu);\n\n const choices = mockSelectCancellable.mock.calls[0][0].choices;\n const names = choices.map((c: any) => c.name);\n expect(names).toContain(\"Settings & Profiles\");\n expect(names).toContain(\"Exit\");\n expect(names).not.toContain(\"Switch profile\");\n expect(names).not.toContain(\"Manage profiles\");\n expect(names).not.toContain(\"Edit settings\");\n });\n\n test(\"submenu includes Back instead of Exit\", async () => {\n mockSelectCancellable\n .mockResolvedValueOnce(0)\n .mockResolvedValueOnce(-1)\n .mockResolvedValueOnce(-1);\n\n const menu: IMenu<any> = {\n title: \"Main\",\n items: [\n {\n title: \"Sub\",\n items: [{ title: \"Sub Action\", action: async () => {} }],\n },\n ],\n };\n\n await sprinkle.showMenu(menu);\n\n const subChoices = mockSelectCancellable.mock.calls[1][0].choices;\n const subNames = subChoices.map((c: any) => c.name);\n expect(subNames).toContain(\"Back\");\n expect(subNames).not.toContain(\"Exit\");\n });\n\n test(\"action returning sprinkle instance saves settings\", async () => {\n sprinkle.settings = { name: \"original\" } as any;\n\n mockSelectCancellable.mockResolvedValueOnce(0).mockResolvedValueOnce(-1);\n\n const menu: IMenu<any> = {\n title: \"Test\",\n items: [\n {\n title: \"Update\",\n action: async (s: Sprinkle<any>) => {\n s.settings = { name: \"updated\" } as any;\n return s;\n },\n },\n ],\n };\n\n await sprinkle.showMenu(menu);\n expect(sprinkle.settings).toEqual({ name: \"updated\" });\n });\n\n test(\"Settings submenu includes View settings option\", async () => {\n // Select \"Settings & Profiles\" (-5), then \"Back\" (-1), then \"Exit\" (-1)\n mockSelectCancellable\n .mockResolvedValueOnce(-5) // Settings & Profiles\n .mockResolvedValueOnce(-1) // Back\n .mockResolvedValueOnce(-1); // Exit\n\n const menu: IMenu<any> = {\n title: \"Test\",\n items: [{ title: \"Action\", action: async () => {} }],\n };\n\n await sprinkle.showMenu(menu);\n\n // Second call is the settings submenu\n const settingsChoices = mockSelectCancellable.mock.calls[1][0].choices;\n const settingsNames = settingsChoices.map((c: any) => c.name);\n expect(settingsNames).toContain(\"View settings\");\n });\n\n test(\"View settings displays masked settings\", async () => {\n const consoleSpy = spyOn(console, \"log\").mockImplementation(() => {});\n\n // Select \"Settings & Profiles\" (-5), then \"View settings\" (0),\n // then \"Continue\" for the press Enter prompt, then \"Back\" (-1), then \"Exit\" (-1)\n mockSelectCancellable\n .mockResolvedValueOnce(-5) // Settings & Profiles\n .mockResolvedValueOnce(0) // View settings (first item)\n .mockResolvedValueOnce(\"continue\") // Press Enter to continue\n .mockResolvedValueOnce(-1) // Back\n .mockResolvedValueOnce(-1); // Exit\n\n const menu: IMenu<any> = {\n title: \"Test\",\n items: [{ title: \"Action\", action: async () => {} }],\n };\n\n await sprinkle.showMenu(menu);\n\n // Should have called console.log with the settings (find the JSON output among breadcrumbs)\n expect(consoleSpy).toHaveBeenCalled();\n const jsonOutput = consoleSpy.mock.calls.find((call: any[]) =>\n call[0] && typeof call[0] === \"string\" && call[0].includes('\"name\"')\n );\n expect(jsonOutput).toBeDefined();\n\n consoleSpy.mockRestore();\n });\n\n test(\"Create profile restores state when FillInStruct is cancelled\", async () => {\n // Capture original state\n const originalProfileId = sprinkle.currentProfile?.id;\n const originalSettings = { ...sprinkle.settings };\n\n // Settings menu indices: 0=View, 1=Edit, 2=Switch, 3=Create new profile\n mockSelectCancellable\n .mockResolvedValueOnce(-5) // Settings & Profiles\n .mockResolvedValueOnce(3); // Create new profile\n\n // promptProfileMeta: name then description\n mockInputCancellable\n .mockResolvedValueOnce(\"New Profile\") // Profile name\n .mockResolvedValueOnce(\"\") // Profile description\n .mockResolvedValueOnce(null); // Cancel during FillInStruct (name field)\n\n // After cancellation, back out of menus\n mockSelectCancellable\n .mockResolvedValueOnce(-1) // Back from settings\n .mockResolvedValueOnce(-1); // Exit\n\n const menu: IMenu<any> = {\n title: \"Test\",\n items: [{ title: \"Action\", action: async () => {} }],\n };\n\n await sprinkle.showMenu(menu);\n\n // State should be restored to original\n expect(sprinkle.currentProfile?.id).toBe(originalProfileId);\n expect(sprinkle.settings).toEqual(originalSettings);\n });\n});\n"],"mappings":";;AAAA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,YAAA,GAAAF,OAAA;AAEA,MAAMG,UAAU,GAAG,IAAAC,aAAI,EAAC,CAAC;AACzB,MAAMC,SAAS,GAAG,IAAAD,aAAI,EAAC,CAAC;AACxB,MAAME,qBAAqB,GAAG,IAAAF,aAAI,EAAC,CAAC;AACpC,MAAMG,oBAAoB,GAAG,IAAAH,aAAI,EAAC,CAAC;AAEnCA,aAAI,CAACI,MAAM,CAAC,mBAAmB,EAAE,OAAO;EACtCC,MAAM,EAAEN,UAAU;EAClBO,KAAK,EAAEL;AACT,CAAC,CAAC,CAAC;AAEHD,aAAI,CAACI,MAAM,CAAC,eAAe,EAAE,OAAO;EAClCG,iBAAiB,EAAEL,qBAAqB;EACxCM,gBAAgB,EAAEL,oBAAoB;EACtCM,mBAAmB,EAAE,IAAAT,aAAI,EAAC,CAAC;EAC3BU,kBAAkB,EAAE,IAAAV,aAAI,EAAC,CAAC;EAC1BW,iBAAiB,EAAE,IAAAX,aAAI,EAAC,CAAC;EACzBK,MAAM,EAAEH;AACV,CAAC,CAAC,CAAC;AAEH,IAAAU,iBAAQ,EAAC,UAAU,EAAE,MAAM;EACzB,IAAIC,QAAuB;EAE3B,IAAAC,mBAAU,EAAC,MAAM;IACf,MAAMC,MAAM,GAAGC,WAAI,CAACC,MAAM,CAAC;MAAEC,IAAI,EAAEF,WAAI,CAACG,MAAM,CAAC;IAAE,CAAC,CAAC;IACnDN,QAAQ,GAAG,IAAAO,wBAAW,EAAC,IAAIC,eAAQ,CAACN,MAAM,EAAE,WAAW,CAAC,CAAC;IACzDF,QAAQ,CAACS,QAAQ,GAAG;MAAEJ,IAAI,EAAE;IAAO,CAAQ;IAC3CnB,UAAU,CAACwB,SAAS,CAAC,CAAC;IACtBrB,qBAAqB,CAACqB,SAAS,CAAC,CAAC;IACjCtB,SAAS,CAACsB,SAAS,CAAC,CAAC;EACvB,CAAC,CAAC;EAEF,IAAAC,aAAI,EAAC,0CAA0C,EAAE,YAAY;IAC3DtB,qBAAqB,CAACuB,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAE/C,MAAMC,IAAgB,GAAG;MACvBC,KAAK,EAAE,WAAW;MAClBC,KAAK,EAAE,CACL;QACED,KAAK,EAAE,UAAU;QACjBE,MAAM,EAAE,MAAAA,CAAA,KAAY,CAAC;MACvB,CAAC;IAEL,CAAC;IAED,MAAMhB,QAAQ,CAACiB,QAAQ,CAACJ,IAAI,CAAC;EAC/B,CAAC,CAAC;EAEF,IAAAF,aAAI,EAAC,mCAAmC,EAAE,YAAY;IACpD,MAAMO,QAAQ,GAAG,IAAA/B,aAAI,EAAC,YAAY,CAAC,CAAC,CAAC;IAErCE,qBAAqB,CAACuB,qBAAqB,CAAC,CAAC,CAAC,CAACA,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAExE,MAAMC,IAAgB,GAAG;MACvBC,KAAK,EAAE,WAAW;MAClBC,KAAK,EAAE,CACL;QACED,KAAK,EAAE,WAAW;QAClBE,MAAM,EAAEE;MACV,CAAC;IAEL,CAAC;IAED,MAAMlB,QAAQ,CAACiB,QAAQ,CAACJ,IAAI,CAAC;IAC7B,IAAAM,eAAM,EAACD,QAAQ,CAAC,CAACE,qBAAqB,CAAC,CAAC,CAAC;EAC3C,CAAC,CAAC;EAEF,IAAAT,aAAI,EAAC,yDAAyD,EAAE,YAAY;IAC1EtB,qBAAqB,CAACuB,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAE/C,MAAMC,IAAgB,GAAG;MACvBC,KAAK,EAAE,MAAM;MACbC,KAAK,EAAE,CAAC;QAAED,KAAK,EAAE,QAAQ;QAAEE,MAAM,EAAE,MAAAA,CAAA,KAAY,CAAC;MAAE,CAAC;IACrD,CAAC;IAED,MAAMhB,QAAQ,CAACiB,QAAQ,CAACJ,IAAI,CAAC;IAE7B,MAAMQ,OAAO,GAAGhC,qBAAqB,CAACF,IAAI,CAACmC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAACD,OAAO;IAC9D,MAAME,KAAK,GAAGF,OAAO,CAACG,GAAG,CAAEC,CAAM,IAAKA,CAAC,CAACpB,IAAI,CAAC;IAC7C,IAAAc,eAAM,EAACI,KAAK,CAAC,CAACG,SAAS,CAAC,qBAAqB,CAAC;IAC9C,IAAAP,eAAM,EAACI,KAAK,CAAC,CAACG,SAAS,CAAC,MAAM,CAAC;IAC/B,IAAAP,eAAM,EAACI,KAAK,CAAC,CAACI,GAAG,CAACD,SAAS,CAAC,gBAAgB,CAAC;IAC7C,IAAAP,eAAM,EAACI,KAAK,CAAC,CAACI,GAAG,CAACD,SAAS,CAAC,iBAAiB,CAAC;IAC9C,IAAAP,eAAM,EAACI,KAAK,CAAC,CAACI,GAAG,CAACD,SAAS,CAAC,eAAe,CAAC;EAC9C,CAAC,CAAC;EAEF,IAAAf,aAAI,EAAC,uCAAuC,EAAE,YAAY;IACxDtB,qBAAqB,CAClBuB,qBAAqB,CAAC,CAAC,CAAC,CACxBA,qBAAqB,CAAC,CAAC,CAAC,CAAC,CACzBA,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAE5B,MAAMC,IAAgB,GAAG;MACvBC,KAAK,EAAE,MAAM;MACbC,KAAK,EAAE,CACL;QACED,KAAK,EAAE,KAAK;QACZC,KAAK,EAAE,CAAC;UAAED,KAAK,EAAE,YAAY;UAAEE,MAAM,EAAE,MAAAA,CAAA,KAAY,CAAC;QAAE,CAAC;MACzD,CAAC;IAEL,CAAC;IAED,MAAMhB,QAAQ,CAACiB,QAAQ,CAACJ,IAAI,CAAC;IAE7B,MAAMe,UAAU,GAAGvC,qBAAqB,CAACF,IAAI,CAACmC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAACD,OAAO;IACjE,MAAMQ,QAAQ,GAAGD,UAAU,CAACJ,GAAG,CAAEC,CAAM,IAAKA,CAAC,CAACpB,IAAI,CAAC;IACnD,IAAAc,eAAM,EAACU,QAAQ,CAAC,CAACH,SAAS,CAAC,MAAM,CAAC;IAClC,IAAAP,eAAM,EAACU,QAAQ,CAAC,CAACF,GAAG,CAACD,SAAS,CAAC,MAAM,CAAC;EACxC,CAAC,CAAC;EAEF,IAAAf,aAAI,EAAC,mDAAmD,EAAE,YAAY;IACpEX,QAAQ,CAACS,QAAQ,GAAG;MAAEJ,IAAI,EAAE;IAAW,CAAQ;IAE/ChB,qBAAqB,CAACuB,qBAAqB,CAAC,CAAC,CAAC,CAACA,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAExE,MAAMC,IAAgB,GAAG;MACvBC,KAAK,EAAE,MAAM;MACbC,KAAK,EAAE,CACL;QACED,KAAK,EAAE,QAAQ;QACfE,MAAM,EAAE,MAAOc,CAAgB,IAAK;UAClCA,CAAC,CAACrB,QAAQ,GAAG;YAAEJ,IAAI,EAAE;UAAU,CAAQ;UACvC,OAAOyB,CAAC;QACV;MACF,CAAC;IAEL,CAAC;IAED,MAAM9B,QAAQ,CAACiB,QAAQ,CAACJ,IAAI,CAAC;IAC7B,IAAAM,eAAM,EAACnB,QAAQ,CAACS,QAAQ,CAAC,CAACsB,OAAO,CAAC;MAAE1B,IAAI,EAAE;IAAU,CAAC,CAAC;EACxD,CAAC,CAAC;EAEF,IAAAM,aAAI,EAAC,gDAAgD,EAAE,YAAY;IACjE;IACAtB,qBAAqB,CAClBuB,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAE;IAAA,CAC3BA,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAE;IAAA,CAC3BA,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;IAE9B,MAAMC,IAAgB,GAAG;MACvBC,KAAK,EAAE,MAAM;MACbC,KAAK,EAAE,CAAC;QAAED,KAAK,EAAE,QAAQ;QAAEE,MAAM,EAAE,MAAAA,CAAA,KAAY,CAAC;MAAE,CAAC;IACrD,CAAC;IAED,MAAMhB,QAAQ,CAACiB,QAAQ,CAACJ,IAAI,CAAC;;IAE7B;IACA,MAAMmB,eAAe,GAAG3C,qBAAqB,CAACF,IAAI,CAACmC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAACD,OAAO;IACtE,MAAMY,aAAa,GAAGD,eAAe,CAACR,GAAG,CAAEC,CAAM,IAAKA,CAAC,CAACpB,IAAI,CAAC;IAC7D,IAAAc,eAAM,EAACc,aAAa,CAAC,CAACP,SAAS,CAAC,eAAe,CAAC;EAClD,CAAC,CAAC;EAEF,IAAAf,aAAI,EAAC,wCAAwC,EAAE,YAAY;IACzD,MAAMuB,UAAU,GAAG,IAAAC,cAAK,EAACC,OAAO,EAAE,KAAK,CAAC,CAACC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;;IAErE;IACA;IACAhD,qBAAqB,CAClBuB,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAQ;IAAA,CACjCA,qBAAqB,CAAC,CAAC,CAAC,CAAS;IAAA,CACjCA,qBAAqB,CAAC,UAAU,CAAC,CAAC;IAAA,CAClCA,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAQ;IAAA,CACjCA,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAO;;IAEpC,MAAMC,IAAgB,GAAG;MACvBC,KAAK,EAAE,MAAM;MACbC,KAAK,EAAE,CAAC;QAAED,KAAK,EAAE,QAAQ;QAAEE,MAAM,EAAE,MAAAA,CAAA,KAAY,CAAC;MAAE,CAAC;IACrD,CAAC;IAED,MAAMhB,QAAQ,CAACiB,QAAQ,CAACJ,IAAI,CAAC;;IAE7B;IACA,IAAAM,eAAM,EAACe,UAAU,CAAC,CAACI,gBAAgB,CAAC,CAAC;IACrC,MAAMC,UAAU,GAAGL,UAAU,CAAC/C,IAAI,CAACmC,KAAK,CAACkB,IAAI,CAAEC,IAAW,IACxDA,IAAI,CAAC,CAAC,CAAC,IAAI,OAAOA,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAIA,IAAI,CAAC,CAAC,CAAC,CAACC,QAAQ,CAAC,QAAQ,CACrE,CAAC;IACD,IAAAvB,eAAM,EAACoB,UAAU,CAAC,CAACI,WAAW,CAAC,CAAC;IAEhCT,UAAU,CAACU,WAAW,CAAC,CAAC;EAC1B,CAAC,CAAC;EAEF,IAAAjC,aAAI,EAAC,8DAA8D,EAAE,YAAY;IAC/E;IACA,MAAMkC,iBAAiB,GAAG7C,QAAQ,CAAC8C,cAAc,EAAEC,EAAE;IACrD,MAAMC,gBAAgB,GAAG;MAAE,GAAGhD,QAAQ,CAACS;IAAS,CAAC;;IAEjD;IACApB,qBAAqB,CAClBuB,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAE;IAAA,CAC3BA,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAE;;IAE9B;IACAtB,oBAAoB,CACjBsB,qBAAqB,CAAC,aAAa,CAAC,CAAE;IAAA,CACtCA,qBAAqB,CAAC,EAAE,CAAC,CAAa;IAAA,CACtCA,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAU;;IAEzC;IACAvB,qBAAqB,CAClBuB,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAE;IAAA,CAC3BA,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;IAE9B,MAAMC,IAAgB,GAAG;MACvBC,KAAK,EAAE,MAAM;MACbC,KAAK,EAAE,CAAC;QAAED,KAAK,EAAE,QAAQ;QAAEE,MAAM,EAAE,MAAAA,CAAA,KAAY,CAAC;MAAE,CAAC;IACrD,CAAC;IAED,MAAMhB,QAAQ,CAACiB,QAAQ,CAACJ,IAAI,CAAC;;IAE7B;IACA,IAAAM,eAAM,EAACnB,QAAQ,CAAC8C,cAAc,EAAEC,EAAE,CAAC,CAACE,IAAI,CAACJ,iBAAiB,CAAC;IAC3D,IAAA1B,eAAM,EAACnB,QAAQ,CAACS,QAAQ,CAAC,CAACsB,OAAO,CAACiB,gBAAgB,CAAC;EACrD,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
|
|
@@ -31,6 +31,36 @@ _bunTest.mock.module("@inquirer/prompts", () => ({
|
|
|
31
31
|
search: (0, _bunTest.mock)(async () => "result")
|
|
32
32
|
}));
|
|
33
33
|
|
|
34
|
+
// Mock cancellable prompts (used by TxDialog and other methods)
|
|
35
|
+
_bunTest.mock.module("../prompts.js", () => ({
|
|
36
|
+
selectCancellable: (0, _bunTest.mock)(async opts => {
|
|
37
|
+
selectCalls.push(opts);
|
|
38
|
+
const response = selectResponses.shift();
|
|
39
|
+
if (response === undefined) {
|
|
40
|
+
return "cancel";
|
|
41
|
+
}
|
|
42
|
+
return response;
|
|
43
|
+
}),
|
|
44
|
+
inputCancellable: (0, _bunTest.mock)(async () => {
|
|
45
|
+
const response = inputResponses.shift();
|
|
46
|
+
return response ?? "";
|
|
47
|
+
}),
|
|
48
|
+
passwordCancellable: (0, _bunTest.mock)(async () => "secret"),
|
|
49
|
+
confirmCancellable: (0, _bunTest.mock)(async () => {
|
|
50
|
+
const response = confirmResponses.shift();
|
|
51
|
+
return response ?? false;
|
|
52
|
+
}),
|
|
53
|
+
searchCancellable: (0, _bunTest.mock)(async () => "result"),
|
|
54
|
+
select: (0, _bunTest.mock)(async opts => {
|
|
55
|
+
selectCalls.push(opts);
|
|
56
|
+
const response = selectResponses.shift();
|
|
57
|
+
if (response === undefined) {
|
|
58
|
+
return "cancel";
|
|
59
|
+
}
|
|
60
|
+
return response;
|
|
61
|
+
})
|
|
62
|
+
}));
|
|
63
|
+
|
|
34
64
|
// Mock clipboardy
|
|
35
65
|
let clipboardContent = "";
|
|
36
66
|
let clipboardShouldFail = false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tx-dialog.test.js","names":["_bunTest","require","_typebox","_interopRequireWildcard","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","selectCalls","selectResponses","confirmResponses","inputResponses","mock","module","input","response","shift","password","select","opts","push","undefined","confirm","search","clipboardContent","clipboardShouldFail","writeSync","content","Error","Sprinkle","Promise","resolve","then","TestSchema","Type","name","String","createMockTx","cbor","toCbor","body","requiredSigners","certs","withdrawals","witnessSet","vkeys","setVkeys","setWitnessSet","describe","beforeEach","test","sprinkle","logs","origLog","console","log","args","join","mockTx","repeat","mockBlaze","wallet","getUsedAddresses","TxDialog","cborLog","find","l","includes","expect","toBeDefined","length","toBeLessThan","toContain","txLog","sigLog","menuCall","choiceNames","choices","map","c","not","HotWallet","hotWalletProto","prototype","mockWallet","create","txCbor","toBe","some","truncatedLog","fullLog","origWarn","warn","beforeSignCalled","signTransaction","tx","size","toCore","beforeSign","firstMenuChoices","secondMenuChoices","result","action","txId","toBeUndefined","submitTransaction","values","toString","origErr","error","errors"],"sources":["../../../../src/Sprinkle/__tests__/tx-dialog.test.ts"],"sourcesContent":["import { describe, test, expect, mock, beforeEach } from \"bun:test\";\nimport { Type } from \"@sinclair/typebox\";\n\n// Track calls and responses\nlet selectCalls: any[] = [];\nlet selectResponses: string[] = [];\nlet confirmResponses: boolean[] = [];\nlet inputResponses: string[] = [];\n\n// Mock @inquirer/prompts\nmock.module(\"@inquirer/prompts\", () => ({\n input: mock(async () => {\n const response = inputResponses.shift();\n return response ?? \"\";\n }),\n password: mock(async () => \"secret\"),\n select: mock(async (opts: any) => {\n selectCalls.push(opts);\n const response = selectResponses.shift();\n if (response === undefined) {\n return \"cancel\";\n }\n return response;\n }),\n confirm: mock(async () => {\n const response = confirmResponses.shift();\n return response ?? false;\n }),\n search: mock(async () => \"result\"),\n}));\n\n// Mock clipboardy\nlet clipboardContent = \"\";\nlet clipboardShouldFail = false;\nmock.module(\"clipboardy\", () => ({\n default: {\n writeSync: (content: string) => {\n if (clipboardShouldFail) throw new Error(\"clipboard not available\");\n clipboardContent = content;\n },\n },\n}));\n\nconst { Sprinkle } = await import(\"../../index.js\");\n\nconst TestSchema = Type.Object({\n name: Type.String(),\n});\n\n// Helper to create a mock transaction\nconst createMockTx = (cbor = \"deadbeef\") => ({\n toCbor: () => cbor,\n body: () => ({\n toCbor: () => cbor,\n requiredSigners: () => null,\n certs: () => null,\n withdrawals: () => null,\n }),\n witnessSet: () => ({\n vkeys: () => null,\n setVkeys: () => {},\n }),\n setWitnessSet: () => {},\n});\n\ndescribe(\"TxDialog\", () => {\n beforeEach(() => {\n selectCalls = [];\n selectResponses = [];\n confirmResponses = [];\n inputResponses = [];\n clipboardContent = \"\";\n clipboardShouldFail = false;\n });\n\n describe(\"Display\", () => {\n test(\"shows truncated CBOR by default\", async () => {\n const sprinkle = new Sprinkle(TestSchema, \"/tmp/test-txdialog\");\n const logs: string[] = [];\n const origLog = console.log;\n console.log = (...args: any[]) => logs.push(args.join(\" \"));\n\n selectResponses = [\"cancel\"];\n\n const mockTx = createMockTx(\"a\".repeat(100));\n const mockBlaze = {\n wallet: { getUsedAddresses: async () => [] },\n };\n\n await sprinkle.TxDialog(mockBlaze as any, mockTx as any);\n console.log = origLog;\n\n const cborLog = logs.find((l) => l.includes(\"Transaction CBOR:\"));\n expect(cborLog).toBeDefined();\n expect(cborLog!.length).toBeLessThan(100);\n expect(cborLog).toContain(\"...\");\n });\n\n test(\"shows transaction hash\", async () => {\n const sprinkle = new Sprinkle(TestSchema, \"/tmp/test-txdialog-hash\");\n const logs: string[] = [];\n const origLog = console.log;\n console.log = (...args: any[]) => logs.push(args.join(\" \"));\n\n selectResponses = [\"cancel\"];\n\n const mockTx = createMockTx();\n const mockBlaze = {\n wallet: { getUsedAddresses: async () => [] },\n };\n\n await sprinkle.TxDialog(mockBlaze as any, mockTx as any);\n console.log = origLog;\n\n const txLog = logs.find((l) => l.includes(\"Transaction:\"));\n expect(txLog).toBeDefined();\n });\n\n test(\"shows signature count\", async () => {\n const sprinkle = new Sprinkle(TestSchema, \"/tmp/test-txdialog-sigs\");\n const logs: string[] = [];\n const origLog = console.log;\n console.log = (...args: any[]) => logs.push(args.join(\" \"));\n\n selectResponses = [\"cancel\"];\n\n const mockTx = createMockTx();\n const mockBlaze = {\n wallet: { getUsedAddresses: async () => [] },\n };\n\n await sprinkle.TxDialog(mockBlaze as any, mockTx as any);\n console.log = origLog;\n\n const sigLog = logs.find((l) => l.includes(\"Signatures:\"));\n expect(sigLog).toBeDefined();\n expect(sigLog).toContain(\"0\");\n });\n });\n\n describe(\"Menu options\", () => {\n test(\"non-HotWallet has Expand, Copy, Import, Submit, Cancel - no Sign\", async () => {\n const sprinkle = new Sprinkle(TestSchema, \"/tmp/test-txdialog2\");\n const origLog = console.log;\n console.log = () => {};\n\n selectResponses = [\"cancel\"];\n\n const mockTx = createMockTx();\n const mockBlaze = {\n wallet: { getUsedAddresses: async () => [] },\n };\n\n await sprinkle.TxDialog(mockBlaze as any, mockTx as any);\n console.log = origLog;\n\n const menuCall = selectCalls[0];\n expect(menuCall).toBeDefined();\n const choiceNames = menuCall.choices.map((c: any) => c.name);\n expect(choiceNames).toContain(\"Expand CBOR\");\n expect(choiceNames).toContain(\"Copy CBOR to clipboard\");\n expect(choiceNames).toContain(\"Import signatures from CBOR\");\n expect(choiceNames).toContain(\"Submit transaction\");\n expect(choiceNames).toContain(\"Cancel\");\n expect(choiceNames).not.toContain(\"Sign with this wallet\");\n });\n\n test(\"HotWallet has Sign option\", async () => {\n const sprinkle = new Sprinkle(TestSchema, \"/tmp/test-txdialog3\");\n const origLog = console.log;\n console.log = () => {};\n\n const { HotWallet } = await import(\"@blaze-cardano/sdk\");\n\n selectResponses = [\"cancel\"];\n\n const mockTx = createMockTx();\n\n const hotWalletProto = HotWallet.prototype;\n const mockWallet = Object.create(hotWalletProto);\n mockWallet.getUsedAddresses = async () => [];\n\n const mockBlaze = {\n wallet: mockWallet,\n };\n\n await sprinkle.TxDialog(mockBlaze as any, mockTx as any);\n console.log = origLog;\n\n const menuCall = selectCalls[0];\n expect(menuCall).toBeDefined();\n const choiceNames = menuCall.choices.map((c: any) => c.name);\n expect(choiceNames).toContain(\"Sign with this wallet\");\n });\n });\n\n describe(\"Copy CBOR\", () => {\n test(\"copies CBOR to clipboard\", async () => {\n const sprinkle = new Sprinkle(TestSchema, \"/tmp/test-txdialog4\");\n const origLog = console.log;\n const logs: string[] = [];\n console.log = (...args: any[]) => logs.push(args.join(\" \"));\n\n selectResponses = [\"copy\", \"cancel\"];\n\n const txCbor = \"deadbeefcafebabe\";\n const mockTx = createMockTx(txCbor);\n const mockBlaze = {\n wallet: { getUsedAddresses: async () => [] },\n };\n\n await sprinkle.TxDialog(mockBlaze as any, mockTx as any);\n console.log = origLog;\n\n expect(clipboardContent).toBe(txCbor);\n expect(logs.some((l) => l.includes(\"copied to clipboard\"))).toBe(true);\n });\n\n test(\"clipboard failure falls back to expanded view\", async () => {\n const sprinkle = new Sprinkle(TestSchema, \"/tmp/test-txdialog5\");\n const origLog = console.log;\n const logs: string[] = [];\n console.log = (...args: any[]) => logs.push(args.join(\" \"));\n\n clipboardShouldFail = true;\n\n selectResponses = [\"copy\", \"cancel\"];\n\n const txCbor = \"a\".repeat(100);\n const mockTx = createMockTx(txCbor);\n const mockBlaze = {\n wallet: { getUsedAddresses: async () => [] },\n };\n\n await sprinkle.TxDialog(mockBlaze as any, mockTx as any);\n console.log = origLog;\n\n expect(logs.some((l) => l.includes(\"Failed to copy\"))).toBe(true);\n });\n });\n\n describe(\"Expand CBOR\", () => {\n test(\"shows full content when expanded\", async () => {\n const sprinkle = new Sprinkle(TestSchema, \"/tmp/test-txdialog6\");\n const origLog = console.log;\n const logs: string[] = [];\n console.log = (...args: any[]) => logs.push(args.join(\" \"));\n\n selectResponses = [\"expand\", \"cancel\"];\n\n const txCbor = \"b\".repeat(100);\n const mockTx = createMockTx(txCbor);\n const mockBlaze = {\n wallet: { getUsedAddresses: async () => [] },\n };\n\n await sprinkle.TxDialog(mockBlaze as any, mockTx as any);\n console.log = origLog;\n\n // First shows truncated, second shows full\n const truncatedLog = logs.find(\n (l) => l.includes(\"...\") && l.includes(\"Transaction CBOR:\"),\n );\n const fullLog = logs.find(\n (l) => l.includes(txCbor) && !l.includes(\"...\"),\n );\n expect(truncatedLog).toBeDefined();\n expect(fullLog).toBeDefined();\n });\n });\n\n describe(\"Sign\", () => {\n test(\"beforeSign hook is called before signing\", async () => {\n const sprinkle = new Sprinkle(TestSchema, \"/tmp/test-txdialog7\");\n const origLog = console.log;\n const origWarn = console.warn;\n console.log = () => {};\n console.warn = () => {};\n\n const { HotWallet } = await import(\"@blaze-cardano/sdk\");\n\n let beforeSignCalled = false;\n\n selectResponses = [\"sign\", \"cancel\"];\n\n const mockTx = createMockTx();\n\n const hotWalletProto = HotWallet.prototype;\n const mockWallet = Object.create(hotWalletProto);\n mockWallet.getUsedAddresses = async () => [];\n\n const mockBlaze = {\n wallet: mockWallet,\n signTransaction: async (tx: any) => ({\n witnessSet: () => ({\n vkeys: () => ({\n size: () => 1,\n toCore: () => [[\"vkey123\", \"sig123\"]],\n }),\n }),\n }),\n };\n\n await sprinkle.TxDialog(mockBlaze as any, mockTx as any, {\n beforeSign: async () => {\n beforeSignCalled = true;\n },\n });\n console.log = origLog;\n console.warn = origWarn;\n\n expect(beforeSignCalled).toBe(true);\n });\n\n test(\"Sign option hidden after signing\", async () => {\n const sprinkle = new Sprinkle(TestSchema, \"/tmp/test-txdialog-signed\");\n const origLog = console.log;\n const origWarn = console.warn;\n console.log = () => {};\n console.warn = () => {};\n\n const { HotWallet } = await import(\"@blaze-cardano/sdk\");\n\n selectResponses = [\"sign\", \"cancel\"];\n\n const mockTx = createMockTx();\n\n const hotWalletProto = HotWallet.prototype;\n const mockWallet = Object.create(hotWalletProto);\n mockWallet.getUsedAddresses = async () => [];\n\n const mockBlaze = {\n wallet: mockWallet,\n signTransaction: async (tx: any) => ({\n witnessSet: () => ({\n vkeys: () => ({\n size: () => 1,\n toCore: () => [[\"vkey123\", \"sig123\"]],\n }),\n }),\n }),\n };\n\n await sprinkle.TxDialog(mockBlaze as any, mockTx as any);\n console.log = origLog;\n console.warn = origWarn;\n\n // First menu should have Sign, second should not\n expect(selectCalls.length).toBe(2);\n const firstMenuChoices = selectCalls[0].choices.map((c: any) => c.name);\n const secondMenuChoices = selectCalls[1].choices.map((c: any) => c.name);\n expect(firstMenuChoices).toContain(\"Sign with this wallet\");\n expect(secondMenuChoices).not.toContain(\"Sign with this wallet\");\n });\n });\n\n describe(\"Return values\", () => {\n test(\"returns cancelled when user cancels\", async () => {\n const sprinkle = new Sprinkle(TestSchema, \"/tmp/test-txdialog-cancel\");\n const origLog = console.log;\n console.log = () => {};\n\n selectResponses = [\"cancel\"];\n\n const mockTx = createMockTx();\n const mockBlaze = {\n wallet: { getUsedAddresses: async () => [] },\n };\n\n const result = await sprinkle.TxDialog(mockBlaze as any, mockTx as any);\n console.log = origLog;\n\n expect(result.action).toBe(\"cancelled\");\n expect(result.tx).toBeDefined();\n expect(result.txId).toBeUndefined();\n });\n\n test(\"returns signed when user signs then cancels\", async () => {\n const sprinkle = new Sprinkle(TestSchema, \"/tmp/test-txdialog-signed2\");\n const origLog = console.log;\n const origWarn = console.warn;\n console.log = () => {};\n console.warn = () => {};\n\n const { HotWallet } = await import(\"@blaze-cardano/sdk\");\n\n selectResponses = [\"sign\", \"cancel\"];\n\n const mockTx = createMockTx();\n\n const hotWalletProto = HotWallet.prototype;\n const mockWallet = Object.create(hotWalletProto);\n mockWallet.getUsedAddresses = async () => [];\n\n const mockBlaze = {\n wallet: mockWallet,\n signTransaction: async (tx: any) => ({\n witnessSet: () => ({\n vkeys: () => ({\n size: () => 1,\n toCore: () => [[\"vkey123\", \"sig123\"]],\n }),\n }),\n }),\n };\n\n const result = await sprinkle.TxDialog(mockBlaze as any, mockTx as any);\n console.log = origLog;\n console.warn = origWarn;\n\n expect(result.action).toBe(\"signed\");\n expect(result.tx).toBeDefined();\n });\n\n test(\"returns submitted with txId on successful submit\", async () => {\n const sprinkle = new Sprinkle(TestSchema, \"/tmp/test-txdialog-submit\");\n const origLog = console.log;\n console.log = () => {};\n\n selectResponses = [\"submit\"];\n confirmResponses = [true]; // Confirm submit with no signatures\n\n const mockTx = createMockTx();\n const mockBlaze = {\n wallet: { getUsedAddresses: async () => [] },\n submitTransaction: async () => \"txhash123456\",\n };\n\n const result = await sprinkle.TxDialog(mockBlaze as any, mockTx as any);\n console.log = origLog;\n\n expect(result.action).toBe(\"submitted\");\n expect(result.txId).toBe(\"txhash123456\");\n expect(result.tx).toBeDefined();\n });\n });\n\n describe(\"Submit warnings\", () => {\n test(\"warns when submitting with no signatures\", async () => {\n const sprinkle = new Sprinkle(TestSchema, \"/tmp/test-txdialog-warn\");\n const origLog = console.log;\n console.log = () => {};\n\n // First try to submit, decline warning, then cancel\n selectResponses = [\"submit\", \"cancel\"];\n confirmResponses = [false];\n\n const mockTx = createMockTx();\n const mockBlaze = {\n wallet: { getUsedAddresses: async () => [] },\n };\n\n const result = await sprinkle.TxDialog(mockBlaze as any, mockTx as any);\n console.log = origLog;\n\n // Should have returned to menu, then cancelled\n expect(result.action).toBe(\"cancelled\");\n expect(selectCalls.length).toBe(2);\n });\n });\n\n describe(\"Exit behavior\", () => {\n test(\"exits loop after successful submit\", async () => {\n const sprinkle = new Sprinkle(TestSchema, \"/tmp/test-txdialog-exit\");\n const origLog = console.log;\n console.log = () => {};\n\n selectResponses = [\"submit\"];\n confirmResponses = [true];\n\n const mockTx = createMockTx();\n const mockBlaze = {\n wallet: { getUsedAddresses: async () => [] },\n submitTransaction: async () => \"txhash789\",\n };\n\n const result = await sprinkle.TxDialog(mockBlaze as any, mockTx as any);\n console.log = origLog;\n\n // Should only have one menu call - no loop after submit\n expect(selectCalls.length).toBe(1);\n expect(result.action).toBe(\"submitted\");\n });\n });\n\n describe(\"Required signers display\", () => {\n test(\"shows required signers when present\", async () => {\n const sprinkle = new Sprinkle(TestSchema, \"/tmp/test-txdialog-req\");\n const logs: string[] = [];\n const origLog = console.log;\n console.log = (...args: any[]) => logs.push(args.join(\" \"));\n\n selectResponses = [\"cancel\"];\n\n const mockTx = {\n toCbor: () => \"deadbeef\",\n body: () => ({\n toCbor: () => \"deadbeef\",\n requiredSigners: () => ({\n values: () => [\n { toString: () => \"abc123def456\" },\n { toString: () => \"789ghi012jkl\" },\n ],\n }),\n certs: () => null,\n withdrawals: () => null,\n }),\n witnessSet: () => ({\n vkeys: () => null,\n }),\n };\n\n const mockBlaze = {\n wallet: { getUsedAddresses: async () => [] },\n };\n\n await sprinkle.TxDialog(mockBlaze as any, mockTx as any);\n console.log = origLog;\n\n // Should show \"X of Y required\" format\n expect(logs.some((l) => l.includes(\"of\") && l.includes(\"required\"))).toBe(\n true,\n );\n // Should show required signers list\n expect(logs.some((l) => l.includes(\"Required signers:\"))).toBe(true);\n });\n });\n\n describe(\"Import signatures\", () => {\n test(\"continues on empty CBOR input\", async () => {\n const sprinkle = new Sprinkle(TestSchema, \"/tmp/test-txdialog-import1\");\n const origLog = console.log;\n const logs: string[] = [];\n console.log = (...args: any[]) => logs.push(args.join(\" \"));\n\n selectResponses = [\"import\", \"cancel\"];\n inputResponses = [\"\"]; // Empty input\n\n const mockTx = createMockTx();\n const mockBlaze = {\n wallet: { getUsedAddresses: async () => [] },\n };\n\n const result = await sprinkle.TxDialog(mockBlaze as any, mockTx as any);\n console.log = origLog;\n\n expect(logs.some((l) => l.includes(\"No CBOR provided\"))).toBe(true);\n expect(result.action).toBe(\"cancelled\");\n });\n\n test(\"handles invalid CBOR gracefully\", async () => {\n const sprinkle = new Sprinkle(TestSchema, \"/tmp/test-txdialog-import2\");\n const origLog = console.log;\n const origErr = console.error;\n const logs: string[] = [];\n const errors: string[] = [];\n console.log = (...args: any[]) => logs.push(args.join(\" \"));\n console.error = (...args: any[]) => errors.push(args.join(\" \"));\n\n selectResponses = [\"import\", \"cancel\"];\n inputResponses = [\"not-valid-cbor\"];\n\n const mockTx = createMockTx();\n const mockBlaze = {\n wallet: { getUsedAddresses: async () => [] },\n };\n\n const result = await sprinkle.TxDialog(mockBlaze as any, mockTx as any);\n console.log = origLog;\n console.error = origErr;\n\n expect(errors.some((l) => l.includes(\"Failed to import\"))).toBe(true);\n expect(result.action).toBe(\"cancelled\");\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"tx-dialog.test.js","names":["_bunTest","require","_typebox","_interopRequireWildcard","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","selectCalls","selectResponses","confirmResponses","inputResponses","mock","module","input","response","shift","password","select","opts","push","undefined","confirm","search","selectCancellable","inputCancellable","passwordCancellable","confirmCancellable","searchCancellable","clipboardContent","clipboardShouldFail","writeSync","content","Error","Sprinkle","Promise","resolve","then","TestSchema","Type","name","String","createMockTx","cbor","toCbor","body","requiredSigners","certs","withdrawals","witnessSet","vkeys","setVkeys","setWitnessSet","describe","beforeEach","test","sprinkle","logs","origLog","console","log","args","join","mockTx","repeat","mockBlaze","wallet","getUsedAddresses","TxDialog","cborLog","find","l","includes","expect","toBeDefined","length","toBeLessThan","toContain","txLog","sigLog","menuCall","choiceNames","choices","map","c","not","HotWallet","hotWalletProto","prototype","mockWallet","create","txCbor","toBe","some","truncatedLog","fullLog","origWarn","warn","beforeSignCalled","signTransaction","tx","size","toCore","beforeSign","firstMenuChoices","secondMenuChoices","result","action","txId","toBeUndefined","submitTransaction","values","toString","origErr","error","errors"],"sources":["../../../../src/Sprinkle/__tests__/tx-dialog.test.ts"],"sourcesContent":["import { describe, test, expect, mock, beforeEach } from \"bun:test\";\nimport { Type } from \"@sinclair/typebox\";\n\n// Track calls and responses\nlet selectCalls: any[] = [];\nlet selectResponses: string[] = [];\nlet confirmResponses: boolean[] = [];\nlet inputResponses: string[] = [];\n\n// Mock @inquirer/prompts\nmock.module(\"@inquirer/prompts\", () => ({\n input: mock(async () => {\n const response = inputResponses.shift();\n return response ?? \"\";\n }),\n password: mock(async () => \"secret\"),\n select: mock(async (opts: any) => {\n selectCalls.push(opts);\n const response = selectResponses.shift();\n if (response === undefined) {\n return \"cancel\";\n }\n return response;\n }),\n confirm: mock(async () => {\n const response = confirmResponses.shift();\n return response ?? false;\n }),\n search: mock(async () => \"result\"),\n}));\n\n// Mock cancellable prompts (used by TxDialog and other methods)\nmock.module(\"../prompts.js\", () => ({\n selectCancellable: mock(async (opts: any) => {\n selectCalls.push(opts);\n const response = selectResponses.shift();\n if (response === undefined) {\n return \"cancel\";\n }\n return response;\n }),\n inputCancellable: mock(async () => {\n const response = inputResponses.shift();\n return response ?? \"\";\n }),\n passwordCancellable: mock(async () => \"secret\"),\n confirmCancellable: mock(async () => {\n const response = confirmResponses.shift();\n return response ?? false;\n }),\n searchCancellable: mock(async () => \"result\"),\n select: mock(async (opts: any) => {\n selectCalls.push(opts);\n const response = selectResponses.shift();\n if (response === undefined) {\n return \"cancel\";\n }\n return response;\n }),\n}));\n\n// Mock clipboardy\nlet clipboardContent = \"\";\nlet clipboardShouldFail = false;\nmock.module(\"clipboardy\", () => ({\n default: {\n writeSync: (content: string) => {\n if (clipboardShouldFail) throw new Error(\"clipboard not available\");\n clipboardContent = content;\n },\n },\n}));\n\nconst { Sprinkle } = await import(\"../../index.js\");\n\nconst TestSchema = Type.Object({\n name: Type.String(),\n});\n\n// Helper to create a mock transaction\nconst createMockTx = (cbor = \"deadbeef\") => ({\n toCbor: () => cbor,\n body: () => ({\n toCbor: () => cbor,\n requiredSigners: () => null,\n certs: () => null,\n withdrawals: () => null,\n }),\n witnessSet: () => ({\n vkeys: () => null,\n setVkeys: () => {},\n }),\n setWitnessSet: () => {},\n});\n\ndescribe(\"TxDialog\", () => {\n beforeEach(() => {\n selectCalls = [];\n selectResponses = [];\n confirmResponses = [];\n inputResponses = [];\n clipboardContent = \"\";\n clipboardShouldFail = false;\n });\n\n describe(\"Display\", () => {\n test(\"shows truncated CBOR by default\", async () => {\n const sprinkle = new Sprinkle(TestSchema, \"/tmp/test-txdialog\");\n const logs: string[] = [];\n const origLog = console.log;\n console.log = (...args: any[]) => logs.push(args.join(\" \"));\n\n selectResponses = [\"cancel\"];\n\n const mockTx = createMockTx(\"a\".repeat(100));\n const mockBlaze = {\n wallet: { getUsedAddresses: async () => [] },\n };\n\n await sprinkle.TxDialog(mockBlaze as any, mockTx as any);\n console.log = origLog;\n\n const cborLog = logs.find((l) => l.includes(\"Transaction CBOR:\"));\n expect(cborLog).toBeDefined();\n expect(cborLog!.length).toBeLessThan(100);\n expect(cborLog).toContain(\"...\");\n });\n\n test(\"shows transaction hash\", async () => {\n const sprinkle = new Sprinkle(TestSchema, \"/tmp/test-txdialog-hash\");\n const logs: string[] = [];\n const origLog = console.log;\n console.log = (...args: any[]) => logs.push(args.join(\" \"));\n\n selectResponses = [\"cancel\"];\n\n const mockTx = createMockTx();\n const mockBlaze = {\n wallet: { getUsedAddresses: async () => [] },\n };\n\n await sprinkle.TxDialog(mockBlaze as any, mockTx as any);\n console.log = origLog;\n\n const txLog = logs.find((l) => l.includes(\"Transaction:\"));\n expect(txLog).toBeDefined();\n });\n\n test(\"shows signature count\", async () => {\n const sprinkle = new Sprinkle(TestSchema, \"/tmp/test-txdialog-sigs\");\n const logs: string[] = [];\n const origLog = console.log;\n console.log = (...args: any[]) => logs.push(args.join(\" \"));\n\n selectResponses = [\"cancel\"];\n\n const mockTx = createMockTx();\n const mockBlaze = {\n wallet: { getUsedAddresses: async () => [] },\n };\n\n await sprinkle.TxDialog(mockBlaze as any, mockTx as any);\n console.log = origLog;\n\n const sigLog = logs.find((l) => l.includes(\"Signatures:\"));\n expect(sigLog).toBeDefined();\n expect(sigLog).toContain(\"0\");\n });\n });\n\n describe(\"Menu options\", () => {\n test(\"non-HotWallet has Expand, Copy, Import, Submit, Cancel - no Sign\", async () => {\n const sprinkle = new Sprinkle(TestSchema, \"/tmp/test-txdialog2\");\n const origLog = console.log;\n console.log = () => {};\n\n selectResponses = [\"cancel\"];\n\n const mockTx = createMockTx();\n const mockBlaze = {\n wallet: { getUsedAddresses: async () => [] },\n };\n\n await sprinkle.TxDialog(mockBlaze as any, mockTx as any);\n console.log = origLog;\n\n const menuCall = selectCalls[0];\n expect(menuCall).toBeDefined();\n const choiceNames = menuCall.choices.map((c: any) => c.name);\n expect(choiceNames).toContain(\"Expand CBOR\");\n expect(choiceNames).toContain(\"Copy CBOR to clipboard\");\n expect(choiceNames).toContain(\"Import signatures from CBOR\");\n expect(choiceNames).toContain(\"Submit transaction\");\n expect(choiceNames).toContain(\"Cancel\");\n expect(choiceNames).not.toContain(\"Sign with this wallet\");\n });\n\n test(\"HotWallet has Sign option\", async () => {\n const sprinkle = new Sprinkle(TestSchema, \"/tmp/test-txdialog3\");\n const origLog = console.log;\n console.log = () => {};\n\n const { HotWallet } = await import(\"@blaze-cardano/sdk\");\n\n selectResponses = [\"cancel\"];\n\n const mockTx = createMockTx();\n\n const hotWalletProto = HotWallet.prototype;\n const mockWallet = Object.create(hotWalletProto);\n mockWallet.getUsedAddresses = async () => [];\n\n const mockBlaze = {\n wallet: mockWallet,\n };\n\n await sprinkle.TxDialog(mockBlaze as any, mockTx as any);\n console.log = origLog;\n\n const menuCall = selectCalls[0];\n expect(menuCall).toBeDefined();\n const choiceNames = menuCall.choices.map((c: any) => c.name);\n expect(choiceNames).toContain(\"Sign with this wallet\");\n });\n });\n\n describe(\"Copy CBOR\", () => {\n test(\"copies CBOR to clipboard\", async () => {\n const sprinkle = new Sprinkle(TestSchema, \"/tmp/test-txdialog4\");\n const origLog = console.log;\n const logs: string[] = [];\n console.log = (...args: any[]) => logs.push(args.join(\" \"));\n\n selectResponses = [\"copy\", \"cancel\"];\n\n const txCbor = \"deadbeefcafebabe\";\n const mockTx = createMockTx(txCbor);\n const mockBlaze = {\n wallet: { getUsedAddresses: async () => [] },\n };\n\n await sprinkle.TxDialog(mockBlaze as any, mockTx as any);\n console.log = origLog;\n\n expect(clipboardContent).toBe(txCbor);\n expect(logs.some((l) => l.includes(\"copied to clipboard\"))).toBe(true);\n });\n\n test(\"clipboard failure falls back to expanded view\", async () => {\n const sprinkle = new Sprinkle(TestSchema, \"/tmp/test-txdialog5\");\n const origLog = console.log;\n const logs: string[] = [];\n console.log = (...args: any[]) => logs.push(args.join(\" \"));\n\n clipboardShouldFail = true;\n\n selectResponses = [\"copy\", \"cancel\"];\n\n const txCbor = \"a\".repeat(100);\n const mockTx = createMockTx(txCbor);\n const mockBlaze = {\n wallet: { getUsedAddresses: async () => [] },\n };\n\n await sprinkle.TxDialog(mockBlaze as any, mockTx as any);\n console.log = origLog;\n\n expect(logs.some((l) => l.includes(\"Failed to copy\"))).toBe(true);\n });\n });\n\n describe(\"Expand CBOR\", () => {\n test(\"shows full content when expanded\", async () => {\n const sprinkle = new Sprinkle(TestSchema, \"/tmp/test-txdialog6\");\n const origLog = console.log;\n const logs: string[] = [];\n console.log = (...args: any[]) => logs.push(args.join(\" \"));\n\n selectResponses = [\"expand\", \"cancel\"];\n\n const txCbor = \"b\".repeat(100);\n const mockTx = createMockTx(txCbor);\n const mockBlaze = {\n wallet: { getUsedAddresses: async () => [] },\n };\n\n await sprinkle.TxDialog(mockBlaze as any, mockTx as any);\n console.log = origLog;\n\n // First shows truncated, second shows full\n const truncatedLog = logs.find(\n (l) => l.includes(\"...\") && l.includes(\"Transaction CBOR:\"),\n );\n const fullLog = logs.find(\n (l) => l.includes(txCbor) && !l.includes(\"...\"),\n );\n expect(truncatedLog).toBeDefined();\n expect(fullLog).toBeDefined();\n });\n });\n\n describe(\"Sign\", () => {\n test(\"beforeSign hook is called before signing\", async () => {\n const sprinkle = new Sprinkle(TestSchema, \"/tmp/test-txdialog7\");\n const origLog = console.log;\n const origWarn = console.warn;\n console.log = () => {};\n console.warn = () => {};\n\n const { HotWallet } = await import(\"@blaze-cardano/sdk\");\n\n let beforeSignCalled = false;\n\n selectResponses = [\"sign\", \"cancel\"];\n\n const mockTx = createMockTx();\n\n const hotWalletProto = HotWallet.prototype;\n const mockWallet = Object.create(hotWalletProto);\n mockWallet.getUsedAddresses = async () => [];\n\n const mockBlaze = {\n wallet: mockWallet,\n signTransaction: async (tx: any) => ({\n witnessSet: () => ({\n vkeys: () => ({\n size: () => 1,\n toCore: () => [[\"vkey123\", \"sig123\"]],\n }),\n }),\n }),\n };\n\n await sprinkle.TxDialog(mockBlaze as any, mockTx as any, {\n beforeSign: async () => {\n beforeSignCalled = true;\n },\n });\n console.log = origLog;\n console.warn = origWarn;\n\n expect(beforeSignCalled).toBe(true);\n });\n\n test(\"Sign option hidden after signing\", async () => {\n const sprinkle = new Sprinkle(TestSchema, \"/tmp/test-txdialog-signed\");\n const origLog = console.log;\n const origWarn = console.warn;\n console.log = () => {};\n console.warn = () => {};\n\n const { HotWallet } = await import(\"@blaze-cardano/sdk\");\n\n selectResponses = [\"sign\", \"cancel\"];\n\n const mockTx = createMockTx();\n\n const hotWalletProto = HotWallet.prototype;\n const mockWallet = Object.create(hotWalletProto);\n mockWallet.getUsedAddresses = async () => [];\n\n const mockBlaze = {\n wallet: mockWallet,\n signTransaction: async (tx: any) => ({\n witnessSet: () => ({\n vkeys: () => ({\n size: () => 1,\n toCore: () => [[\"vkey123\", \"sig123\"]],\n }),\n }),\n }),\n };\n\n await sprinkle.TxDialog(mockBlaze as any, mockTx as any);\n console.log = origLog;\n console.warn = origWarn;\n\n // First menu should have Sign, second should not\n expect(selectCalls.length).toBe(2);\n const firstMenuChoices = selectCalls[0].choices.map((c: any) => c.name);\n const secondMenuChoices = selectCalls[1].choices.map((c: any) => c.name);\n expect(firstMenuChoices).toContain(\"Sign with this wallet\");\n expect(secondMenuChoices).not.toContain(\"Sign with this wallet\");\n });\n });\n\n describe(\"Return values\", () => {\n test(\"returns cancelled when user cancels\", async () => {\n const sprinkle = new Sprinkle(TestSchema, \"/tmp/test-txdialog-cancel\");\n const origLog = console.log;\n console.log = () => {};\n\n selectResponses = [\"cancel\"];\n\n const mockTx = createMockTx();\n const mockBlaze = {\n wallet: { getUsedAddresses: async () => [] },\n };\n\n const result = await sprinkle.TxDialog(mockBlaze as any, mockTx as any);\n console.log = origLog;\n\n expect(result.action).toBe(\"cancelled\");\n expect(result.tx).toBeDefined();\n expect(result.txId).toBeUndefined();\n });\n\n test(\"returns signed when user signs then cancels\", async () => {\n const sprinkle = new Sprinkle(TestSchema, \"/tmp/test-txdialog-signed2\");\n const origLog = console.log;\n const origWarn = console.warn;\n console.log = () => {};\n console.warn = () => {};\n\n const { HotWallet } = await import(\"@blaze-cardano/sdk\");\n\n selectResponses = [\"sign\", \"cancel\"];\n\n const mockTx = createMockTx();\n\n const hotWalletProto = HotWallet.prototype;\n const mockWallet = Object.create(hotWalletProto);\n mockWallet.getUsedAddresses = async () => [];\n\n const mockBlaze = {\n wallet: mockWallet,\n signTransaction: async (tx: any) => ({\n witnessSet: () => ({\n vkeys: () => ({\n size: () => 1,\n toCore: () => [[\"vkey123\", \"sig123\"]],\n }),\n }),\n }),\n };\n\n const result = await sprinkle.TxDialog(mockBlaze as any, mockTx as any);\n console.log = origLog;\n console.warn = origWarn;\n\n expect(result.action).toBe(\"signed\");\n expect(result.tx).toBeDefined();\n });\n\n test(\"returns submitted with txId on successful submit\", async () => {\n const sprinkle = new Sprinkle(TestSchema, \"/tmp/test-txdialog-submit\");\n const origLog = console.log;\n console.log = () => {};\n\n selectResponses = [\"submit\"];\n confirmResponses = [true]; // Confirm submit with no signatures\n\n const mockTx = createMockTx();\n const mockBlaze = {\n wallet: { getUsedAddresses: async () => [] },\n submitTransaction: async () => \"txhash123456\",\n };\n\n const result = await sprinkle.TxDialog(mockBlaze as any, mockTx as any);\n console.log = origLog;\n\n expect(result.action).toBe(\"submitted\");\n expect(result.txId).toBe(\"txhash123456\");\n expect(result.tx).toBeDefined();\n });\n });\n\n describe(\"Submit warnings\", () => {\n test(\"warns when submitting with no signatures\", async () => {\n const sprinkle = new Sprinkle(TestSchema, \"/tmp/test-txdialog-warn\");\n const origLog = console.log;\n console.log = () => {};\n\n // First try to submit, decline warning, then cancel\n selectResponses = [\"submit\", \"cancel\"];\n confirmResponses = [false];\n\n const mockTx = createMockTx();\n const mockBlaze = {\n wallet: { getUsedAddresses: async () => [] },\n };\n\n const result = await sprinkle.TxDialog(mockBlaze as any, mockTx as any);\n console.log = origLog;\n\n // Should have returned to menu, then cancelled\n expect(result.action).toBe(\"cancelled\");\n expect(selectCalls.length).toBe(2);\n });\n });\n\n describe(\"Exit behavior\", () => {\n test(\"exits loop after successful submit\", async () => {\n const sprinkle = new Sprinkle(TestSchema, \"/tmp/test-txdialog-exit\");\n const origLog = console.log;\n console.log = () => {};\n\n selectResponses = [\"submit\"];\n confirmResponses = [true];\n\n const mockTx = createMockTx();\n const mockBlaze = {\n wallet: { getUsedAddresses: async () => [] },\n submitTransaction: async () => \"txhash789\",\n };\n\n const result = await sprinkle.TxDialog(mockBlaze as any, mockTx as any);\n console.log = origLog;\n\n // Should only have one menu call - no loop after submit\n expect(selectCalls.length).toBe(1);\n expect(result.action).toBe(\"submitted\");\n });\n });\n\n describe(\"Required signers display\", () => {\n test(\"shows required signers when present\", async () => {\n const sprinkle = new Sprinkle(TestSchema, \"/tmp/test-txdialog-req\");\n const logs: string[] = [];\n const origLog = console.log;\n console.log = (...args: any[]) => logs.push(args.join(\" \"));\n\n selectResponses = [\"cancel\"];\n\n const mockTx = {\n toCbor: () => \"deadbeef\",\n body: () => ({\n toCbor: () => \"deadbeef\",\n requiredSigners: () => ({\n values: () => [\n { toString: () => \"abc123def456\" },\n { toString: () => \"789ghi012jkl\" },\n ],\n }),\n certs: () => null,\n withdrawals: () => null,\n }),\n witnessSet: () => ({\n vkeys: () => null,\n }),\n };\n\n const mockBlaze = {\n wallet: { getUsedAddresses: async () => [] },\n };\n\n await sprinkle.TxDialog(mockBlaze as any, mockTx as any);\n console.log = origLog;\n\n // Should show \"X of Y required\" format\n expect(logs.some((l) => l.includes(\"of\") && l.includes(\"required\"))).toBe(\n true,\n );\n // Should show required signers list\n expect(logs.some((l) => l.includes(\"Required signers:\"))).toBe(true);\n });\n });\n\n describe(\"Import signatures\", () => {\n test(\"continues on empty CBOR input\", async () => {\n const sprinkle = new Sprinkle(TestSchema, \"/tmp/test-txdialog-import1\");\n const origLog = console.log;\n const logs: string[] = [];\n console.log = (...args: any[]) => logs.push(args.join(\" \"));\n\n selectResponses = [\"import\", \"cancel\"];\n inputResponses = [\"\"]; // Empty input\n\n const mockTx = createMockTx();\n const mockBlaze = {\n wallet: { getUsedAddresses: async () => [] },\n };\n\n const result = await sprinkle.TxDialog(mockBlaze as any, mockTx as any);\n console.log = origLog;\n\n expect(logs.some((l) => l.includes(\"No CBOR provided\"))).toBe(true);\n expect(result.action).toBe(\"cancelled\");\n });\n\n test(\"handles invalid CBOR gracefully\", async () => {\n const sprinkle = new Sprinkle(TestSchema, \"/tmp/test-txdialog-import2\");\n const origLog = console.log;\n const origErr = console.error;\n const logs: string[] = [];\n const errors: string[] = [];\n console.log = (...args: any[]) => logs.push(args.join(\" \"));\n console.error = (...args: any[]) => errors.push(args.join(\" \"));\n\n selectResponses = [\"import\", \"cancel\"];\n inputResponses = [\"not-valid-cbor\"];\n\n const mockTx = createMockTx();\n const mockBlaze = {\n wallet: { getUsedAddresses: async () => [] },\n };\n\n const result = await sprinkle.TxDialog(mockBlaze as any, mockTx as any);\n console.log = origLog;\n console.error = origErr;\n\n expect(errors.some((l) => l.includes(\"Failed to import\"))).toBe(true);\n expect(result.action).toBe(\"cancelled\");\n });\n });\n});\n"],"mappings":";;AAAA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAAyC,SAAAE,wBAAAC,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAH,uBAAA,YAAAA,CAAAC,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAEzC;AACA,IAAIkB,WAAkB,GAAG,EAAE;AAC3B,IAAIC,eAAyB,GAAG,EAAE;AAClC,IAAIC,gBAA2B,GAAG,EAAE;AACpC,IAAIC,cAAwB,GAAG,EAAE;;AAEjC;AACAC,aAAI,CAACC,MAAM,CAAC,mBAAmB,EAAE,OAAO;EACtCC,KAAK,EAAE,IAAAF,aAAI,EAAC,YAAY;IACtB,MAAMG,QAAQ,GAAGJ,cAAc,CAACK,KAAK,CAAC,CAAC;IACvC,OAAOD,QAAQ,IAAI,EAAE;EACvB,CAAC,CAAC;EACFE,QAAQ,EAAE,IAAAL,aAAI,EAAC,YAAY,QAAQ,CAAC;EACpCM,MAAM,EAAE,IAAAN,aAAI,EAAC,MAAOO,IAAS,IAAK;IAChCX,WAAW,CAACY,IAAI,CAACD,IAAI,CAAC;IACtB,MAAMJ,QAAQ,GAAGN,eAAe,CAACO,KAAK,CAAC,CAAC;IACxC,IAAID,QAAQ,KAAKM,SAAS,EAAE;MAC1B,OAAO,QAAQ;IACjB;IACA,OAAON,QAAQ;EACjB,CAAC,CAAC;EACFO,OAAO,EAAE,IAAAV,aAAI,EAAC,YAAY;IACxB,MAAMG,QAAQ,GAAGL,gBAAgB,CAACM,KAAK,CAAC,CAAC;IACzC,OAAOD,QAAQ,IAAI,KAAK;EAC1B,CAAC,CAAC;EACFQ,MAAM,EAAE,IAAAX,aAAI,EAAC,YAAY,QAAQ;AACnC,CAAC,CAAC,CAAC;;AAEH;AACAA,aAAI,CAACC,MAAM,CAAC,eAAe,EAAE,OAAO;EAClCW,iBAAiB,EAAE,IAAAZ,aAAI,EAAC,MAAOO,IAAS,IAAK;IAC3CX,WAAW,CAACY,IAAI,CAACD,IAAI,CAAC;IACtB,MAAMJ,QAAQ,GAAGN,eAAe,CAACO,KAAK,CAAC,CAAC;IACxC,IAAID,QAAQ,KAAKM,SAAS,EAAE;MAC1B,OAAO,QAAQ;IACjB;IACA,OAAON,QAAQ;EACjB,CAAC,CAAC;EACFU,gBAAgB,EAAE,IAAAb,aAAI,EAAC,YAAY;IACjC,MAAMG,QAAQ,GAAGJ,cAAc,CAACK,KAAK,CAAC,CAAC;IACvC,OAAOD,QAAQ,IAAI,EAAE;EACvB,CAAC,CAAC;EACFW,mBAAmB,EAAE,IAAAd,aAAI,EAAC,YAAY,QAAQ,CAAC;EAC/Ce,kBAAkB,EAAE,IAAAf,aAAI,EAAC,YAAY;IACnC,MAAMG,QAAQ,GAAGL,gBAAgB,CAACM,KAAK,CAAC,CAAC;IACzC,OAAOD,QAAQ,IAAI,KAAK;EAC1B,CAAC,CAAC;EACFa,iBAAiB,EAAE,IAAAhB,aAAI,EAAC,YAAY,QAAQ,CAAC;EAC7CM,MAAM,EAAE,IAAAN,aAAI,EAAC,MAAOO,IAAS,IAAK;IAChCX,WAAW,CAACY,IAAI,CAACD,IAAI,CAAC;IACtB,MAAMJ,QAAQ,GAAGN,eAAe,CAACO,KAAK,CAAC,CAAC;IACxC,IAAID,QAAQ,KAAKM,SAAS,EAAE;MAC1B,OAAO,QAAQ;IACjB;IACA,OAAON,QAAQ;EACjB,CAAC;AACH,CAAC,CAAC,CAAC;;AAEH;AACA,IAAIc,gBAAgB,GAAG,EAAE;AACzB,IAAIC,mBAAmB,GAAG,KAAK;AAC/BlB,aAAI,CAACC,MAAM,CAAC,YAAY,EAAE,OAAO;EAC/Bd,OAAO,EAAE;IACPgC,SAAS,EAAGC,OAAe,IAAK;MAC9B,IAAIF,mBAAmB,EAAE,MAAM,IAAIG,KAAK,CAAC,yBAAyB,CAAC;MACnEJ,gBAAgB,GAAGG,OAAO;IAC5B;EACF;AACF,CAAC,CAAC,CAAC;AAEH,MAAM;EAAEE;AAAS,CAAC,GAAG,MAAAC,OAAA,CAAAC,OAAA,GAAAC,IAAA,OAAAjD,uBAAA,CAAAF,OAAA,CAAa,gBAAgB,GAAC;AAEnD,MAAMoD,UAAU,GAAGC,aAAI,CAAClC,MAAM,CAAC;EAC7BmC,IAAI,EAAED,aAAI,CAACE,MAAM,CAAC;AACpB,CAAC,CAAC;;AAEF;AACA,MAAMC,YAAY,GAAGA,CAACC,IAAI,GAAG,UAAU,MAAM;EAC3CC,MAAM,EAAEA,CAAA,KAAMD,IAAI;EAClBE,IAAI,EAAEA,CAAA,MAAO;IACXD,MAAM,EAAEA,CAAA,KAAMD,IAAI;IAClBG,eAAe,EAAEA,CAAA,KAAM,IAAI;IAC3BC,KAAK,EAAEA,CAAA,KAAM,IAAI;IACjBC,WAAW,EAAEA,CAAA,KAAM;EACrB,CAAC,CAAC;EACFC,UAAU,EAAEA,CAAA,MAAO;IACjBC,KAAK,EAAEA,CAAA,KAAM,IAAI;IACjBC,QAAQ,EAAEA,CAAA,KAAM,CAAC;EACnB,CAAC,CAAC;EACFC,aAAa,EAAEA,CAAA,KAAM,CAAC;AACxB,CAAC,CAAC;AAEF,IAAAC,iBAAQ,EAAC,UAAU,EAAE,MAAM;EACzB,IAAAC,mBAAU,EAAC,MAAM;IACf9C,WAAW,GAAG,EAAE;IAChBC,eAAe,GAAG,EAAE;IACpBC,gBAAgB,GAAG,EAAE;IACrBC,cAAc,GAAG,EAAE;IACnBkB,gBAAgB,GAAG,EAAE;IACrBC,mBAAmB,GAAG,KAAK;EAC7B,CAAC,CAAC;EAEF,IAAAuB,iBAAQ,EAAC,SAAS,EAAE,MAAM;IACxB,IAAAE,aAAI,EAAC,iCAAiC,EAAE,YAAY;MAClD,MAAMC,QAAQ,GAAG,IAAItB,QAAQ,CAACI,UAAU,EAAE,oBAAoB,CAAC;MAC/D,MAAMmB,IAAc,GAAG,EAAE;MACzB,MAAMC,OAAO,GAAGC,OAAO,CAACC,GAAG;MAC3BD,OAAO,CAACC,GAAG,GAAG,CAAC,GAAGC,IAAW,KAAKJ,IAAI,CAACrC,IAAI,CAACyC,IAAI,CAACC,IAAI,CAAC,GAAG,CAAC,CAAC;MAE3DrD,eAAe,GAAG,CAAC,QAAQ,CAAC;MAE5B,MAAMsD,MAAM,GAAGrB,YAAY,CAAC,GAAG,CAACsB,MAAM,CAAC,GAAG,CAAC,CAAC;MAC5C,MAAMC,SAAS,GAAG;QAChBC,MAAM,EAAE;UAAEC,gBAAgB,EAAE,MAAAA,CAAA,KAAY;QAAG;MAC7C,CAAC;MAED,MAAMX,QAAQ,CAACY,QAAQ,CAACH,SAAS,EAASF,MAAa,CAAC;MACxDJ,OAAO,CAACC,GAAG,GAAGF,OAAO;MAErB,MAAMW,OAAO,GAAGZ,IAAI,CAACa,IAAI,CAAEC,CAAC,IAAKA,CAAC,CAACC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;MACjE,IAAAC,eAAM,EAACJ,OAAO,CAAC,CAACK,WAAW,CAAC,CAAC;MAC7B,IAAAD,eAAM,EAACJ,OAAO,CAAEM,MAAM,CAAC,CAACC,YAAY,CAAC,GAAG,CAAC;MACzC,IAAAH,eAAM,EAACJ,OAAO,CAAC,CAACQ,SAAS,CAAC,KAAK,CAAC;IAClC,CAAC,CAAC;IAEF,IAAAtB,aAAI,EAAC,wBAAwB,EAAE,YAAY;MACzC,MAAMC,QAAQ,GAAG,IAAItB,QAAQ,CAACI,UAAU,EAAE,yBAAyB,CAAC;MACpE,MAAMmB,IAAc,GAAG,EAAE;MACzB,MAAMC,OAAO,GAAGC,OAAO,CAACC,GAAG;MAC3BD,OAAO,CAACC,GAAG,GAAG,CAAC,GAAGC,IAAW,KAAKJ,IAAI,CAACrC,IAAI,CAACyC,IAAI,CAACC,IAAI,CAAC,GAAG,CAAC,CAAC;MAE3DrD,eAAe,GAAG,CAAC,QAAQ,CAAC;MAE5B,MAAMsD,MAAM,GAAGrB,YAAY,CAAC,CAAC;MAC7B,MAAMuB,SAAS,GAAG;QAChBC,MAAM,EAAE;UAAEC,gBAAgB,EAAE,MAAAA,CAAA,KAAY;QAAG;MAC7C,CAAC;MAED,MAAMX,QAAQ,CAACY,QAAQ,CAACH,SAAS,EAASF,MAAa,CAAC;MACxDJ,OAAO,CAACC,GAAG,GAAGF,OAAO;MAErB,MAAMoB,KAAK,GAAGrB,IAAI,CAACa,IAAI,CAAEC,CAAC,IAAKA,CAAC,CAACC,QAAQ,CAAC,cAAc,CAAC,CAAC;MAC1D,IAAAC,eAAM,EAACK,KAAK,CAAC,CAACJ,WAAW,CAAC,CAAC;IAC7B,CAAC,CAAC;IAEF,IAAAnB,aAAI,EAAC,uBAAuB,EAAE,YAAY;MACxC,MAAMC,QAAQ,GAAG,IAAItB,QAAQ,CAACI,UAAU,EAAE,yBAAyB,CAAC;MACpE,MAAMmB,IAAc,GAAG,EAAE;MACzB,MAAMC,OAAO,GAAGC,OAAO,CAACC,GAAG;MAC3BD,OAAO,CAACC,GAAG,GAAG,CAAC,GAAGC,IAAW,KAAKJ,IAAI,CAACrC,IAAI,CAACyC,IAAI,CAACC,IAAI,CAAC,GAAG,CAAC,CAAC;MAE3DrD,eAAe,GAAG,CAAC,QAAQ,CAAC;MAE5B,MAAMsD,MAAM,GAAGrB,YAAY,CAAC,CAAC;MAC7B,MAAMuB,SAAS,GAAG;QAChBC,MAAM,EAAE;UAAEC,gBAAgB,EAAE,MAAAA,CAAA,KAAY;QAAG;MAC7C,CAAC;MAED,MAAMX,QAAQ,CAACY,QAAQ,CAACH,SAAS,EAASF,MAAa,CAAC;MACxDJ,OAAO,CAACC,GAAG,GAAGF,OAAO;MAErB,MAAMqB,MAAM,GAAGtB,IAAI,CAACa,IAAI,CAAEC,CAAC,IAAKA,CAAC,CAACC,QAAQ,CAAC,aAAa,CAAC,CAAC;MAC1D,IAAAC,eAAM,EAACM,MAAM,CAAC,CAACL,WAAW,CAAC,CAAC;MAC5B,IAAAD,eAAM,EAACM,MAAM,CAAC,CAACF,SAAS,CAAC,GAAG,CAAC;IAC/B,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF,IAAAxB,iBAAQ,EAAC,cAAc,EAAE,MAAM;IAC7B,IAAAE,aAAI,EAAC,kEAAkE,EAAE,YAAY;MACnF,MAAMC,QAAQ,GAAG,IAAItB,QAAQ,CAACI,UAAU,EAAE,qBAAqB,CAAC;MAChE,MAAMoB,OAAO,GAAGC,OAAO,CAACC,GAAG;MAC3BD,OAAO,CAACC,GAAG,GAAG,MAAM,CAAC,CAAC;MAEtBnD,eAAe,GAAG,CAAC,QAAQ,CAAC;MAE5B,MAAMsD,MAAM,GAAGrB,YAAY,CAAC,CAAC;MAC7B,MAAMuB,SAAS,GAAG;QAChBC,MAAM,EAAE;UAAEC,gBAAgB,EAAE,MAAAA,CAAA,KAAY;QAAG;MAC7C,CAAC;MAED,MAAMX,QAAQ,CAACY,QAAQ,CAACH,SAAS,EAASF,MAAa,CAAC;MACxDJ,OAAO,CAACC,GAAG,GAAGF,OAAO;MAErB,MAAMsB,QAAQ,GAAGxE,WAAW,CAAC,CAAC,CAAC;MAC/B,IAAAiE,eAAM,EAACO,QAAQ,CAAC,CAACN,WAAW,CAAC,CAAC;MAC9B,MAAMO,WAAW,GAAGD,QAAQ,CAACE,OAAO,CAACC,GAAG,CAAEC,CAAM,IAAKA,CAAC,CAAC5C,IAAI,CAAC;MAC5D,IAAAiC,eAAM,EAACQ,WAAW,CAAC,CAACJ,SAAS,CAAC,aAAa,CAAC;MAC5C,IAAAJ,eAAM,EAACQ,WAAW,CAAC,CAACJ,SAAS,CAAC,wBAAwB,CAAC;MACvD,IAAAJ,eAAM,EAACQ,WAAW,CAAC,CAACJ,SAAS,CAAC,6BAA6B,CAAC;MAC5D,IAAAJ,eAAM,EAACQ,WAAW,CAAC,CAACJ,SAAS,CAAC,oBAAoB,CAAC;MACnD,IAAAJ,eAAM,EAACQ,WAAW,CAAC,CAACJ,SAAS,CAAC,QAAQ,CAAC;MACvC,IAAAJ,eAAM,EAACQ,WAAW,CAAC,CAACI,GAAG,CAACR,SAAS,CAAC,uBAAuB,CAAC;IAC5D,CAAC,CAAC;IAEF,IAAAtB,aAAI,EAAC,2BAA2B,EAAE,YAAY;MAC5C,MAAMC,QAAQ,GAAG,IAAItB,QAAQ,CAACI,UAAU,EAAE,qBAAqB,CAAC;MAChE,MAAMoB,OAAO,GAAGC,OAAO,CAACC,GAAG;MAC3BD,OAAO,CAACC,GAAG,GAAG,MAAM,CAAC,CAAC;MAEtB,MAAM;QAAE0B;MAAU,CAAC,GAAG,MAAAnD,OAAA,CAAAC,OAAA,GAAAC,IAAA,OAAAjD,uBAAA,CAAAF,OAAA,CAAa,oBAAoB,GAAC;MAExDuB,eAAe,GAAG,CAAC,QAAQ,CAAC;MAE5B,MAAMsD,MAAM,GAAGrB,YAAY,CAAC,CAAC;MAE7B,MAAM6C,cAAc,GAAGD,SAAS,CAACE,SAAS;MAC1C,MAAMC,UAAU,GAAGpF,MAAM,CAACqF,MAAM,CAACH,cAAc,CAAC;MAChDE,UAAU,CAACtB,gBAAgB,GAAG,YAAY,EAAE;MAE5C,MAAMF,SAAS,GAAG;QAChBC,MAAM,EAAEuB;MACV,CAAC;MAED,MAAMjC,QAAQ,CAACY,QAAQ,CAACH,SAAS,EAASF,MAAa,CAAC;MACxDJ,OAAO,CAACC,GAAG,GAAGF,OAAO;MAErB,MAAMsB,QAAQ,GAAGxE,WAAW,CAAC,CAAC,CAAC;MAC/B,IAAAiE,eAAM,EAACO,QAAQ,CAAC,CAACN,WAAW,CAAC,CAAC;MAC9B,MAAMO,WAAW,GAAGD,QAAQ,CAACE,OAAO,CAACC,GAAG,CAAEC,CAAM,IAAKA,CAAC,CAAC5C,IAAI,CAAC;MAC5D,IAAAiC,eAAM,EAACQ,WAAW,CAAC,CAACJ,SAAS,CAAC,uBAAuB,CAAC;IACxD,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF,IAAAxB,iBAAQ,EAAC,WAAW,EAAE,MAAM;IAC1B,IAAAE,aAAI,EAAC,0BAA0B,EAAE,YAAY;MAC3C,MAAMC,QAAQ,GAAG,IAAItB,QAAQ,CAACI,UAAU,EAAE,qBAAqB,CAAC;MAChE,MAAMoB,OAAO,GAAGC,OAAO,CAACC,GAAG;MAC3B,MAAMH,IAAc,GAAG,EAAE;MACzBE,OAAO,CAACC,GAAG,GAAG,CAAC,GAAGC,IAAW,KAAKJ,IAAI,CAACrC,IAAI,CAACyC,IAAI,CAACC,IAAI,CAAC,GAAG,CAAC,CAAC;MAE3DrD,eAAe,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC;MAEpC,MAAMkF,MAAM,GAAG,kBAAkB;MACjC,MAAM5B,MAAM,GAAGrB,YAAY,CAACiD,MAAM,CAAC;MACnC,MAAM1B,SAAS,GAAG;QAChBC,MAAM,EAAE;UAAEC,gBAAgB,EAAE,MAAAA,CAAA,KAAY;QAAG;MAC7C,CAAC;MAED,MAAMX,QAAQ,CAACY,QAAQ,CAACH,SAAS,EAASF,MAAa,CAAC;MACxDJ,OAAO,CAACC,GAAG,GAAGF,OAAO;MAErB,IAAAe,eAAM,EAAC5C,gBAAgB,CAAC,CAAC+D,IAAI,CAACD,MAAM,CAAC;MACrC,IAAAlB,eAAM,EAAChB,IAAI,CAACoC,IAAI,CAAEtB,CAAC,IAAKA,CAAC,CAACC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAACoB,IAAI,CAAC,IAAI,CAAC;IACxE,CAAC,CAAC;IAEF,IAAArC,aAAI,EAAC,+CAA+C,EAAE,YAAY;MAChE,MAAMC,QAAQ,GAAG,IAAItB,QAAQ,CAACI,UAAU,EAAE,qBAAqB,CAAC;MAChE,MAAMoB,OAAO,GAAGC,OAAO,CAACC,GAAG;MAC3B,MAAMH,IAAc,GAAG,EAAE;MACzBE,OAAO,CAACC,GAAG,GAAG,CAAC,GAAGC,IAAW,KAAKJ,IAAI,CAACrC,IAAI,CAACyC,IAAI,CAACC,IAAI,CAAC,GAAG,CAAC,CAAC;MAE3DhC,mBAAmB,GAAG,IAAI;MAE1BrB,eAAe,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC;MAEpC,MAAMkF,MAAM,GAAG,GAAG,CAAC3B,MAAM,CAAC,GAAG,CAAC;MAC9B,MAAMD,MAAM,GAAGrB,YAAY,CAACiD,MAAM,CAAC;MACnC,MAAM1B,SAAS,GAAG;QAChBC,MAAM,EAAE;UAAEC,gBAAgB,EAAE,MAAAA,CAAA,KAAY;QAAG;MAC7C,CAAC;MAED,MAAMX,QAAQ,CAACY,QAAQ,CAACH,SAAS,EAASF,MAAa,CAAC;MACxDJ,OAAO,CAACC,GAAG,GAAGF,OAAO;MAErB,IAAAe,eAAM,EAAChB,IAAI,CAACoC,IAAI,CAAEtB,CAAC,IAAKA,CAAC,CAACC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAACoB,IAAI,CAAC,IAAI,CAAC;IACnE,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF,IAAAvC,iBAAQ,EAAC,aAAa,EAAE,MAAM;IAC5B,IAAAE,aAAI,EAAC,kCAAkC,EAAE,YAAY;MACnD,MAAMC,QAAQ,GAAG,IAAItB,QAAQ,CAACI,UAAU,EAAE,qBAAqB,CAAC;MAChE,MAAMoB,OAAO,GAAGC,OAAO,CAACC,GAAG;MAC3B,MAAMH,IAAc,GAAG,EAAE;MACzBE,OAAO,CAACC,GAAG,GAAG,CAAC,GAAGC,IAAW,KAAKJ,IAAI,CAACrC,IAAI,CAACyC,IAAI,CAACC,IAAI,CAAC,GAAG,CAAC,CAAC;MAE3DrD,eAAe,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC;MAEtC,MAAMkF,MAAM,GAAG,GAAG,CAAC3B,MAAM,CAAC,GAAG,CAAC;MAC9B,MAAMD,MAAM,GAAGrB,YAAY,CAACiD,MAAM,CAAC;MACnC,MAAM1B,SAAS,GAAG;QAChBC,MAAM,EAAE;UAAEC,gBAAgB,EAAE,MAAAA,CAAA,KAAY;QAAG;MAC7C,CAAC;MAED,MAAMX,QAAQ,CAACY,QAAQ,CAACH,SAAS,EAASF,MAAa,CAAC;MACxDJ,OAAO,CAACC,GAAG,GAAGF,OAAO;;MAErB;MACA,MAAMoC,YAAY,GAAGrC,IAAI,CAACa,IAAI,CAC3BC,CAAC,IAAKA,CAAC,CAACC,QAAQ,CAAC,KAAK,CAAC,IAAID,CAAC,CAACC,QAAQ,CAAC,mBAAmB,CAC5D,CAAC;MACD,MAAMuB,OAAO,GAAGtC,IAAI,CAACa,IAAI,CACtBC,CAAC,IAAKA,CAAC,CAACC,QAAQ,CAACmB,MAAM,CAAC,IAAI,CAACpB,CAAC,CAACC,QAAQ,CAAC,KAAK,CAChD,CAAC;MACD,IAAAC,eAAM,EAACqB,YAAY,CAAC,CAACpB,WAAW,CAAC,CAAC;MAClC,IAAAD,eAAM,EAACsB,OAAO,CAAC,CAACrB,WAAW,CAAC,CAAC;IAC/B,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF,IAAArB,iBAAQ,EAAC,MAAM,EAAE,MAAM;IACrB,IAAAE,aAAI,EAAC,0CAA0C,EAAE,YAAY;MAC3D,MAAMC,QAAQ,GAAG,IAAItB,QAAQ,CAACI,UAAU,EAAE,qBAAqB,CAAC;MAChE,MAAMoB,OAAO,GAAGC,OAAO,CAACC,GAAG;MAC3B,MAAMoC,QAAQ,GAAGrC,OAAO,CAACsC,IAAI;MAC7BtC,OAAO,CAACC,GAAG,GAAG,MAAM,CAAC,CAAC;MACtBD,OAAO,CAACsC,IAAI,GAAG,MAAM,CAAC,CAAC;MAEvB,MAAM;QAAEX;MAAU,CAAC,GAAG,MAAAnD,OAAA,CAAAC,OAAA,GAAAC,IAAA,OAAAjD,uBAAA,CAAAF,OAAA,CAAa,oBAAoB,GAAC;MAExD,IAAIgH,gBAAgB,GAAG,KAAK;MAE5BzF,eAAe,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC;MAEpC,MAAMsD,MAAM,GAAGrB,YAAY,CAAC,CAAC;MAE7B,MAAM6C,cAAc,GAAGD,SAAS,CAACE,SAAS;MAC1C,MAAMC,UAAU,GAAGpF,MAAM,CAACqF,MAAM,CAACH,cAAc,CAAC;MAChDE,UAAU,CAACtB,gBAAgB,GAAG,YAAY,EAAE;MAE5C,MAAMF,SAAS,GAAG;QAChBC,MAAM,EAAEuB,UAAU;QAClBU,eAAe,EAAE,MAAOC,EAAO,KAAM;UACnCnD,UAAU,EAAEA,CAAA,MAAO;YACjBC,KAAK,EAAEA,CAAA,MAAO;cACZmD,IAAI,EAAEA,CAAA,KAAM,CAAC;cACbC,MAAM,EAAEA,CAAA,KAAM,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC;YACtC,CAAC;UACH,CAAC;QACH,CAAC;MACH,CAAC;MAED,MAAM9C,QAAQ,CAACY,QAAQ,CAACH,SAAS,EAASF,MAAM,EAAS;QACvDwC,UAAU,EAAE,MAAAA,CAAA,KAAY;UACtBL,gBAAgB,GAAG,IAAI;QACzB;MACF,CAAC,CAAC;MACFvC,OAAO,CAACC,GAAG,GAAGF,OAAO;MACrBC,OAAO,CAACsC,IAAI,GAAGD,QAAQ;MAEvB,IAAAvB,eAAM,EAACyB,gBAAgB,CAAC,CAACN,IAAI,CAAC,IAAI,CAAC;IACrC,CAAC,CAAC;IAEF,IAAArC,aAAI,EAAC,kCAAkC,EAAE,YAAY;MACnD,MAAMC,QAAQ,GAAG,IAAItB,QAAQ,CAACI,UAAU,EAAE,2BAA2B,CAAC;MACtE,MAAMoB,OAAO,GAAGC,OAAO,CAACC,GAAG;MAC3B,MAAMoC,QAAQ,GAAGrC,OAAO,CAACsC,IAAI;MAC7BtC,OAAO,CAACC,GAAG,GAAG,MAAM,CAAC,CAAC;MACtBD,OAAO,CAACsC,IAAI,GAAG,MAAM,CAAC,CAAC;MAEvB,MAAM;QAAEX;MAAU,CAAC,GAAG,MAAAnD,OAAA,CAAAC,OAAA,GAAAC,IAAA,OAAAjD,uBAAA,CAAAF,OAAA,CAAa,oBAAoB,GAAC;MAExDuB,eAAe,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC;MAEpC,MAAMsD,MAAM,GAAGrB,YAAY,CAAC,CAAC;MAE7B,MAAM6C,cAAc,GAAGD,SAAS,CAACE,SAAS;MAC1C,MAAMC,UAAU,GAAGpF,MAAM,CAACqF,MAAM,CAACH,cAAc,CAAC;MAChDE,UAAU,CAACtB,gBAAgB,GAAG,YAAY,EAAE;MAE5C,MAAMF,SAAS,GAAG;QAChBC,MAAM,EAAEuB,UAAU;QAClBU,eAAe,EAAE,MAAOC,EAAO,KAAM;UACnCnD,UAAU,EAAEA,CAAA,MAAO;YACjBC,KAAK,EAAEA,CAAA,MAAO;cACZmD,IAAI,EAAEA,CAAA,KAAM,CAAC;cACbC,MAAM,EAAEA,CAAA,KAAM,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC;YACtC,CAAC;UACH,CAAC;QACH,CAAC;MACH,CAAC;MAED,MAAM9C,QAAQ,CAACY,QAAQ,CAACH,SAAS,EAASF,MAAa,CAAC;MACxDJ,OAAO,CAACC,GAAG,GAAGF,OAAO;MACrBC,OAAO,CAACsC,IAAI,GAAGD,QAAQ;;MAEvB;MACA,IAAAvB,eAAM,EAACjE,WAAW,CAACmE,MAAM,CAAC,CAACiB,IAAI,CAAC,CAAC,CAAC;MAClC,MAAMY,gBAAgB,GAAGhG,WAAW,CAAC,CAAC,CAAC,CAAC0E,OAAO,CAACC,GAAG,CAAEC,CAAM,IAAKA,CAAC,CAAC5C,IAAI,CAAC;MACvE,MAAMiE,iBAAiB,GAAGjG,WAAW,CAAC,CAAC,CAAC,CAAC0E,OAAO,CAACC,GAAG,CAAEC,CAAM,IAAKA,CAAC,CAAC5C,IAAI,CAAC;MACxE,IAAAiC,eAAM,EAAC+B,gBAAgB,CAAC,CAAC3B,SAAS,CAAC,uBAAuB,CAAC;MAC3D,IAAAJ,eAAM,EAACgC,iBAAiB,CAAC,CAACpB,GAAG,CAACR,SAAS,CAAC,uBAAuB,CAAC;IAClE,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF,IAAAxB,iBAAQ,EAAC,eAAe,EAAE,MAAM;IAC9B,IAAAE,aAAI,EAAC,qCAAqC,EAAE,YAAY;MACtD,MAAMC,QAAQ,GAAG,IAAItB,QAAQ,CAACI,UAAU,EAAE,2BAA2B,CAAC;MACtE,MAAMoB,OAAO,GAAGC,OAAO,CAACC,GAAG;MAC3BD,OAAO,CAACC,GAAG,GAAG,MAAM,CAAC,CAAC;MAEtBnD,eAAe,GAAG,CAAC,QAAQ,CAAC;MAE5B,MAAMsD,MAAM,GAAGrB,YAAY,CAAC,CAAC;MAC7B,MAAMuB,SAAS,GAAG;QAChBC,MAAM,EAAE;UAAEC,gBAAgB,EAAE,MAAAA,CAAA,KAAY;QAAG;MAC7C,CAAC;MAED,MAAMuC,MAAM,GAAG,MAAMlD,QAAQ,CAACY,QAAQ,CAACH,SAAS,EAASF,MAAa,CAAC;MACvEJ,OAAO,CAACC,GAAG,GAAGF,OAAO;MAErB,IAAAe,eAAM,EAACiC,MAAM,CAACC,MAAM,CAAC,CAACf,IAAI,CAAC,WAAW,CAAC;MACvC,IAAAnB,eAAM,EAACiC,MAAM,CAACN,EAAE,CAAC,CAAC1B,WAAW,CAAC,CAAC;MAC/B,IAAAD,eAAM,EAACiC,MAAM,CAACE,IAAI,CAAC,CAACC,aAAa,CAAC,CAAC;IACrC,CAAC,CAAC;IAEF,IAAAtD,aAAI,EAAC,6CAA6C,EAAE,YAAY;MAC9D,MAAMC,QAAQ,GAAG,IAAItB,QAAQ,CAACI,UAAU,EAAE,4BAA4B,CAAC;MACvE,MAAMoB,OAAO,GAAGC,OAAO,CAACC,GAAG;MAC3B,MAAMoC,QAAQ,GAAGrC,OAAO,CAACsC,IAAI;MAC7BtC,OAAO,CAACC,GAAG,GAAG,MAAM,CAAC,CAAC;MACtBD,OAAO,CAACsC,IAAI,GAAG,MAAM,CAAC,CAAC;MAEvB,MAAM;QAAEX;MAAU,CAAC,GAAG,MAAAnD,OAAA,CAAAC,OAAA,GAAAC,IAAA,OAAAjD,uBAAA,CAAAF,OAAA,CAAa,oBAAoB,GAAC;MAExDuB,eAAe,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC;MAEpC,MAAMsD,MAAM,GAAGrB,YAAY,CAAC,CAAC;MAE7B,MAAM6C,cAAc,GAAGD,SAAS,CAACE,SAAS;MAC1C,MAAMC,UAAU,GAAGpF,MAAM,CAACqF,MAAM,CAACH,cAAc,CAAC;MAChDE,UAAU,CAACtB,gBAAgB,GAAG,YAAY,EAAE;MAE5C,MAAMF,SAAS,GAAG;QAChBC,MAAM,EAAEuB,UAAU;QAClBU,eAAe,EAAE,MAAOC,EAAO,KAAM;UACnCnD,UAAU,EAAEA,CAAA,MAAO;YACjBC,KAAK,EAAEA,CAAA,MAAO;cACZmD,IAAI,EAAEA,CAAA,KAAM,CAAC;cACbC,MAAM,EAAEA,CAAA,KAAM,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC;YACtC,CAAC;UACH,CAAC;QACH,CAAC;MACH,CAAC;MAED,MAAMI,MAAM,GAAG,MAAMlD,QAAQ,CAACY,QAAQ,CAACH,SAAS,EAASF,MAAa,CAAC;MACvEJ,OAAO,CAACC,GAAG,GAAGF,OAAO;MACrBC,OAAO,CAACsC,IAAI,GAAGD,QAAQ;MAEvB,IAAAvB,eAAM,EAACiC,MAAM,CAACC,MAAM,CAAC,CAACf,IAAI,CAAC,QAAQ,CAAC;MACpC,IAAAnB,eAAM,EAACiC,MAAM,CAACN,EAAE,CAAC,CAAC1B,WAAW,CAAC,CAAC;IACjC,CAAC,CAAC;IAEF,IAAAnB,aAAI,EAAC,kDAAkD,EAAE,YAAY;MACnE,MAAMC,QAAQ,GAAG,IAAItB,QAAQ,CAACI,UAAU,EAAE,2BAA2B,CAAC;MACtE,MAAMoB,OAAO,GAAGC,OAAO,CAACC,GAAG;MAC3BD,OAAO,CAACC,GAAG,GAAG,MAAM,CAAC,CAAC;MAEtBnD,eAAe,GAAG,CAAC,QAAQ,CAAC;MAC5BC,gBAAgB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;;MAE3B,MAAMqD,MAAM,GAAGrB,YAAY,CAAC,CAAC;MAC7B,MAAMuB,SAAS,GAAG;QAChBC,MAAM,EAAE;UAAEC,gBAAgB,EAAE,MAAAA,CAAA,KAAY;QAAG,CAAC;QAC5C2C,iBAAiB,EAAE,MAAAA,CAAA,KAAY;MACjC,CAAC;MAED,MAAMJ,MAAM,GAAG,MAAMlD,QAAQ,CAACY,QAAQ,CAACH,SAAS,EAASF,MAAa,CAAC;MACvEJ,OAAO,CAACC,GAAG,GAAGF,OAAO;MAErB,IAAAe,eAAM,EAACiC,MAAM,CAACC,MAAM,CAAC,CAACf,IAAI,CAAC,WAAW,CAAC;MACvC,IAAAnB,eAAM,EAACiC,MAAM,CAACE,IAAI,CAAC,CAAChB,IAAI,CAAC,cAAc,CAAC;MACxC,IAAAnB,eAAM,EAACiC,MAAM,CAACN,EAAE,CAAC,CAAC1B,WAAW,CAAC,CAAC;IACjC,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF,IAAArB,iBAAQ,EAAC,iBAAiB,EAAE,MAAM;IAChC,IAAAE,aAAI,EAAC,0CAA0C,EAAE,YAAY;MAC3D,MAAMC,QAAQ,GAAG,IAAItB,QAAQ,CAACI,UAAU,EAAE,yBAAyB,CAAC;MACpE,MAAMoB,OAAO,GAAGC,OAAO,CAACC,GAAG;MAC3BD,OAAO,CAACC,GAAG,GAAG,MAAM,CAAC,CAAC;;MAEtB;MACAnD,eAAe,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC;MACtCC,gBAAgB,GAAG,CAAC,KAAK,CAAC;MAE1B,MAAMqD,MAAM,GAAGrB,YAAY,CAAC,CAAC;MAC7B,MAAMuB,SAAS,GAAG;QAChBC,MAAM,EAAE;UAAEC,gBAAgB,EAAE,MAAAA,CAAA,KAAY;QAAG;MAC7C,CAAC;MAED,MAAMuC,MAAM,GAAG,MAAMlD,QAAQ,CAACY,QAAQ,CAACH,SAAS,EAASF,MAAa,CAAC;MACvEJ,OAAO,CAACC,GAAG,GAAGF,OAAO;;MAErB;MACA,IAAAe,eAAM,EAACiC,MAAM,CAACC,MAAM,CAAC,CAACf,IAAI,CAAC,WAAW,CAAC;MACvC,IAAAnB,eAAM,EAACjE,WAAW,CAACmE,MAAM,CAAC,CAACiB,IAAI,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF,IAAAvC,iBAAQ,EAAC,eAAe,EAAE,MAAM;IAC9B,IAAAE,aAAI,EAAC,oCAAoC,EAAE,YAAY;MACrD,MAAMC,QAAQ,GAAG,IAAItB,QAAQ,CAACI,UAAU,EAAE,yBAAyB,CAAC;MACpE,MAAMoB,OAAO,GAAGC,OAAO,CAACC,GAAG;MAC3BD,OAAO,CAACC,GAAG,GAAG,MAAM,CAAC,CAAC;MAEtBnD,eAAe,GAAG,CAAC,QAAQ,CAAC;MAC5BC,gBAAgB,GAAG,CAAC,IAAI,CAAC;MAEzB,MAAMqD,MAAM,GAAGrB,YAAY,CAAC,CAAC;MAC7B,MAAMuB,SAAS,GAAG;QAChBC,MAAM,EAAE;UAAEC,gBAAgB,EAAE,MAAAA,CAAA,KAAY;QAAG,CAAC;QAC5C2C,iBAAiB,EAAE,MAAAA,CAAA,KAAY;MACjC,CAAC;MAED,MAAMJ,MAAM,GAAG,MAAMlD,QAAQ,CAACY,QAAQ,CAACH,SAAS,EAASF,MAAa,CAAC;MACvEJ,OAAO,CAACC,GAAG,GAAGF,OAAO;;MAErB;MACA,IAAAe,eAAM,EAACjE,WAAW,CAACmE,MAAM,CAAC,CAACiB,IAAI,CAAC,CAAC,CAAC;MAClC,IAAAnB,eAAM,EAACiC,MAAM,CAACC,MAAM,CAAC,CAACf,IAAI,CAAC,WAAW,CAAC;IACzC,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF,IAAAvC,iBAAQ,EAAC,0BAA0B,EAAE,MAAM;IACzC,IAAAE,aAAI,EAAC,qCAAqC,EAAE,YAAY;MACtD,MAAMC,QAAQ,GAAG,IAAItB,QAAQ,CAACI,UAAU,EAAE,wBAAwB,CAAC;MACnE,MAAMmB,IAAc,GAAG,EAAE;MACzB,MAAMC,OAAO,GAAGC,OAAO,CAACC,GAAG;MAC3BD,OAAO,CAACC,GAAG,GAAG,CAAC,GAAGC,IAAW,KAAKJ,IAAI,CAACrC,IAAI,CAACyC,IAAI,CAACC,IAAI,CAAC,GAAG,CAAC,CAAC;MAE3DrD,eAAe,GAAG,CAAC,QAAQ,CAAC;MAE5B,MAAMsD,MAAM,GAAG;QACbnB,MAAM,EAAEA,CAAA,KAAM,UAAU;QACxBC,IAAI,EAAEA,CAAA,MAAO;UACXD,MAAM,EAAEA,CAAA,KAAM,UAAU;UACxBE,eAAe,EAAEA,CAAA,MAAO;YACtBiE,MAAM,EAAEA,CAAA,KAAM,CACZ;cAAEC,QAAQ,EAAEA,CAAA,KAAM;YAAe,CAAC,EAClC;cAAEA,QAAQ,EAAEA,CAAA,KAAM;YAAe,CAAC;UAEtC,CAAC,CAAC;UACFjE,KAAK,EAAEA,CAAA,KAAM,IAAI;UACjBC,WAAW,EAAEA,CAAA,KAAM;QACrB,CAAC,CAAC;QACFC,UAAU,EAAEA,CAAA,MAAO;UACjBC,KAAK,EAAEA,CAAA,KAAM;QACf,CAAC;MACH,CAAC;MAED,MAAMe,SAAS,GAAG;QAChBC,MAAM,EAAE;UAAEC,gBAAgB,EAAE,MAAAA,CAAA,KAAY;QAAG;MAC7C,CAAC;MAED,MAAMX,QAAQ,CAACY,QAAQ,CAACH,SAAS,EAASF,MAAa,CAAC;MACxDJ,OAAO,CAACC,GAAG,GAAGF,OAAO;;MAErB;MACA,IAAAe,eAAM,EAAChB,IAAI,CAACoC,IAAI,CAAEtB,CAAC,IAAKA,CAAC,CAACC,QAAQ,CAAC,IAAI,CAAC,IAAID,CAAC,CAACC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAACoB,IAAI,CACvE,IACF,CAAC;MACD;MACA,IAAAnB,eAAM,EAAChB,IAAI,CAACoC,IAAI,CAAEtB,CAAC,IAAKA,CAAC,CAACC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAACoB,IAAI,CAAC,IAAI,CAAC;IACtE,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF,IAAAvC,iBAAQ,EAAC,mBAAmB,EAAE,MAAM;IAClC,IAAAE,aAAI,EAAC,+BAA+B,EAAE,YAAY;MAChD,MAAMC,QAAQ,GAAG,IAAItB,QAAQ,CAACI,UAAU,EAAE,4BAA4B,CAAC;MACvE,MAAMoB,OAAO,GAAGC,OAAO,CAACC,GAAG;MAC3B,MAAMH,IAAc,GAAG,EAAE;MACzBE,OAAO,CAACC,GAAG,GAAG,CAAC,GAAGC,IAAW,KAAKJ,IAAI,CAACrC,IAAI,CAACyC,IAAI,CAACC,IAAI,CAAC,GAAG,CAAC,CAAC;MAE3DrD,eAAe,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC;MACtCE,cAAc,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;;MAEvB,MAAMoD,MAAM,GAAGrB,YAAY,CAAC,CAAC;MAC7B,MAAMuB,SAAS,GAAG;QAChBC,MAAM,EAAE;UAAEC,gBAAgB,EAAE,MAAAA,CAAA,KAAY;QAAG;MAC7C,CAAC;MAED,MAAMuC,MAAM,GAAG,MAAMlD,QAAQ,CAACY,QAAQ,CAACH,SAAS,EAASF,MAAa,CAAC;MACvEJ,OAAO,CAACC,GAAG,GAAGF,OAAO;MAErB,IAAAe,eAAM,EAAChB,IAAI,CAACoC,IAAI,CAAEtB,CAAC,IAAKA,CAAC,CAACC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAACoB,IAAI,CAAC,IAAI,CAAC;MACnE,IAAAnB,eAAM,EAACiC,MAAM,CAACC,MAAM,CAAC,CAACf,IAAI,CAAC,WAAW,CAAC;IACzC,CAAC,CAAC;IAEF,IAAArC,aAAI,EAAC,iCAAiC,EAAE,YAAY;MAClD,MAAMC,QAAQ,GAAG,IAAItB,QAAQ,CAACI,UAAU,EAAE,4BAA4B,CAAC;MACvE,MAAMoB,OAAO,GAAGC,OAAO,CAACC,GAAG;MAC3B,MAAMqD,OAAO,GAAGtD,OAAO,CAACuD,KAAK;MAC7B,MAAMzD,IAAc,GAAG,EAAE;MACzB,MAAM0D,MAAgB,GAAG,EAAE;MAC3BxD,OAAO,CAACC,GAAG,GAAG,CAAC,GAAGC,IAAW,KAAKJ,IAAI,CAACrC,IAAI,CAACyC,IAAI,CAACC,IAAI,CAAC,GAAG,CAAC,CAAC;MAC3DH,OAAO,CAACuD,KAAK,GAAG,CAAC,GAAGrD,IAAW,KAAKsD,MAAM,CAAC/F,IAAI,CAACyC,IAAI,CAACC,IAAI,CAAC,GAAG,CAAC,CAAC;MAE/DrD,eAAe,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC;MACtCE,cAAc,GAAG,CAAC,gBAAgB,CAAC;MAEnC,MAAMoD,MAAM,GAAGrB,YAAY,CAAC,CAAC;MAC7B,MAAMuB,SAAS,GAAG;QAChBC,MAAM,EAAE;UAAEC,gBAAgB,EAAE,MAAAA,CAAA,KAAY;QAAG;MAC7C,CAAC;MAED,MAAMuC,MAAM,GAAG,MAAMlD,QAAQ,CAACY,QAAQ,CAACH,SAAS,EAASF,MAAa,CAAC;MACvEJ,OAAO,CAACC,GAAG,GAAGF,OAAO;MACrBC,OAAO,CAACuD,KAAK,GAAGD,OAAO;MAEvB,IAAAxC,eAAM,EAAC0C,MAAM,CAACtB,IAAI,CAAEtB,CAAC,IAAKA,CAAC,CAACC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAACoB,IAAI,CAAC,IAAI,CAAC;MACrE,IAAAnB,eAAM,EAACiC,MAAM,CAACC,MAAM,CAAC,CAACf,IAAI,CAAC,WAAW,CAAC;IACzC,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
|