@trufnetwork/sdk-js 0.3.8 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/dist/cjs/contracts-api/action.cjs +301 -77
  2. package/dist/cjs/contracts-api/action.cjs.map +3 -3
  3. package/dist/cjs/contracts-api/cache.integration.test.cjs +265 -0
  4. package/dist/cjs/contracts-api/cache.integration.test.cjs.map +7 -0
  5. package/dist/cjs/types/cache.cjs +34 -0
  6. package/dist/cjs/types/cache.cjs.map +7 -0
  7. package/dist/cjs/types/cache.test.cjs +205 -0
  8. package/dist/cjs/types/cache.test.cjs.map +7 -0
  9. package/dist/cjs/util/cacheMetadataParser.cjs +174 -0
  10. package/dist/cjs/util/cacheMetadataParser.cjs.map +7 -0
  11. package/dist/cjs/util/cacheMetadataParser.test.cjs +329 -0
  12. package/dist/cjs/util/cacheMetadataParser.test.cjs.map +7 -0
  13. package/dist/cjs/util/cacheValidation.cjs +88 -0
  14. package/dist/cjs/util/cacheValidation.cjs.map +7 -0
  15. package/dist/cjs/util/cacheValidation.test.cjs +108 -0
  16. package/dist/cjs/util/cacheValidation.test.cjs.map +7 -0
  17. package/dist/esm/contracts-api/action.mjs +302 -77
  18. package/dist/esm/contracts-api/action.mjs.map +3 -3
  19. package/dist/esm/contracts-api/cache.integration.test.mjs +263 -0
  20. package/dist/esm/contracts-api/cache.integration.test.mjs.map +7 -0
  21. package/dist/esm/types/cache.mjs +13 -0
  22. package/dist/esm/types/cache.mjs.map +7 -0
  23. package/dist/esm/types/cache.test.mjs +203 -0
  24. package/dist/esm/types/cache.test.mjs.map +7 -0
  25. package/dist/esm/util/cacheMetadataParser.mjs +153 -0
  26. package/dist/esm/util/cacheMetadataParser.mjs.map +7 -0
  27. package/dist/esm/util/cacheMetadataParser.test.mjs +327 -0
  28. package/dist/esm/util/cacheMetadataParser.test.mjs.map +7 -0
  29. package/dist/esm/util/cacheValidation.mjs +67 -0
  30. package/dist/esm/util/cacheValidation.mjs.map +7 -0
  31. package/dist/esm/util/cacheValidation.test.mjs +106 -0
  32. package/dist/esm/util/cacheValidation.test.mjs.map +7 -0
  33. package/dist/tsconfig.build.tsbuildinfo +1 -1
  34. package/dist/types/contracts-api/action.d.ts +11 -1
  35. package/dist/types/contracts-api/action.d.ts.map +1 -1
  36. package/dist/types/contracts-api/cache.integration.test.d.ts +2 -0
  37. package/dist/types/contracts-api/cache.integration.test.d.ts.map +1 -0
  38. package/dist/types/types/cache.d.ts +129 -0
  39. package/dist/types/types/cache.d.ts.map +1 -0
  40. package/dist/types/types/cache.test.d.ts +2 -0
  41. package/dist/types/types/cache.test.d.ts.map +1 -0
  42. package/dist/types/util/cacheMetadataParser.d.ts +38 -0
  43. package/dist/types/util/cacheMetadataParser.d.ts.map +1 -0
  44. package/dist/types/util/cacheMetadataParser.test.d.ts +2 -0
  45. package/dist/types/util/cacheMetadataParser.test.d.ts.map +1 -0
  46. package/dist/types/util/cacheValidation.d.ts +27 -0
  47. package/dist/types/util/cacheValidation.d.ts.map +1 -0
  48. package/dist/types/util/cacheValidation.test.d.ts +2 -0
  49. package/dist/types/util/cacheValidation.test.d.ts.map +1 -0
  50. package/package.json +5 -3
  51. package/dist/cjs/client/client.test.cjs +0 -32
  52. package/dist/cjs/client/client.test.cjs.map +0 -7
  53. package/dist/esm/client/client.test.mjs +0 -30
  54. package/dist/esm/client/client.test.mjs.map +0 -7
  55. package/dist/types/client/client.test.d.ts +0 -2
  56. package/dist/types/client/client.test.d.ts.map +0 -1
