@nookplot/runtime 0.5.108 → 0.5.109

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.
Files changed (91) hide show
  1. package/dist/__tests__/autonomous.getAvailableActions.test.js +7 -4
  2. package/dist/__tests__/autonomous.getAvailableActions.test.js.map +1 -1
  3. package/dist/__tests__/autonomous.goalBootstrap.test.d.ts +2 -0
  4. package/dist/__tests__/autonomous.goalBootstrap.test.d.ts.map +1 -0
  5. package/dist/__tests__/autonomous.goalBootstrap.test.js +148 -0
  6. package/dist/__tests__/autonomous.goalBootstrap.test.js.map +1 -0
  7. package/dist/__tests__/conversation/modelThresholdsParity.test.js +6 -11
  8. package/dist/__tests__/conversation/modelThresholdsParity.test.js.map +1 -1
  9. package/dist/__tests__/goalLoop.test.d.ts +2 -0
  10. package/dist/__tests__/goalLoop.test.d.ts.map +1 -0
  11. package/dist/__tests__/goalLoop.test.js +224 -0
  12. package/dist/__tests__/goalLoop.test.js.map +1 -0
  13. package/dist/__tests__/helpers/mockRuntime.d.ts.map +1 -1
  14. package/dist/__tests__/helpers/mockRuntime.js +7 -0
  15. package/dist/__tests__/helpers/mockRuntime.js.map +1 -1
  16. package/dist/__tests__/lineage.test.d.ts +2 -0
  17. package/dist/__tests__/lineage.test.d.ts.map +1 -0
  18. package/dist/__tests__/lineage.test.js +131 -0
  19. package/dist/__tests__/lineage.test.js.map +1 -0
  20. package/dist/__tests__/loadProfile.test.d.ts +8 -0
  21. package/dist/__tests__/loadProfile.test.d.ts.map +1 -0
  22. package/dist/__tests__/loadProfile.test.js +134 -0
  23. package/dist/__tests__/loadProfile.test.js.map +1 -0
  24. package/dist/__tests__/presetLoader.test.d.ts +2 -0
  25. package/dist/__tests__/presetLoader.test.d.ts.map +1 -0
  26. package/dist/__tests__/presetLoader.test.js +749 -0
  27. package/dist/__tests__/presetLoader.test.js.map +1 -0
  28. package/dist/__tests__/sandbox.test.js +24 -24
  29. package/dist/actionCatalog.generated.d.ts +1 -1
  30. package/dist/actionCatalog.generated.d.ts.map +1 -1
  31. package/dist/actionCatalog.generated.js +11 -1
  32. package/dist/actionCatalog.generated.js.map +1 -1
  33. package/dist/autonomous.d.ts +15 -1
  34. package/dist/autonomous.d.ts.map +1 -1
  35. package/dist/autonomous.js +195 -37
  36. package/dist/autonomous.js.map +1 -1
  37. package/dist/connection.d.ts +1 -1
  38. package/dist/connection.d.ts.map +1 -1
  39. package/dist/connection.js +2 -1
  40. package/dist/connection.js.map +1 -1
  41. package/dist/contentSafety.d.ts +1 -1
  42. package/dist/contentSafety.d.ts.map +1 -1
  43. package/dist/contentSafety.js +6 -2
  44. package/dist/contentSafety.js.map +1 -1
  45. package/dist/conversation/modelLimits.js +17 -17
  46. package/dist/discovery.js +1 -1
  47. package/dist/discovery.js.map +1 -1
  48. package/dist/goal/goalLoop.d.ts +75 -0
  49. package/dist/goal/goalLoop.d.ts.map +1 -0
  50. package/dist/goal/goalLoop.js +347 -0
  51. package/dist/goal/goalLoop.js.map +1 -0
  52. package/dist/goal/goalPrompts.d.ts +20 -0
  53. package/dist/goal/goalPrompts.d.ts.map +1 -0
  54. package/dist/goal/goalPrompts.js +54 -0
  55. package/dist/goal/goalPrompts.js.map +1 -0
  56. package/dist/goal/types.d.ts +98 -0
  57. package/dist/goal/types.d.ts.map +1 -0
  58. package/dist/goal/types.js +7 -0
  59. package/dist/goal/types.js.map +1 -0
  60. package/dist/identity.d.ts +51 -0
  61. package/dist/identity.d.ts.map +1 -1
  62. package/dist/identity.js +50 -0
  63. package/dist/identity.js.map +1 -1
  64. package/dist/index.d.ts +10 -2
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +6 -1
  67. package/dist/index.js.map +1 -1
  68. package/dist/lineage.d.ts +69 -0
  69. package/dist/lineage.d.ts.map +1 -0
  70. package/dist/lineage.js +72 -0
  71. package/dist/lineage.js.map +1 -0
  72. package/dist/loadProfile.d.ts +100 -0
  73. package/dist/loadProfile.d.ts.map +1 -0
  74. package/dist/loadProfile.js +221 -0
  75. package/dist/loadProfile.js.map +1 -0
  76. package/dist/presetLoader.d.ts +130 -0
  77. package/dist/presetLoader.d.ts.map +1 -0
  78. package/dist/presetLoader.js +734 -0
  79. package/dist/presetLoader.js.map +1 -0
  80. package/dist/signalActionMap.d.ts.map +1 -1
  81. package/dist/signalActionMap.js +6 -12
  82. package/dist/signalActionMap.js.map +1 -1
  83. package/dist/signing.d.ts +30 -0
  84. package/dist/signing.d.ts.map +1 -1
  85. package/dist/signing.js +55 -0
  86. package/dist/signing.js.map +1 -1
  87. package/dist/swarms.d.ts +13 -0
  88. package/dist/swarms.d.ts.map +1 -1
  89. package/dist/swarms.js +4 -0
  90. package/dist/swarms.js.map +1 -1
  91. package/package.json +60 -61