@@ -0,0 +1,265 @@
1
+ "use strict";
2
+
3
+ // src/contracts-api/cache.integration.test.ts
4
+ var import_vitest = require("vitest");
5
+ var import_action = require("./action.cjs");
6
+ var import_EthereumAddress = require("../util/EthereumAddress.cjs");
7
+ var import_StreamId = require("../util/StreamId.cjs");
8
+ var mockKwilClient = {
9
+ call: import_vitest.vi.fn(),
10
+ execute: import_vitest.vi.fn()
11
+ };
12
+ var mockKwilSigner = {};
13
+ (0, import_vitest.describe)("Cache Integration Tests", () => {
14
+ let action;
15
+ let streamLocator;
16
+ (0, import_vitest.beforeEach)(() => {
17
+ action = new import_action.Action(mockKwilClient, mockKwilSigner);
18
+ streamLocator = {
19
+ streamId: import_StreamId.StreamId.fromString("test-stream").unwrap(),
20
+ dataProvider: new import_EthereumAddress.EthereumAddress("0x1234567890123456789012345678901234567890")
21
+ };
22
+ import_vitest.vi.clearAllMocks();
23
+ });
24
+ (0, import_vitest.describe)("getRecord cache functionality", () => {
25
+ (0, import_vitest.it)("should handle cache-aware getRecord call", async () => {
26
+ const mockResponse = {
27
+ status: 200,
28
+ data: {
29
+ result: [
30
+ { event_time: 1609459200, value: "100" },
31
+ { event_time: 1609459260, value: "101" }
32
+ ],
33
+ logs: "1. cache_hit: true\n2. other log\n111. cache_miss: false"
34
+ }
35
+ };
36
+ mockKwilClient.call.mockResolvedValue(mockResponse);
37
+ const result = await action.getRecord(streamLocator, {
38
+ from: 1609459200,
39
+ to: 1609459300,
40
+ useCache: true
41
+ });
42
+ (0, import_vitest.expect)(mockKwilClient.call).toHaveBeenCalledWith(
43
+ {
44
+ namespace: "main",
45
+ name: "get_record",
46
+ inputs: {
47
+ $data_provider: "0x1234567890123456789012345678901234567890",
48
+ $stream_id: "test-stream",
49
+ $from: 1609459200,
50
+ $to: 1609459300,
51
+ $frozen_at: void 0,
52
+ $use_cache: true
53
+ }
54
+ },
55
+ mockKwilSigner
56
+ );
57
+ (0, import_vitest.expect)(result).toEqual({
58
+ data: [
59
+ { eventTime: 1609459200, value: "100" },
60
+ { eventTime: 1609459260, value: "101" }
61
+ ],
62
+ cache: void 0,
63
+ logs: ["cache_hit: true", "other log", "cache_miss: false"]
64
+ });
65
+ });
66
+ (0, import_vitest.it)("should handle cache-aware getRecord call with cache metadata", async () => {
67
+ const mockResponse = {
68
+ status: 200,
69
+ data: {
70
+ result: [
71
+ { event_time: 1609459200, value: "100" }
72
+ ],
73
+ logs: '1. {"cache_hit":true,"cache_disabled":false,"cache_height":148670}'
74
+ }
75
+ };
76
+ mockKwilClient.call.mockResolvedValue(mockResponse);
77
+ const result = await action.getRecord(streamLocator, {
78
+ useCache: true
79
+ });
80
+ (0, import_vitest.expect)(result).toHaveProperty("data");
81
+ (0, import_vitest.expect)(result).toHaveProperty("cache");
82
+ (0, import_vitest.expect)(result).toHaveProperty("logs");
83
+ (0, import_vitest.expect)(result.data).toEqual([
84
+ { eventTime: 1609459200, value: "100" }
85
+ ]);
86
+ (0, import_vitest.expect)(result.cache).toMatchObject({
87
+ hit: true,
88
+ cacheDisabled: false,
89
+ height: 148670,
90
+ dataProvider: "0x1234567890123456789012345678901234567890",
91
+ from: void 0,
92
+ frozenAt: void 0,
93
+ rowsServed: 1,
94
+ streamId: "test-stream",
95
+ to: void 0
96
+ });
97
+ (0, import_vitest.expect)(result.logs).toMatchObject(['{"cache_hit":true,"cache_disabled":false,"cache_height":148670}']);
98
+ });
99
+ (0, import_vitest.it)("should omit useCache parameter when not provided", async () => {
100
+ const mockResponse = {
101
+ status: 200,
102
+ data: { result: [] }
103
+ };
104
+ mockKwilClient.call.mockResolvedValue(mockResponse);
105
+ await action.getRecord(streamLocator, {
106
+ from: 1609459200
107
+ });
108
+ (0, import_vitest.expect)(mockKwilClient.call).toHaveBeenCalledWith(
109
+ {
110
+ namespace: "main",
111
+ name: "get_record",
112
+ inputs: {
113
+ $data_provider: "0x1234567890123456789012345678901234567890",
114
+ $stream_id: "test-stream",
115
+ $from: 1609459200,
116
+ $to: void 0,
117
+ $frozen_at: void 0
118
+ }
119
+ },
120
+ mockKwilSigner
121
+ );
122
+ });
123
+ (0, import_vitest.it)("should handle error responses", async () => {
124
+ mockKwilClient.call.mockResolvedValue({
125
+ status: 500,
126
+ data: null
127
+ });
128
+ await (0, import_vitest.expect)(action.getRecord(streamLocator, { useCache: true })).rejects.toThrow("Failed to get record: 500");
129
+ });
130
+ });
131
+ (0, import_vitest.describe)("getIndex cache functionality", () => {
132
+ (0, import_vitest.it)("should handle cache-aware getIndex call", async () => {
133
+ const mockResponse = {
134
+ status: 200,
135
+ data: {
136
+ result: [
137
+ { event_time: 1609459200, value: "100" }
138
+ ]
139
+ }
140
+ };
141
+ mockKwilClient.call.mockResolvedValue(mockResponse);
142
+ const result = await action.getIndex(streamLocator, {
143
+ from: 1609459200,
144
+ to: 1609459300,
145
+ baseTime: 1609459180,
146
+ useCache: true
147
+ });
148
+ (0, import_vitest.expect)(mockKwilClient.call).toHaveBeenCalledWith(
149
+ {
150
+ namespace: "main",
151
+ name: "get_index",
152
+ inputs: {
153
+ $data_provider: "0x1234567890123456789012345678901234567890",
154
+ $stream_id: "test-stream",
155
+ $from: 1609459200,
156
+ $to: 1609459300,
157
+ $frozen_at: void 0,
158
+ $base_time: 1609459180,
159
+ $use_cache: true
160
+ }
161
+ },
162
+ mockKwilSigner
163
+ );
164
+ (0, import_vitest.expect)(result.data).toEqual([
165
+ { eventTime: 1609459200, value: "100" }
166
+ ]);
167
+ });
168
+ });
169
+ (0, import_vitest.describe)("getFirstRecord cache functionality", () => {
170
+ (0, import_vitest.it)("should handle cache-aware getFirstRecord call", async () => {
171
+ const mockResponse = {
172
+ status: 200,
173
+ data: {
174
+ result: [
175
+ { event_time: 1609459200, value: "100" }
176
+ ]
177
+ }
178
+ };
179
+ mockKwilClient.call.mockResolvedValue(mockResponse);
180
+ const result = await action.getFirstRecord(streamLocator, {
181
+ after: 1609459180,
182
+ useCache: true
183
+ });
184
+ (0, import_vitest.expect)(mockKwilClient.call).toHaveBeenCalledWith(
185
+ {
186
+ namespace: "main",
187
+ name: "get_first_record",
188
+ inputs: {
189
+ $data_provider: "0x1234567890123456789012345678901234567890",
190
+ $stream_id: "test-stream",
191
+ $after: 1609459180,
192
+ $frozen_at: void 0,
193
+ $use_cache: true
194
+ }
195
+ },
196
+ mockKwilSigner
197
+ );
198
+ (0, import_vitest.expect)(result.data).toEqual({
199
+ eventTime: 1609459200,
200
+ value: "100"
201
+ });
202
+ });
203
+ (0, import_vitest.it)("should handle empty result for getFirstRecord", async () => {
204
+ const mockResponse = {
205
+ status: 200,
206
+ data: { result: [] }
207
+ };
208
+ mockKwilClient.call.mockResolvedValue(mockResponse);
209
+ const result = await action.getFirstRecord(streamLocator, {
210
+ useCache: true
211
+ });
212
+ (0, import_vitest.expect)(result.data).toBeNull();
213
+ });
214
+ });
215
+ (0, import_vitest.describe)("getIndexChange cache functionality", () => {
216
+ (0, import_vitest.it)("should handle cache-aware getIndexChange call", async () => {
217
+ const mockResponse = {
218
+ status: 200,
219
+ data: {
220
+ result: [
221
+ { event_time: 1609459200, value: "5.2" }
222
+ ]
223
+ }
224
+ };
225
+ mockKwilClient.call.mockResolvedValue(mockResponse);
226
+ const result = await action.getIndexChange(streamLocator, {
227
+ from: 1609459200,
228
+ to: 1609459300,
229
+ timeInterval: 60,
230
+ useCache: true
231
+ });
232
+ (0, import_vitest.expect)(mockKwilClient.call).toHaveBeenCalledWith(
233
+ {
234
+ namespace: "main",
235
+ name: "get_index_change",
236
+ inputs: {
237
+ $data_provider: "0x1234567890123456789012345678901234567890",
238
+ $stream_id: "test-stream",
239
+ $from: 1609459200,
240
+ $to: 1609459300,
241
+ $frozen_at: void 0,
242
+ $base_time: void 0,
243
+ $time_interval: 60,
244
+ $use_cache: true
245
+ }
246
+ },
247
+ mockKwilSigner
248
+ );
249
+ (0, import_vitest.expect)(result.data).toEqual([
250
+ { eventTime: 1609459200, value: "5.2" }
251
+ ]);
252
+ });
253
+ (0, import_vitest.it)("should require options parameter for getIndexChange", async () => {
254
+ await (0, import_vitest.expect)(action.getIndexChange(streamLocator)).rejects.toThrow("Options parameter is required for cache-aware getIndexChange");
255
+ });
256
+ });
257
+ (0, import_vitest.describe)("parameter validation", () => {
258
+ (0, import_vitest.it)("should validate cache parameters", async () => {
259
+ await (0, import_vitest.expect)(action.getRecord(streamLocator, { useCache: "true" })).rejects.toThrow("Invalid useCache parameter: must be a boolean");
260
+ await (0, import_vitest.expect)(action.getRecord(streamLocator, { from: -1 })).rejects.toThrow("Invalid from parameter: must be a non-negative number");
261
+ await (0, import_vitest.expect)(action.getRecord(streamLocator, { from: 100, to: 50 })).rejects.toThrow("Invalid time range: from time cannot be greater than to time");
262
+ });
263
+ });
264
+ });
265
+ //# sourceMappingURL=cache.integration.test.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/contracts-api/cache.integration.test.ts"],
4
+ "sourcesContent": ["import { describe, it, expect, vi, beforeEach } from 'vitest';\nimport { Action } from './action';\nimport { EthereumAddress } from '../util/EthereumAddress';\nimport { StreamId } from '../util/StreamId';\nimport type { StreamLocator } from '../types/stream';\nimport { CacheMetadata } from '../types/cache';\n\n// Mock Kwil client\nconst mockKwilClient = {\n call: vi.fn(),\n execute: vi.fn()\n};\n\nconst mockKwilSigner = {};\n\ndescribe('Cache Integration Tests', () => {\n let action: Action;\n let streamLocator: StreamLocator;\n\n beforeEach(() => {\n action = new Action(mockKwilClient as any, mockKwilSigner as any);\n streamLocator = {\n streamId: StreamId.fromString('test-stream').unwrap(),\n dataProvider: new EthereumAddress('0x1234567890123456789012345678901234567890')\n };\n \n // Reset mocks\n vi.clearAllMocks();\n });\n\n describe('getRecord cache functionality', () => {\n it('should handle cache-aware getRecord call', async () => {\n const mockResponse = {\n status: 200,\n data: {\n result: [\n { event_time: 1609459200, value: '100' },\n { event_time: 1609459260, value: '101' }\n ],\n logs: '1. cache_hit: true\\n2. other log\\n111. cache_miss: false'\n }\n };\n\n mockKwilClient.call.mockResolvedValue(mockResponse);\n\n const result = await action.getRecord(streamLocator, {\n from: 1609459200,\n to: 1609459300,\n useCache: true\n });\n\n expect(mockKwilClient.call).toHaveBeenCalledWith(\n {\n namespace: 'main',\n name: 'get_record',\n inputs: {\n $data_provider: '0x1234567890123456789012345678901234567890',\n $stream_id: 'test-stream',\n $from: 1609459200,\n $to: 1609459300,\n $frozen_at: undefined,\n $use_cache: true\n }\n },\n mockKwilSigner\n );\n\n expect(result).toEqual({\n data: [\n { eventTime: 1609459200, value: '100' },\n { eventTime: 1609459260, value: '101' }\n ],\n cache: undefined,\n logs: ['cache_hit: true', 'other log', 'cache_miss: false']\n });\n });\n\n it('should handle cache-aware getRecord call with cache metadata', async () => {\n const mockResponse = {\n status: 200,\n data: {\n result: [\n { event_time: 1609459200, value: '100' }\n ],\n logs: '1. {\"cache_hit\":true,\"cache_disabled\":false,\"cache_height\":148670}'\n }\n };\n\n mockKwilClient.call.mockResolvedValue(mockResponse);\n\n const result = await action.getRecord(streamLocator, {\n useCache: true\n });\n\n // Cache metadata extraction happens in the parser\n // We'll just verify the structure is correct\n expect(result).toHaveProperty('data');\n expect(result).toHaveProperty('cache');\n expect(result).toHaveProperty('logs');\n expect(result.data).toEqual([\n { eventTime: 1609459200, value: '100' }\n ]);\n\n expect(result.cache).toMatchObject({\n hit: true,\n cacheDisabled: false,\n height: 148670,\n dataProvider: '0x1234567890123456789012345678901234567890',\n from: undefined,\n frozenAt: undefined,\n rowsServed: 1,\n streamId: 'test-stream',\n to: undefined\n } as CacheMetadata);\n\n expect(result.logs).toMatchObject(['{\"cache_hit\":true,\"cache_disabled\":false,\"cache_height\":148670}']);\n });\n\n it('should omit useCache parameter when not provided', async () => {\n const mockResponse = {\n status: 200,\n data: { result: [] }\n };\n\n mockKwilClient.call.mockResolvedValue(mockResponse);\n\n await action.getRecord(streamLocator, {\n from: 1609459200\n });\n\n expect(mockKwilClient.call).toHaveBeenCalledWith(\n {\n namespace: 'main',\n name: 'get_record',\n inputs: {\n $data_provider: '0x1234567890123456789012345678901234567890',\n $stream_id: 'test-stream',\n $from: 1609459200,\n $to: undefined,\n $frozen_at: undefined\n }\n },\n mockKwilSigner\n );\n });\n\n it('should handle error responses', async () => {\n mockKwilClient.call.mockResolvedValue({\n status: 500,\n data: null\n });\n\n await expect(action.getRecord(streamLocator, { useCache: true }))\n .rejects.toThrow('Failed to get record: 500');\n });\n });\n\n describe('getIndex cache functionality', () => {\n it('should handle cache-aware getIndex call', async () => {\n const mockResponse = {\n status: 200,\n data: {\n result: [\n { event_time: 1609459200, value: '100' }\n ]\n }\n };\n\n mockKwilClient.call.mockResolvedValue(mockResponse);\n\n const result = await action.getIndex(streamLocator, {\n from: 1609459200,\n to: 1609459300,\n baseTime: 1609459180,\n useCache: true\n });\n\n expect(mockKwilClient.call).toHaveBeenCalledWith(\n {\n namespace: 'main',\n name: 'get_index',\n inputs: {\n $data_provider: '0x1234567890123456789012345678901234567890',\n $stream_id: 'test-stream',\n $from: 1609459200,\n $to: 1609459300,\n $frozen_at: undefined,\n $base_time: 1609459180,\n $use_cache: true\n }\n },\n mockKwilSigner\n );\n\n expect(result.data).toEqual([\n { eventTime: 1609459200, value: '100' }\n ]);\n });\n });\n\n describe('getFirstRecord cache functionality', () => {\n it('should handle cache-aware getFirstRecord call', async () => {\n const mockResponse = {\n status: 200,\n data: {\n result: [\n { event_time: 1609459200, value: '100' }\n ]\n }\n };\n\n mockKwilClient.call.mockResolvedValue(mockResponse);\n\n const result = await action.getFirstRecord(streamLocator, {\n after: 1609459180,\n useCache: true\n });\n\n expect(mockKwilClient.call).toHaveBeenCalledWith(\n {\n namespace: 'main',\n name: 'get_first_record',\n inputs: {\n $data_provider: '0x1234567890123456789012345678901234567890',\n $stream_id: 'test-stream',\n $after: 1609459180,\n $frozen_at: undefined,\n $use_cache: true\n }\n },\n mockKwilSigner\n );\n\n expect(result.data).toEqual({\n eventTime: 1609459200,\n value: '100'\n });\n });\n\n it('should handle empty result for getFirstRecord', async () => {\n const mockResponse = {\n status: 200,\n data: { result: [] }\n };\n\n mockKwilClient.call.mockResolvedValue(mockResponse);\n\n const result = await action.getFirstRecord(streamLocator, {\n useCache: true\n });\n\n expect(result.data).toBeNull();\n });\n });\n\n describe('getIndexChange cache functionality', () => {\n it('should handle cache-aware getIndexChange call', async () => {\n const mockResponse = {\n status: 200,\n data: {\n result: [\n { event_time: 1609459200, value: '5.2' }\n ]\n }\n };\n\n mockKwilClient.call.mockResolvedValue(mockResponse);\n\n const result = await action.getIndexChange(streamLocator, {\n from: 1609459200,\n to: 1609459300,\n timeInterval: 60,\n useCache: true\n });\n\n expect(mockKwilClient.call).toHaveBeenCalledWith(\n {\n namespace: 'main',\n name: 'get_index_change',\n inputs: {\n $data_provider: '0x1234567890123456789012345678901234567890',\n $stream_id: 'test-stream',\n $from: 1609459200,\n $to: 1609459300,\n $frozen_at: undefined,\n $base_time: undefined,\n $time_interval: 60,\n $use_cache: true\n }\n },\n mockKwilSigner\n );\n\n expect(result.data).toEqual([\n { eventTime: 1609459200, value: '5.2' }\n ]);\n });\n\n it('should require options parameter for getIndexChange', async () => {\n await expect((action.getIndexChange as any)(streamLocator))\n .rejects.toThrow('Options parameter is required for cache-aware getIndexChange');\n });\n });\n\n describe('parameter validation', () => {\n it('should validate cache parameters', async () => {\n await expect(action.getRecord(streamLocator, { useCache: 'true' as any }))\n .rejects.toThrow('Invalid useCache parameter: must be a boolean');\n\n await expect(action.getRecord(streamLocator, { from: -1 }))\n .rejects.toThrow('Invalid from parameter: must be a non-negative number');\n\n await expect(action.getRecord(streamLocator, { from: 100, to: 50 }))\n .rejects.toThrow('Invalid time range: from time cannot be greater than to time');\n });\n });\n});"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/types/cache.ts
21
+ var cache_exports = {};
22
+ __export(cache_exports, {
23
+ CacheError: () => CacheError
24
+ });
25
+ module.exports = __toCommonJS(cache_exports);
26
+ var CacheError = class _CacheError extends Error {
27
+ constructor(message, cause) {
28
+ super(message);
29
+ this.cause = cause;
30
+ this.name = "CacheError";
31
+ Object.setPrototypeOf(this, _CacheError.prototype);
32
+ }
33
+ };
34
+ //# sourceMappingURL=cache.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/types/cache.ts"],
4
+ "sourcesContent": ["/**\n * Cache-related type definitions for the Truf Network SDK\n * These types enable cache-aware operations with proper TypeScript support\n */\n\n/**\n * Metadata about cache operations\n * Matches the Go SDK implementation structure\n */\nexport interface CacheMetadata {\n /** Whether the data came from cache */\n hit: boolean;\n /** Whether cache was disabled for this query */\n cacheDisabled?: boolean;\n /** Block height when data was cached (optional) */\n height?: number;\n \n // SDK-provided context (optional)\n /** Stream ID used in the query */\n streamId?: string;\n /** Data provider address */\n dataProvider?: string;\n /** Start time of the query range */\n from?: number;\n /** End time of the query range */\n to?: number;\n /** Frozen time for historical queries */\n frozenAt?: number;\n /** Number of rows returned */\n rowsServed?: number;\n}\n\n/**\n * Enhanced options for getRecord method with cache support\n */\nexport interface GetRecordOptions {\n /** Start time for the query range */\n from?: number;\n /** End time for the query range */\n to?: number;\n /** Frozen time for historical queries */\n frozenAt?: number;\n /** Base time for index calculations */\n baseTime?: string | number;\n /** Procedure name prefix */\n prefix?: string;\n /** Enable cache usage for this query */\n useCache?: boolean;\n}\n\n/**\n * Enhanced options for getIndex method with cache support\n */\nexport interface GetIndexOptions {\n /** Start time for the query range */\n from?: number;\n /** End time for the query range */\n to?: number;\n /** Frozen time for historical queries */\n frozenAt?: number;\n /** Base time for index calculations */\n baseTime?: string | number;\n /** Procedure name prefix */\n prefix?: string;\n /** Enable cache usage for this query */\n useCache?: boolean;\n}\n\n/**\n * Enhanced options for getIndexChange method with cache support\n */\nexport interface GetIndexChangeOptions {\n /** Start time for the query range */\n from?: number;\n /** End time for the query range */\n to?: number;\n /** Frozen time for historical queries */\n frozenAt?: number;\n /** Base time for index calculations */\n baseTime?: string | number;\n /** Time interval for change calculations */\n timeInterval: number;\n /** Procedure name prefix */\n prefix?: string;\n /** Enable cache usage for this query */\n useCache?: boolean;\n}\n\n/**\n * Enhanced options for getFirstRecord method with cache support\n */\nexport interface GetFirstRecordOptions {\n /** Return records after this time */\n after?: number;\n /** Frozen time for historical queries */\n frozenAt?: number;\n /** Enable cache usage for this query */\n useCache?: boolean;\n}\n\n/**\n * Response wrapper that includes cache metadata\n * Provides structured access to both data and cache information\n */\nexport interface CacheAwareResponse<T> {\n /** The actual response data */\n data: T;\n /** Cache metadata (if available) */\n cache?: CacheMetadata;\n /** Action logs for debugging (optional) */\n logs?: string[];\n}\n\n/**\n * Aggregated cache metadata from multiple operations\n */\nexport interface CacheMetadataCollection {\n /** Total number of queries performed */\n totalQueries: number;\n /** Number of cache hits */\n cacheHits: number;\n /** Number of cache misses */\n cacheMisses: number;\n /** Cache hit rate (0-1) */\n cacheHitRate: number;\n /** Total rows served across all queries */\n totalRowsServed: number;\n /** Individual metadata entries */\n entries: CacheMetadata[];\n}\n\n/**\n * Error class for cache-related operations\n */\nexport class CacheError extends Error {\n constructor(message: string, public cause?: Error) {\n super(message);\n this.name = 'CacheError';\n\n // Fix prototype chain\n Object.setPrototypeOf(this, CacheError.prototype);\n }\n}"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAsIO,IAAM,aAAN,MAAM,oBAAmB,MAAM;AAAA,EACpC,YAAY,SAAwB,OAAe;AACjD,UAAM,OAAO;AADqB;AAElC,SAAK,OAAO;AAGZ,WAAO,eAAe,MAAM,YAAW,SAAS;AAAA,EAClD;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,205 @@
1
+ "use strict";
2
+
3
+ // src/types/cache.test.ts
4
+ var import_vitest = require("vitest");
5
+ var import_cache = require("./cache.cjs");
6
+ (0, import_vitest.describe)("Cache Types", () => {
7
+ (0, import_vitest.describe)("CacheMetadata", () => {
8
+ (0, import_vitest.it)("should allow valid cache metadata", () => {
9
+ const metadata = { hit: true, height: 123456 };
10
+ (0, import_vitest.expect)(metadata.hit).toBe(true);
11
+ (0, import_vitest.expect)(metadata.height).toBe(123456);
12
+ });
13
+ (0, import_vitest.it)("should create cache metadata with all fields", () => {
14
+ const metadata = { hit: true, height: 123456 };
15
+ (0, import_vitest.expect)(metadata.hit).toBe(true);
16
+ (0, import_vitest.expect)(metadata.height).toBe(123456);
17
+ });
18
+ (0, import_vitest.it)("should allow cache metadata without optional fields", () => {
19
+ const metadata = { hit: false };
20
+ (0, import_vitest.expect)(metadata.hit).toBe(false);
21
+ (0, import_vitest.expect)(metadata.height).toBeUndefined();
22
+ });
23
+ (0, import_vitest.it)("should allow enhanced cache metadata with all fields", () => {
24
+ const metadata = {
25
+ hit: true,
26
+ cacheDisabled: false,
27
+ height: 123456,
28
+ streamId: "test-stream",
29
+ dataProvider: "0x123456789abcdef",
30
+ from: 1609459100,
31
+ to: 1609459300,
32
+ frozenAt: 1609459250,
33
+ rowsServed: 10
34
+ };
35
+ (0, import_vitest.expect)(metadata.hit).toBe(true);
36
+ (0, import_vitest.expect)(metadata.cacheDisabled).toBe(false);
37
+ (0, import_vitest.expect)(metadata.height).toBe(123456);
38
+ (0, import_vitest.expect)(metadata.streamId).toBe("test-stream");
39
+ (0, import_vitest.expect)(metadata.dataProvider).toBe("0x123456789abcdef");
40
+ (0, import_vitest.expect)(metadata.from).toBe(1609459100);
41
+ (0, import_vitest.expect)(metadata.to).toBe(1609459300);
42
+ (0, import_vitest.expect)(metadata.frozenAt).toBe(1609459250);
43
+ (0, import_vitest.expect)(metadata.rowsServed).toBe(10);
44
+ });
45
+ (0, import_vitest.it)("should allow partial enhanced metadata", () => {
46
+ const metadata = {
47
+ hit: true,
48
+ cacheDisabled: true,
49
+ streamId: "partial-stream"
50
+ };
51
+ (0, import_vitest.expect)(metadata.hit).toBe(true);
52
+ (0, import_vitest.expect)(metadata.cacheDisabled).toBe(true);
53
+ (0, import_vitest.expect)(metadata.streamId).toBe("partial-stream");
54
+ (0, import_vitest.expect)(metadata.height).toBeUndefined();
55
+ });
56
+ });
57
+ (0, import_vitest.describe)("CacheMetadataCollection", () => {
58
+ (0, import_vitest.it)("should allow valid cache metadata collection", () => {
59
+ const collection = {
60
+ totalQueries: 5,
61
+ cacheHits: 3,
62
+ cacheMisses: 2,
63
+ cacheHitRate: 0.6,
64
+ totalRowsServed: 100,
65
+ entries: [
66
+ { hit: true, rowsServed: 30 },
67
+ { hit: false, rowsServed: 25 },
68
+ { hit: true, rowsServed: 45 }
69
+ ]
70
+ };
71
+ (0, import_vitest.expect)(collection.totalQueries).toBe(5);
72
+ (0, import_vitest.expect)(collection.cacheHits).toBe(3);
73
+ (0, import_vitest.expect)(collection.cacheMisses).toBe(2);
74
+ (0, import_vitest.expect)(collection.cacheHitRate).toBe(0.6);
75
+ (0, import_vitest.expect)(collection.totalRowsServed).toBe(100);
76
+ (0, import_vitest.expect)(collection.entries).toHaveLength(3);
77
+ });
78
+ });
79
+ (0, import_vitest.describe)("CacheAwareResponse", () => {
80
+ (0, import_vitest.it)("should allow response with cache metadata", () => {
81
+ const response = {
82
+ data: ["test1", "test2"],
83
+ cache: { hit: true, height: 123456 },
84
+ logs: ["log1", "log2"]
85
+ };
86
+ (0, import_vitest.expect)(response.data).toEqual(["test1", "test2"]);
87
+ (0, import_vitest.expect)(response.cache?.hit).toBe(true);
88
+ (0, import_vitest.expect)(response.logs).toEqual(["log1", "log2"]);
89
+ });
90
+ (0, import_vitest.it)("should create cache aware response with all fields", () => {
91
+ const response = {
92
+ data: "test",
93
+ cache: { hit: true, height: 123456 },
94
+ logs: ["log1"]
95
+ };
96
+ (0, import_vitest.expect)(response.data).toBe("test");
97
+ (0, import_vitest.expect)(response.cache?.hit).toBe(true);
98
+ (0, import_vitest.expect)(response.cache?.height).toBe(123456);
99
+ (0, import_vitest.expect)(response.logs).toEqual(["log1"]);
100
+ });
101
+ (0, import_vitest.it)("should allow response without cache metadata", () => {
102
+ const response = {
103
+ data: ["test1", "test2"]
104
+ };
105
+ (0, import_vitest.expect)(response.data).toEqual(["test1", "test2"]);
106
+ (0, import_vitest.expect)(response.cache).toBeUndefined();
107
+ (0, import_vitest.expect)(response.logs).toBeUndefined();
108
+ });
109
+ });
110
+ (0, import_vitest.describe)("GetRecordOptions", () => {
111
+ (0, import_vitest.it)("should allow all valid options", () => {
112
+ const options = {
113
+ from: 1609459200,
114
+ to: 1609545600,
115
+ frozenAt: 1609459200,
116
+ baseTime: 1609459200,
117
+ prefix: "test_",
118
+ useCache: true
119
+ };
120
+ (0, import_vitest.expect)(options.from).toBe(1609459200);
121
+ (0, import_vitest.expect)(options.useCache).toBe(true);
122
+ });
123
+ (0, import_vitest.it)("should allow string baseTime", () => {
124
+ const options = {
125
+ baseTime: "2021-01-01",
126
+ useCache: false
127
+ };
128
+ (0, import_vitest.expect)(options.baseTime).toBe("2021-01-01");
129
+ });
130
+ (0, import_vitest.it)("should allow empty options", () => {
131
+ const options = {};
132
+ (0, import_vitest.expect)(options.useCache).toBeUndefined();
133
+ });
134
+ });
135
+ (0, import_vitest.describe)("GetIndexOptions", () => {
136
+ (0, import_vitest.it)("should allow all valid options", () => {
137
+ const options = {
138
+ from: 1609459200,
139
+ to: 1609545600,
140
+ frozenAt: 1609459200,
141
+ baseTime: 1609459200,
142
+ prefix: "test_",
143
+ useCache: true
144
+ };
145
+ (0, import_vitest.expect)(options.useCache).toBe(true);
146
+ });
147
+ });
148
+ (0, import_vitest.describe)("GetIndexChangeOptions", () => {
149
+ (0, import_vitest.it)("should allow all valid options including timeInterval", () => {
150
+ const options = {
151
+ from: 1609459200,
152
+ to: 1609545600,
153
+ frozenAt: 1609459200,
154
+ baseTime: 1609459200,
155
+ timeInterval: 3600,
156
+ prefix: "test_",
157
+ useCache: true
158
+ };
159
+ (0, import_vitest.expect)(options.timeInterval).toBe(3600);
160
+ (0, import_vitest.expect)(options.useCache).toBe(true);
161
+ });
162
+ (0, import_vitest.it)("should require timeInterval", () => {
163
+ const options = {
164
+ timeInterval: 3600
165
+ };
166
+ (0, import_vitest.expect)(options.timeInterval).toBe(3600);
167
+ });
168
+ });
169
+ (0, import_vitest.describe)("GetFirstRecordOptions", () => {
170
+ (0, import_vitest.it)("should allow all valid options", () => {
171
+ const options = {
172
+ after: 1609459200,
173
+ frozenAt: 1609459200,
174
+ useCache: true
175
+ };
176
+ (0, import_vitest.expect)(options.after).toBe(1609459200);
177
+ (0, import_vitest.expect)(options.useCache).toBe(true);
178
+ });
179
+ (0, import_vitest.it)("should allow empty options", () => {
180
+ const options = {};
181
+ (0, import_vitest.expect)(options.useCache).toBeUndefined();
182
+ });
183
+ });
184
+ (0, import_vitest.describe)("CacheError", () => {
185
+ (0, import_vitest.it)("should create error with message", () => {
186
+ const error = new import_cache.CacheError("Test error");
187
+ (0, import_vitest.expect)(error.message).toBe("Test error");
188
+ (0, import_vitest.expect)(error.name).toBe("CacheError");
189
+ (0, import_vitest.expect)(error.cause).toBeUndefined();
190
+ });
191
+ (0, import_vitest.it)("should create error with cause", () => {
192
+ const cause = new Error("Original error");
193
+ const error = new import_cache.CacheError("Test error", cause);
194
+ (0, import_vitest.expect)(error.message).toBe("Test error");
195
+ (0, import_vitest.expect)(error.name).toBe("CacheError");
196
+ (0, import_vitest.expect)(error.cause).toBe(cause);
197
+ });
198
+ (0, import_vitest.it)("should be instanceof Error", () => {
199
+ const error = new import_cache.CacheError("Test error");
200
+ (0, import_vitest.expect)(error instanceof Error).toBe(true);
201
+ (0, import_vitest.expect)(error instanceof import_cache.CacheError).toBe(true);
202
+ });
203
+ });
204
+ });
205
+ //# sourceMappingURL=cache.test.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/types/cache.test.ts"],
4
+ "sourcesContent": ["import { describe, it, expect } from 'vitest';\nimport { CacheError } from './cache';\nimport type { \n CacheMetadata, \n CacheAwareResponse, \n CacheMetadataCollection,\n GetRecordOptions, \n GetIndexOptions, \n GetIndexChangeOptions, \n GetFirstRecordOptions \n} from './cache';\n\ndescribe('Cache Types', () => {\n describe('CacheMetadata', () => {\n it('should allow valid cache metadata', () => {\n const metadata: CacheMetadata = { hit: true, height: 123456 };\n expect(metadata.hit).toBe(true);\n expect(metadata.height).toBe(123456);\n });\n\n it('should create cache metadata with all fields', () => {\n const metadata: CacheMetadata = { hit: true, height: 123456 };\n expect(metadata.hit).toBe(true);\n expect(metadata.height).toBe(123456);\n });\n\n it('should allow cache metadata without optional fields', () => {\n const metadata: CacheMetadata = { hit: false };\n expect(metadata.hit).toBe(false);\n expect(metadata.height).toBeUndefined();\n });\n\n it('should allow enhanced cache metadata with all fields', () => {\n const metadata: CacheMetadata = {\n hit: true,\n cacheDisabled: false,\n height: 123456,\n streamId: 'test-stream',\n dataProvider: '0x123456789abcdef',\n from: 1609459100,\n to: 1609459300,\n frozenAt: 1609459250,\n rowsServed: 10\n };\n \n expect(metadata.hit).toBe(true);\n expect(metadata.cacheDisabled).toBe(false);\n expect(metadata.height).toBe(123456);\n expect(metadata.streamId).toBe('test-stream');\n expect(metadata.dataProvider).toBe('0x123456789abcdef');\n expect(metadata.from).toBe(1609459100);\n expect(metadata.to).toBe(1609459300);\n expect(metadata.frozenAt).toBe(1609459250);\n expect(metadata.rowsServed).toBe(10);\n });\n\n it('should allow partial enhanced metadata', () => {\n const metadata: CacheMetadata = {\n hit: true,\n cacheDisabled: true,\n streamId: 'partial-stream'\n };\n \n expect(metadata.hit).toBe(true);\n expect(metadata.cacheDisabled).toBe(true);\n expect(metadata.streamId).toBe('partial-stream');\n expect(metadata.height).toBeUndefined();\n });\n });\n\n describe('CacheMetadataCollection', () => {\n it('should allow valid cache metadata collection', () => {\n const collection: CacheMetadataCollection = {\n totalQueries: 5,\n cacheHits: 3,\n cacheMisses: 2,\n cacheHitRate: 0.6,\n totalRowsServed: 100,\n entries: [\n { hit: true, rowsServed: 30 },\n { hit: false, rowsServed: 25 },\n { hit: true, rowsServed: 45 }\n ]\n };\n \n expect(collection.totalQueries).toBe(5);\n expect(collection.cacheHits).toBe(3);\n expect(collection.cacheMisses).toBe(2);\n expect(collection.cacheHitRate).toBe(0.6);\n expect(collection.totalRowsServed).toBe(100);\n expect(collection.entries).toHaveLength(3);\n });\n });\n\n describe('CacheAwareResponse', () => {\n it('should allow response with cache metadata', () => {\n const response: CacheAwareResponse<string[]> = {\n data: ['test1', 'test2'],\n cache: { hit: true, height: 123456 },\n logs: ['log1', 'log2']\n };\n \n expect(response.data).toEqual(['test1', 'test2']);\n expect(response.cache?.hit).toBe(true);\n expect(response.logs).toEqual(['log1', 'log2']);\n });\n\n it('should create cache aware response with all fields', () => {\n const response: CacheAwareResponse<string> = {\n data: 'test',\n cache: { hit: true, height: 123456 },\n logs: ['log1']\n };\n expect(response.data).toBe('test');\n expect(response.cache?.hit).toBe(true);\n expect(response.cache?.height).toBe(123456);\n expect(response.logs).toEqual(['log1']);\n });\n\n it('should allow response without cache metadata', () => {\n const response: CacheAwareResponse<string[]> = {\n data: ['test1', 'test2']\n };\n \n expect(response.data).toEqual(['test1', 'test2']);\n expect(response.cache).toBeUndefined();\n expect(response.logs).toBeUndefined();\n });\n });\n\n describe('GetRecordOptions', () => {\n it('should allow all valid options', () => {\n const options: GetRecordOptions = {\n from: 1609459200,\n to: 1609545600,\n frozenAt: 1609459200,\n baseTime: 1609459200,\n prefix: 'test_',\n useCache: true\n };\n \n expect(options.from).toBe(1609459200);\n expect(options.useCache).toBe(true);\n });\n\n it('should allow string baseTime', () => {\n const options: GetRecordOptions = {\n baseTime: '2021-01-01',\n useCache: false\n };\n \n expect(options.baseTime).toBe('2021-01-01');\n });\n\n it('should allow empty options', () => {\n const options: GetRecordOptions = {};\n expect(options.useCache).toBeUndefined();\n });\n });\n\n describe('GetIndexOptions', () => {\n it('should allow all valid options', () => {\n const options: GetIndexOptions = {\n from: 1609459200,\n to: 1609545600,\n frozenAt: 1609459200,\n baseTime: 1609459200,\n prefix: 'test_',\n useCache: true\n };\n \n expect(options.useCache).toBe(true);\n });\n });\n\n describe('GetIndexChangeOptions', () => {\n it('should allow all valid options including timeInterval', () => {\n const options: GetIndexChangeOptions = {\n from: 1609459200,\n to: 1609545600,\n frozenAt: 1609459200,\n baseTime: 1609459200,\n timeInterval: 3600,\n prefix: 'test_',\n useCache: true\n };\n \n expect(options.timeInterval).toBe(3600);\n expect(options.useCache).toBe(true);\n });\n\n it('should require timeInterval', () => {\n // This should compile - timeInterval is required\n const options: GetIndexChangeOptions = {\n timeInterval: 3600\n };\n \n expect(options.timeInterval).toBe(3600);\n });\n });\n\n describe('GetFirstRecordOptions', () => {\n it('should allow all valid options', () => {\n const options: GetFirstRecordOptions = {\n after: 1609459200,\n frozenAt: 1609459200,\n useCache: true\n };\n \n expect(options.after).toBe(1609459200);\n expect(options.useCache).toBe(true);\n });\n\n it('should allow empty options', () => {\n const options: GetFirstRecordOptions = {};\n expect(options.useCache).toBeUndefined();\n });\n });\n\n describe('CacheError', () => {\n it('should create error with message', () => {\n const error = new CacheError('Test error');\n expect(error.message).toBe('Test error');\n expect(error.name).toBe('CacheError');\n expect(error.cause).toBeUndefined();\n });\n\n it('should create error with cause', () => {\n const cause = new Error('Original error');\n const error = new CacheError('Test error', cause);\n expect(error.message).toBe('Test error');\n expect(error.name).toBe('CacheError');\n expect(error.cause).toBe(cause);\n });\n\n it('should be instanceof Error', () => {\n const error = new CacheError('Test error');\n expect(error instanceof Error).toBe(true);\n expect(error instanceof CacheError).toBe(true);\n });\n });\n});"],
5
+ "mappings": ";;;AAAA,oBAAqC;AACrC,mBAA2B;AAAA,IAW3B,wBAAS,eAAe,MAAM;AAC5B,8BAAS,iBAAiB,MAAM;AAC9B,0BAAG,qCAAqC,MAAM;AAC5C,YAAM,WAA0B,EAAE,KAAK,MAAM,QAAQ,OAAO;AAC5D,gCAAO,SAAS,GAAG,EAAE,KAAK,IAAI;AAC9B,gCAAO,SAAS,MAAM,EAAE,KAAK,MAAM;AAAA,IACrC,CAAC;AAED,0BAAG,gDAAgD,MAAM;AACvD,YAAM,WAA0B,EAAE,KAAK,MAAM,QAAQ,OAAO;AAC5D,gCAAO,SAAS,GAAG,EAAE,KAAK,IAAI;AAC9B,gCAAO,SAAS,MAAM,EAAE,KAAK,MAAM;AAAA,IACrC,CAAC;AAED,0BAAG,uDAAuD,MAAM;AAC9D,YAAM,WAA0B,EAAE,KAAK,MAAM;AAC7C,gCAAO,SAAS,GAAG,EAAE,KAAK,KAAK;AAC/B,gCAAO,SAAS,MAAM,EAAE,cAAc;AAAA,IACxC,CAAC;AAED,0BAAG,wDAAwD,MAAM;AAC/D,YAAM,WAA0B;AAAA,QAC9B,KAAK;AAAA,QACL,eAAe;AAAA,QACf,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,cAAc;AAAA,QACd,MAAM;AAAA,QACN,IAAI;AAAA,QACJ,UAAU;AAAA,QACV,YAAY;AAAA,MACd;AAEA,gCAAO,SAAS,GAAG,EAAE,KAAK,IAAI;AAC9B,gCAAO,SAAS,aAAa,EAAE,KAAK,KAAK;AACzC,gCAAO,SAAS,MAAM,EAAE,KAAK,MAAM;AACnC,gCAAO,SAAS,QAAQ,EAAE,KAAK,aAAa;AAC5C,gCAAO,SAAS,YAAY,EAAE,KAAK,mBAAmB;AACtD,gCAAO,SAAS,IAAI,EAAE,KAAK,UAAU;AACrC,gCAAO,SAAS,EAAE,EAAE,KAAK,UAAU;AACnC,gCAAO,SAAS,QAAQ,EAAE,KAAK,UAAU;AACzC,gCAAO,SAAS,UAAU,EAAE,KAAK,EAAE;AAAA,IACrC,CAAC;AAED,0BAAG,0CAA0C,MAAM;AACjD,YAAM,WAA0B;AAAA,QAC9B,KAAK;AAAA,QACL,eAAe;AAAA,QACf,UAAU;AAAA,MACZ;AAEA,gCAAO,SAAS,GAAG,EAAE,KAAK,IAAI;AAC9B,gCAAO,SAAS,aAAa,EAAE,KAAK,IAAI;AACxC,gCAAO,SAAS,QAAQ,EAAE,KAAK,gBAAgB;AAC/C,gCAAO,SAAS,MAAM,EAAE,cAAc;AAAA,IACxC,CAAC;AAAA,EACH,CAAC;AAED,8BAAS,2BAA2B,MAAM;AACxC,0BAAG,gDAAgD,MAAM;AACvD,YAAM,aAAsC;AAAA,QAC1C,cAAc;AAAA,QACd,WAAW;AAAA,QACX,aAAa;AAAA,QACb,cAAc;AAAA,QACd,iBAAiB;AAAA,QACjB,SAAS;AAAA,UACP,EAAE,KAAK,MAAM,YAAY,GAAG;AAAA,UAC5B,EAAE,KAAK,OAAO,YAAY,GAAG;AAAA,UAC7B,EAAE,KAAK,MAAM,YAAY,GAAG;AAAA,QAC9B;AAAA,MACF;AAEA,gCAAO,WAAW,YAAY,EAAE,KAAK,CAAC;AACtC,gCAAO,WAAW,SAAS,EAAE,KAAK,CAAC;AACnC,gCAAO,WAAW,WAAW,EAAE,KAAK,CAAC;AACrC,gCAAO,WAAW,YAAY,EAAE,KAAK,GAAG;AACxC,gCAAO,WAAW,eAAe,EAAE,KAAK,GAAG;AAC3C,gCAAO,WAAW,OAAO,EAAE,aAAa,CAAC;AAAA,IAC3C,CAAC;AAAA,EACH,CAAC;AAED,8BAAS,sBAAsB,MAAM;AACnC,0BAAG,6CAA6C,MAAM;AACpD,YAAM,WAAyC;AAAA,QAC7C,MAAM,CAAC,SAAS,OAAO;AAAA,QACvB,OAAO,EAAE,KAAK,MAAM,QAAQ,OAAO;AAAA,QACnC,MAAM,CAAC,QAAQ,MAAM;AAAA,MACvB;AAEA,gCAAO,SAAS,IAAI,EAAE,QAAQ,CAAC,SAAS,OAAO,CAAC;AAChD,gCAAO,SAAS,OAAO,GAAG,EAAE,KAAK,IAAI;AACrC,gCAAO,SAAS,IAAI,EAAE,QAAQ,CAAC,QAAQ,MAAM,CAAC;AAAA,IAChD,CAAC;AAED,0BAAG,sDAAsD,MAAM;AAC7D,YAAM,WAAuC;AAAA,QAC3C,MAAM;AAAA,QACN,OAAO,EAAE,KAAK,MAAM,QAAQ,OAAO;AAAA,QACnC,MAAM,CAAC,MAAM;AAAA,MACf;AACA,gCAAO,SAAS,IAAI,EAAE,KAAK,MAAM;AACjC,gCAAO,SAAS,OAAO,GAAG,EAAE,KAAK,IAAI;AACrC,gCAAO,SAAS,OAAO,MAAM,EAAE,KAAK,MAAM;AAC1C,gCAAO,SAAS,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC;AAAA,IACxC,CAAC;AAED,0BAAG,gDAAgD,MAAM;AACvD,YAAM,WAAyC;AAAA,QAC7C,MAAM,CAAC,SAAS,OAAO;AAAA,MACzB;AAEA,gCAAO,SAAS,IAAI,EAAE,QAAQ,CAAC,SAAS,OAAO,CAAC;AAChD,gCAAO,SAAS,KAAK,EAAE,cAAc;AACrC,gCAAO,SAAS,IAAI,EAAE,cAAc;AAAA,IACtC,CAAC;AAAA,EACH,CAAC;AAED,8BAAS,oBAAoB,MAAM;AACjC,0BAAG,kCAAkC,MAAM;AACzC,YAAM,UAA4B;AAAA,QAChC,MAAM;AAAA,QACN,IAAI;AAAA,QACJ,UAAU;AAAA,QACV,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,UAAU;AAAA,MACZ;AAEA,gCAAO,QAAQ,IAAI,EAAE,KAAK,UAAU;AACpC,gCAAO,QAAQ,QAAQ,EAAE,KAAK,IAAI;AAAA,IACpC,CAAC;AAED,0BAAG,gCAAgC,MAAM;AACvC,YAAM,UAA4B;AAAA,QAChC,UAAU;AAAA,QACV,UAAU;AAAA,MACZ;AAEA,gCAAO,QAAQ,QAAQ,EAAE,KAAK,YAAY;AAAA,IAC5C,CAAC;AAED,0BAAG,8BAA8B,MAAM;AACrC,YAAM,UAA4B,CAAC;AACnC,gCAAO,QAAQ,QAAQ,EAAE,cAAc;AAAA,IACzC,CAAC;AAAA,EACH,CAAC;AAED,8BAAS,mBAAmB,MAAM;AAChC,0BAAG,kCAAkC,MAAM;AACzC,YAAM,UAA2B;AAAA,QAC/B,MAAM;AAAA,QACN,IAAI;AAAA,QACJ,UAAU;AAAA,QACV,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,UAAU;AAAA,MACZ;AAEA,gCAAO,QAAQ,QAAQ,EAAE,KAAK,IAAI;AAAA,IACpC,CAAC;AAAA,EACH,CAAC;AAED,8BAAS,yBAAyB,MAAM;AACtC,0BAAG,yDAAyD,MAAM;AAChE,YAAM,UAAiC;AAAA,QACrC,MAAM;AAAA,QACN,IAAI;AAAA,QACJ,UAAU;AAAA,QACV,UAAU;AAAA,QACV,cAAc;AAAA,QACd,QAAQ;AAAA,QACR,UAAU;AAAA,MACZ;AAEA,gCAAO,QAAQ,YAAY,EAAE,KAAK,IAAI;AACtC,gCAAO,QAAQ,QAAQ,EAAE,KAAK,IAAI;AAAA,IACpC,CAAC;AAED,0BAAG,+BAA+B,MAAM;AAEtC,YAAM,UAAiC;AAAA,QACrC,cAAc;AAAA,MAChB;AAEA,gCAAO,QAAQ,YAAY,EAAE,KAAK,IAAI;AAAA,IACxC,CAAC;AAAA,EACH,CAAC;AAED,8BAAS,yBAAyB,MAAM;AACtC,0BAAG,kCAAkC,MAAM;AACzC,YAAM,UAAiC;AAAA,QACrC,OAAO;AAAA,QACP,UAAU;AAAA,QACV,UAAU;AAAA,MACZ;AAEA,gCAAO,QAAQ,KAAK,EAAE,KAAK,UAAU;AACrC,gCAAO,QAAQ,QAAQ,EAAE,KAAK,IAAI;AAAA,IACpC,CAAC;AAED,0BAAG,8BAA8B,MAAM;AACrC,YAAM,UAAiC,CAAC;AACxC,gCAAO,QAAQ,QAAQ,EAAE,cAAc;AAAA,IACzC,CAAC;AAAA,EACH,CAAC;AAED,8BAAS,cAAc,MAAM;AAC3B,0BAAG,oCAAoC,MAAM;AAC3C,YAAM,QAAQ,IAAI,wBAAW,YAAY;AACzC,gCAAO,MAAM,OAAO,EAAE,KAAK,YAAY;AACvC,gCAAO,MAAM,IAAI,EAAE,KAAK,YAAY;AACpC,gCAAO,MAAM,KAAK,EAAE,cAAc;AAAA,IACpC,CAAC;AAED,0BAAG,kCAAkC,MAAM;AACzC,YAAM,QAAQ,IAAI,MAAM,gBAAgB;AACxC,YAAM,QAAQ,IAAI,wBAAW,cAAc,KAAK;AAChD,gCAAO,MAAM,OAAO,EAAE,KAAK,YAAY;AACvC,gCAAO,MAAM,IAAI,EAAE,KAAK,YAAY;AACpC,gCAAO,MAAM,KAAK,EAAE,KAAK,KAAK;AAAA,IAChC,CAAC;AAED,0BAAG,8BAA8B,MAAM;AACrC,YAAM,QAAQ,IAAI,wBAAW,YAAY;AACzC,gCAAO,iBAAiB,KAAK,EAAE,KAAK,IAAI;AACxC,gCAAO,iBAAiB,uBAAU,EAAE,KAAK,IAAI;AAAA,IAC/C,CAAC;AAAA,EACH,CAAC;AACH,CAAC;",
6
+ "names": []
7
+ }