@@ -0,0 +1,131 @@
1
+ import { describe, it, expect, vi } from "vitest";
2
+ import { LineageManager } from "../lineage.js";
3
+ function createMockConnection(overrides) {
4
+ return {
5
+ request: vi.fn().mockImplementation((_method, path) => {
6
+ if (path === "/v1/forge/lineage/self") {
7
+ return overrides?.lineage ?? {
8
+ address: "0xchild",
9
+ parentAddress: "0xparent",
10
+ childAddresses: [],
11
+ isSpawn: true,
12
+ generation: 1,
13
+ };
14
+ }
15
+ if (path.startsWith("/v1/forge/tree/")) {
16
+ return overrides?.tree ?? { children: [
17
+ { address: "0xchild", soulCid: "QmChild", deploymentId: 42, bundleName: "test-bundle", createdAt: 1000 },
18
+ { address: "0xsibling", soulCid: "QmSib", deploymentId: 43, bundleName: "test-bundle", createdAt: 1001 },
19
+ ] };
20
+ }
21
+ if (path.startsWith("/v1/forge/parent/")) {
22
+ return overrides?.parent ?? {
23
+ address: "0xparent",
24
+ soulCid: "QmParent",
25
+ deploymentId: 1,
26
+ };
27
+ }
28
+ return {};
29
+ }),
30
+ };
31
+ }
32
+ describe("LineageManager", () => {
33
+ it("getLineage returns spawn info", async () => {
34
+ const conn = createMockConnection();
35
+ const mgr = new LineageManager(conn);
36
+ const lineage = await mgr.getLineage();
37
+ expect(lineage.isSpawn).toBe(true);
38
+ expect(lineage.parentAddress).toBe("0xparent");
39
+ expect(lineage.generation).toBe(1);
40
+ expect(conn.request).toHaveBeenCalledWith("GET", "/v1/forge/lineage/self");
41
+ });
42
+ it("caches lineage after first call", async () => {
43
+ const conn = createMockConnection();
44
+ const mgr = new LineageManager(conn);
45
+ await mgr.getLineage();
46
+ await mgr.getLineage();
47
+ // Should only have called the API once
48
+ const lineageCalls = conn.request.mock.calls.filter((c) => c[1] === "/v1/forge/lineage/self");
49
+ expect(lineageCalls).toHaveLength(1);
50
+ });
51
+ it("clearCache forces re-fetch", async () => {
52
+ const conn = createMockConnection();
53
+ const mgr = new LineageManager(conn);
54
+ await mgr.getLineage();
55
+ mgr.clearCache();
56
+ await mgr.getLineage();
57
+ const lineageCalls = conn.request.mock.calls.filter((c) => c[1] === "/v1/forge/lineage/self");
58
+ expect(lineageCalls).toHaveLength(2);
59
+ });
60
+ it("getParent returns parent info for spawned agent", async () => {
61
+ const conn = createMockConnection();
62
+ const mgr = new LineageManager(conn);
63
+ const parent = await mgr.getParent();
64
+ expect(parent).not.toBeNull();
65
+ expect(parent.address).toBe("0xparent");
66
+ });
67
+ it("getParent returns null for root deployment", async () => {
68
+ const conn = createMockConnection({
69
+ lineage: { address: "0xroot", parentAddress: null, childAddresses: ["0xchild"], isSpawn: false, generation: 0 },
70
+ });
71
+ const mgr = new LineageManager(conn);
72
+ const parent = await mgr.getParent();
73
+ expect(parent).toBeNull();
74
+ });
75
+ it("getSiblings excludes self", async () => {
76
+ const conn = createMockConnection();
77
+ const mgr = new LineageManager(conn);
78
+ const siblings = await mgr.getSiblings();
79
+ expect(siblings).toHaveLength(1);
80
+ expect(siblings[0].address).toBe("0xsibling");
81
+ });
82
+ it("getSiblings returns empty for root deployment", async () => {
83
+ const conn = createMockConnection({
84
+ lineage: { address: "0xroot", parentAddress: null, childAddresses: [], isSpawn: false, generation: 0 },
85
+ });
86
+ const mgr = new LineageManager(conn);
87
+ const siblings = await mgr.getSiblings();
88
+ expect(siblings).toHaveLength(0);
89
+ });
90
+ it("getChildren returns child list", async () => {
91
+ const conn = createMockConnection({
92
+ lineage: { address: "0xparent", parentAddress: null, childAddresses: ["0xchild", "0xsibling"], isSpawn: false, generation: 0 },
93
+ });
94
+ const mgr = new LineageManager(conn);
95
+ const children = await mgr.getChildren();
96
+ expect(children).toHaveLength(2);
97
+ });
98
+ it("isSpawn returns boolean", async () => {
99
+ const conn = createMockConnection();
100
+ const mgr = new LineageManager(conn);
101
+ expect(await mgr.isSpawn()).toBe(true);
102
+ });
103
+ describe("inheritFromParent", () => {
104
+ it("inherits memories for spawned agent", async () => {
105
+ const conn = createMockConnection();
106
+ conn.request.mockImplementation((_method, path) => {
107
+ if (path === "/v1/forge/lineage/self") {
108
+ return { address: "0xchild", parentAddress: "0xparent", childAddresses: [], isSpawn: true, generation: 1 };
109
+ }
110
+ if (path === "/v1/forge/inherit") {
111
+ return { inherited: 47, total: 50, parentAddress: "0xparent" };
112
+ }
113
+ return {};
114
+ });
115
+ const mgr = new LineageManager(conn);
116
+ const result = await mgr.inheritFromParent({ types: ["semantic"], minImportance: 0.7 });
117
+ expect(result.inherited).toBe(47);
118
+ expect(result.parentAddress).toBe("0xparent");
119
+ });
120
+ it("returns zero for root deployment", async () => {
121
+ const conn = createMockConnection({
122
+ lineage: { address: "0xroot", parentAddress: null, childAddresses: [], isSpawn: false, generation: 0 },
123
+ });
124
+ const mgr = new LineageManager(conn);
125
+ const result = await mgr.inheritFromParent();
126
+ expect(result.inherited).toBe(0);
127
+ expect(result.parentAddress).toBeNull();
128
+ });
129
+ });
130
+ });
131
+ //# sourceMappingURL=lineage.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lineage.test.js","sourceRoot":"","sources":["../../src/__tests__/lineage.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Tests for the SDK's loadProfile helper.
3
+ *
4
+ * Parallel to @nookplot/mcp's auth-profile.test.ts and @nookplot/cli's
5
+ * profile.test.ts — same resolution order, same backward-compat guarantees.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=loadProfile.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loadProfile.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/loadProfile.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Tests for the SDK's loadProfile helper.
3
+ *
4
+ * Parallel to @nookplot/mcp's auth-profile.test.ts and @nookplot/cli's
5
+ * profile.test.ts — same resolution order, same backward-compat guarantees.
6
+ */
7
+ import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
8
+ import { mkdtempSync, mkdirSync, writeFileSync, rmSync } from "node:fs";
9
+ import { tmpdir } from "node:os";
10
+ import { join } from "node:path";
11
+ let testHome;
12
+ vi.mock("node:os", async () => {
13
+ const actual = await vi.importActual("node:os");
14
+ return {
15
+ ...actual,
16
+ homedir: () => testHome,
17
+ };
18
+ });
19
+ const { loadProfile, listProfiles, resolveActiveProfileName } = await import("../loadProfile.js");
20
+ const BASE_CREDS = {
21
+ apiKey: "nk_" + "a".repeat(64),
22
+ privateKey: "0x" + "1".repeat(64),
23
+ address: "0xcreator0000000000000000000000000000aaaa",
24
+ gatewayUrl: "https://gateway.nookplot.com",
25
+ displayName: "Test Creator",
26
+ };
27
+ function seedCreds() {
28
+ const dir = join(testHome, ".nookplot");
29
+ mkdirSync(dir, { recursive: true });
30
+ writeFileSync(join(dir, "credentials.json"), JSON.stringify(BASE_CREDS));
31
+ }
32
+ function seedProfile(name, overrides = {}) {
33
+ const dir = join(testHome, ".nookplot", "profiles", name);
34
+ mkdirSync(dir, { recursive: true });
35
+ writeFileSync(join(dir, "profile.json"), JSON.stringify({
36
+ scopedAgentAddress: "0x" + name.padEnd(40, "f").slice(0, 40),
37
+ ...overrides,
38
+ }));
39
+ }
40
+ beforeEach(() => {
41
+ testHome = mkdtempSync(join(tmpdir(), "sdk-profile-"));
42
+ delete process.env.NOOKPLOT_PROFILE;
43
+ delete process.env.NOOKPLOT_GATEWAY_URL;
44
+ });
45
+ afterEach(() => {
46
+ rmSync(testHome, { recursive: true, force: true });
47
+ delete process.env.NOOKPLOT_PROFILE;
48
+ delete process.env.NOOKPLOT_GATEWAY_URL;
49
+ });
50
+ describe("loadProfile — default-path backward compat", () => {
51
+ it("returns null when no credentials.json exists", () => {
52
+ expect(loadProfile()).toBeNull();
53
+ });
54
+ it("returns flat creds when no profile is active (IDENTICAL to pre-change shape)", () => {
55
+ seedCreds();
56
+ const creds = loadProfile();
57
+ expect(creds).not.toBeNull();
58
+ expect(creds.apiKey).toBe(BASE_CREDS.apiKey);
59
+ expect(creds.address).toBe(BASE_CREDS.address);
60
+ expect(creds.gatewayUrl).toBe(BASE_CREDS.gatewayUrl);
61
+ // Scope fields absent — SDK users who switch to this helper without
62
+ // opting into profiles see no behavior change.
63
+ expect(creds.scopedAgentAddress).toBeUndefined();
64
+ expect(creds.profileName).toBeUndefined();
65
+ });
66
+ it("honors NOOKPLOT_GATEWAY_URL env override (existing SDK convention)", () => {
67
+ seedCreds();
68
+ process.env.NOOKPLOT_GATEWAY_URL = "http://127.0.0.1:4321";
69
+ expect(loadProfile().gatewayUrl).toBe("http://127.0.0.1:4321");
70
+ });
71
+ });
72
+ describe("loadProfile — profile scope merging", () => {
73
+ it("merges scopedAgentAddress from a named profile", () => {
74
+ seedCreds();
75
+ seedProfile("researcher");
76
+ const creds = loadProfile("researcher");
77
+ expect(creds.apiKey).toBe(BASE_CREDS.apiKey); // unchanged
78
+ expect(creds.scopedAgentAddress).toMatch(/^0xresearcher/);
79
+ expect(creds.profileName).toBe("researcher");
80
+ });
81
+ it("falls back gracefully when the profile doesn't exist (doesn't break scripts)", () => {
82
+ seedCreds();
83
+ const creds = loadProfile("ghost");
84
+ expect(creds).not.toBeNull();
85
+ expect(creds.scopedAgentAddress).toBeUndefined();
86
+ });
87
+ it("falls back gracefully on malformed profile.json", () => {
88
+ seedCreds();
89
+ const dir = join(testHome, ".nookplot", "profiles", "broken");
90
+ mkdirSync(dir, { recursive: true });
91
+ writeFileSync(join(dir, "profile.json"), "not json at all");
92
+ const creds = loadProfile("broken");
93
+ expect(creds).not.toBeNull();
94
+ expect(creds.scopedAgentAddress).toBeUndefined();
95
+ });
96
+ it("never touches the creator credentials.json (additive-only guarantee)", () => {
97
+ seedCreds();
98
+ seedProfile("a");
99
+ loadProfile("a");
100
+ const raw = require("node:fs").readFileSync(join(testHome, ".nookplot", "credentials.json"), "utf-8");
101
+ expect(JSON.parse(raw)).toEqual(BASE_CREDS);
102
+ });
103
+ });
104
+ describe("resolveActiveProfileName — priority order", () => {
105
+ beforeEach(() => seedCreds());
106
+ it("explicit argument beats env beats sticky default", () => {
107
+ writeFileSync(join(testHome, ".nookplot", "active-profile"), "sticky");
108
+ process.env.NOOKPLOT_PROFILE = "env";
109
+ expect(resolveActiveProfileName("explicit")).toBe("explicit");
110
+ expect(resolveActiveProfileName()).toBe("env");
111
+ delete process.env.NOOKPLOT_PROFILE;
112
+ expect(resolveActiveProfileName()).toBe("sticky");
113
+ });
114
+ it("returns null when nothing is set", () => {
115
+ expect(resolveActiveProfileName()).toBeNull();
116
+ });
117
+ });
118
+ describe("listProfiles", () => {
119
+ it("returns empty when no profiles dir exists", () => {
120
+ seedCreds();
121
+ expect(listProfiles()).toEqual([]);
122
+ });
123
+ it("enumerates valid profiles sorted alphabetically, skips invalid", () => {
124
+ seedCreds();
125
+ seedProfile("writer");
126
+ seedProfile("researcher");
127
+ const badDir = join(testHome, ".nookplot", "profiles", "bad");
128
+ mkdirSync(badDir, { recursive: true });
129
+ writeFileSync(join(badDir, "profile.json"), "{}");
130
+ const profiles = listProfiles();
131
+ expect(profiles.map((p) => p.name)).toEqual(["researcher", "writer"]);
132
+ });
133
+ });
134
+ //# sourceMappingURL=loadProfile.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loadProfile.test.js","sourceRoot":"","sources":["../../src/__tests__/loadProfile.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACxE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,IAAI,QAAgB,CAAC;AAErB,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;IAC5B,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,YAAY,CAA2B,SAAS,CAAC,CAAC;IAC1E,OAAO;QACL,GAAG,MAAM;QACT,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ;KACxB,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,wBAAwB,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAElG,MAAM,UAAU,GAAG;IACjB,MAAM,EAAE,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;IAC9B,UAAU,EAAE,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;IACjC,OAAO,EAAE,2CAA2C;IACpD,UAAU,EAAE,8BAA8B;IAC1C,WAAW,EAAE,cAAc;CAC5B,CAAC;AAEF,SAAS,SAAS;IAChB,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IACxC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,YAAqC,EAAE;IACxE,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;IAC1D,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpC,aAAa,CACX,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,EACzB,IAAI,CAAC,SAAS,CAAC;QACb,kBAAkB,EAAE,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;QAC5D,GAAG,SAAS;KACb,CAAC,CACH,CAAC;AACJ,CAAC;AAED,UAAU,CAAC,GAAG,EAAE;IACd,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;IACvD,OAAO,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IACpC,OAAO,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;AAC1C,CAAC,CAAC,CAAC;AAEH,SAAS,CAAC,GAAG,EAAE;IACb,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,OAAO,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IACpC,OAAO,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;AAC1C,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,4CAA4C,EAAE,GAAG,EAAE;IAC1D,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8EAA8E,EAAE,GAAG,EAAE;QACtF,SAAS,EAAE,CAAC;QACZ,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;QAC5B,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC7B,MAAM,CAAC,KAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC9C,MAAM,CAAC,KAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAChD,MAAM,CAAC,KAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QACtD,oEAAoE;QACpE,+CAA+C;QAC/C,MAAM,CAAC,KAAM,CAAC,kBAAkB,CAAC,CAAC,aAAa,EAAE,CAAC;QAClD,MAAM,CAAC,KAAM,CAAC,WAAW,CAAC,CAAC,aAAa,EAAE,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAC5E,SAAS,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,oBAAoB,GAAG,uBAAuB,CAAC;QAC3D,MAAM,CAAC,WAAW,EAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,qCAAqC,EAAE,GAAG,EAAE;IACnD,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,SAAS,EAAE,CAAC;QACZ,WAAW,CAAC,YAAY,CAAC,CAAC;QAC1B,MAAM,KAAK,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;QACxC,MAAM,CAAC,KAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAW,YAAY;QACrE,MAAM,CAAC,KAAM,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAC3D,MAAM,CAAC,KAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8EAA8E,EAAE,GAAG,EAAE;QACtF,SAAS,EAAE,CAAC;QACZ,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC7B,MAAM,CAAC,KAAM,CAAC,kBAAkB,CAAC,CAAC,aAAa,EAAE,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,SAAS,EAAE,CAAC;QACZ,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC9D,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,iBAAiB,CAAC,CAAC;QAC5D,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;QACpC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC7B,MAAM,CAAC,KAAM,CAAC,kBAAkB,CAAC,CAAC,aAAa,EAAE,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;QAC9E,SAAS,EAAE,CAAC;QACZ,WAAW,CAAC,GAAG,CAAC,CAAC;QACjB,WAAW,CAAC,GAAG,CAAC,CAAC;QACjB,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,YAAY,CACzC,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,kBAAkB,CAAC,EAC/C,OAAO,CACR,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,2CAA2C,EAAE,GAAG,EAAE;IACzD,UAAU,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC;IAE9B,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,gBAAgB,CAAC,EAAE,QAAQ,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAErC,MAAM,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9D,MAAM,CAAC,wBAAwB,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE/C,OAAO,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;QACpC,MAAM,CAAC,wBAAwB,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,CAAC,wBAAwB,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;IAChD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,SAAS,EAAE,CAAC;QACZ,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACxE,SAAS,EAAE,CAAC;QACZ,WAAW,CAAC,QAAQ,CAAC,CAAC;QACtB,WAAW,CAAC,YAAY,CAAC,CAAC;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;QAC9D,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACvC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE,IAAI,CAAC,CAAC;QAElD,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;QAChC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=presetLoader.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presetLoader.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/presetLoader.test.ts"],"names":[],"mappings":""}