ts-procedures 9.2.0 → 10.1.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.
Files changed (161) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/build/adapters/hono/envelope-parity.test.js +17 -6
  3. package/build/adapters/hono/envelope-parity.test.js.map +1 -1
  4. package/build/codegen/bin/cli.js +1 -1
  5. package/build/codegen/bin/cli.js.map +1 -1
  6. package/build/codegen/constants.js +2 -2
  7. package/build/codegen/constants.js.map +1 -1
  8. package/build/codegen/emit/api-route.js +1 -1
  9. package/build/codegen/emit/api-route.js.map +1 -1
  10. package/build/codegen/emit/scope-file.js +1 -1
  11. package/build/codegen/emit/scope-file.js.map +1 -1
  12. package/build/codegen/emit-errors.integration.test.js +2 -2
  13. package/build/codegen/emit-errors.integration.test.js.map +1 -1
  14. package/build/codegen/resolve-envelope.js +1 -1
  15. package/build/codegen/resolve-envelope.js.map +1 -1
  16. package/build/codegen/test-helpers/run-tsc.js +1 -1
  17. package/build/codegen/test-helpers/run-tsc.js.map +1 -1
  18. package/build/exports.d.ts +1 -0
  19. package/build/exports.js +4 -0
  20. package/build/exports.js.map +1 -1
  21. package/build/server/doc-registry.js +3 -0
  22. package/build/server/doc-registry.js.map +1 -1
  23. package/build/server/doc-registry.test.js +31 -0
  24. package/build/server/doc-registry.test.js.map +1 -1
  25. package/build/server/index.d.ts +1 -0
  26. package/build/server/index.js +1 -0
  27. package/build/server/index.js.map +1 -1
  28. package/build/server/spec-version.d.ts +24 -0
  29. package/build/server/spec-version.js +26 -0
  30. package/build/server/spec-version.js.map +1 -0
  31. package/build/server/types.d.ts +15 -0
  32. package/build/version.d.ts +9 -0
  33. package/build/version.js +11 -0
  34. package/build/version.js.map +1 -0
  35. package/docs/doc-envelope-spec.md +291 -0
  36. package/docs/doc-envelope.schema.json +253 -0
  37. package/docs/http-integrations.md +27 -1
  38. package/package.json +8 -8
  39. package/src/adapters/hono/envelope-parity.test.ts +18 -6
  40. package/src/codegen/bin/cli.ts +1 -1
  41. package/src/codegen/constants.ts +2 -2
  42. package/src/codegen/emit/api-route.ts +1 -1
  43. package/src/codegen/emit/scope-file.ts +2 -1
  44. package/src/codegen/emit-errors.integration.test.ts +2 -2
  45. package/src/codegen/resolve-envelope.ts +1 -1
  46. package/src/codegen/test-helpers/run-tsc.ts +1 -0
  47. package/src/exports.ts +4 -0
  48. package/src/server/doc-registry.test.ts +34 -0
  49. package/src/server/doc-registry.ts +3 -0
  50. package/src/server/index.ts +1 -0
  51. package/src/server/spec-version.ts +27 -0
  52. package/src/server/types.ts +15 -0
  53. package/src/version.ts +11 -0
  54. package/build/errors.d.ts +0 -33
  55. package/build/errors.js +0 -91
  56. package/build/errors.js.map +0 -1
  57. package/build/errors.test.d.ts +0 -1
  58. package/build/errors.test.js +0 -122
  59. package/build/errors.test.js.map +0 -1
  60. package/build/implementations/http/doc-registry.d.ts +0 -28
  61. package/build/implementations/http/doc-registry.js +0 -96
  62. package/build/implementations/http/doc-registry.js.map +0 -1
  63. package/build/implementations/http/doc-registry.test.d.ts +0 -1
  64. package/build/implementations/http/doc-registry.test.js +0 -516
  65. package/build/implementations/http/doc-registry.test.js.map +0 -1
  66. package/build/implementations/http/error-taxonomy.d.ts +0 -249
  67. package/build/implementations/http/error-taxonomy.js +0 -252
  68. package/build/implementations/http/error-taxonomy.js.map +0 -1
  69. package/build/implementations/http/error-taxonomy.test.d.ts +0 -1
  70. package/build/implementations/http/error-taxonomy.test.js +0 -399
  71. package/build/implementations/http/error-taxonomy.test.js.map +0 -1
  72. package/build/implementations/http/express-rpc/error-taxonomy.test.d.ts +0 -1
  73. package/build/implementations/http/express-rpc/error-taxonomy.test.js +0 -83
  74. package/build/implementations/http/express-rpc/error-taxonomy.test.js.map +0 -1
  75. package/build/implementations/http/express-rpc/index.d.ts +0 -125
  76. package/build/implementations/http/express-rpc/index.js +0 -216
  77. package/build/implementations/http/express-rpc/index.js.map +0 -1
  78. package/build/implementations/http/express-rpc/index.test.d.ts +0 -1
  79. package/build/implementations/http/express-rpc/index.test.js +0 -684
  80. package/build/implementations/http/express-rpc/index.test.js.map +0 -1
  81. package/build/implementations/http/express-rpc/types.d.ts +0 -11
  82. package/build/implementations/http/express-rpc/types.js +0 -2
  83. package/build/implementations/http/express-rpc/types.js.map +0 -1
  84. package/build/implementations/http/hono-api/error-taxonomy.test.d.ts +0 -1
  85. package/build/implementations/http/hono-api/error-taxonomy.test.js +0 -137
  86. package/build/implementations/http/hono-api/error-taxonomy.test.js.map +0 -1
  87. package/build/implementations/http/hono-api/index.d.ts +0 -151
  88. package/build/implementations/http/hono-api/index.js +0 -344
  89. package/build/implementations/http/hono-api/index.js.map +0 -1
  90. package/build/implementations/http/hono-api/index.test.d.ts +0 -1
  91. package/build/implementations/http/hono-api/index.test.js +0 -992
  92. package/build/implementations/http/hono-api/index.test.js.map +0 -1
  93. package/build/implementations/http/hono-api/types.d.ts +0 -13
  94. package/build/implementations/http/hono-api/types.js +0 -2
  95. package/build/implementations/http/hono-api/types.js.map +0 -1
  96. package/build/implementations/http/hono-rpc/error-taxonomy.test.d.ts +0 -1
  97. package/build/implementations/http/hono-rpc/error-taxonomy.test.js +0 -64
  98. package/build/implementations/http/hono-rpc/error-taxonomy.test.js.map +0 -1
  99. package/build/implementations/http/hono-rpc/index.d.ts +0 -130
  100. package/build/implementations/http/hono-rpc/index.js +0 -209
  101. package/build/implementations/http/hono-rpc/index.js.map +0 -1
  102. package/build/implementations/http/hono-rpc/index.test.d.ts +0 -1
  103. package/build/implementations/http/hono-rpc/index.test.js +0 -828
  104. package/build/implementations/http/hono-rpc/index.test.js.map +0 -1
  105. package/build/implementations/http/hono-rpc/types.d.ts +0 -11
  106. package/build/implementations/http/hono-rpc/types.js +0 -2
  107. package/build/implementations/http/hono-rpc/types.js.map +0 -1
  108. package/build/implementations/http/hono-stream/error-taxonomy.test.d.ts +0 -1
  109. package/build/implementations/http/hono-stream/error-taxonomy.test.js +0 -159
  110. package/build/implementations/http/hono-stream/error-taxonomy.test.js.map +0 -1
  111. package/build/implementations/http/hono-stream/index.d.ts +0 -171
  112. package/build/implementations/http/hono-stream/index.js +0 -415
  113. package/build/implementations/http/hono-stream/index.js.map +0 -1
  114. package/build/implementations/http/hono-stream/index.test.d.ts +0 -1
  115. package/build/implementations/http/hono-stream/index.test.js +0 -1383
  116. package/build/implementations/http/hono-stream/index.test.js.map +0 -1
  117. package/build/implementations/http/hono-stream/types.d.ts +0 -15
  118. package/build/implementations/http/hono-stream/types.js +0 -2
  119. package/build/implementations/http/hono-stream/types.js.map +0 -1
  120. package/build/implementations/http/on-request-error.test.d.ts +0 -1
  121. package/build/implementations/http/on-request-error.test.js +0 -173
  122. package/build/implementations/http/on-request-error.test.js.map +0 -1
  123. package/build/implementations/http/route-errors.test.d.ts +0 -1
  124. package/build/implementations/http/route-errors.test.js +0 -139
  125. package/build/implementations/http/route-errors.test.js.map +0 -1
  126. package/build/implementations/types.d.ts +0 -192
  127. package/build/implementations/types.js +0 -2
  128. package/build/implementations/types.js.map +0 -1
  129. package/build/index.d.ts +0 -165
  130. package/build/index.js +0 -258
  131. package/build/index.js.map +0 -1
  132. package/build/index.test.d.ts +0 -1
  133. package/build/index.test.js +0 -920
  134. package/build/index.test.js.map +0 -1
  135. package/build/schema/extract-json-schema.d.ts +0 -2
  136. package/build/schema/extract-json-schema.js +0 -12
  137. package/build/schema/extract-json-schema.js.map +0 -1
  138. package/build/schema/extract-json-schema.test.d.ts +0 -1
  139. package/build/schema/extract-json-schema.test.js +0 -23
  140. package/build/schema/extract-json-schema.test.js.map +0 -1
  141. package/build/schema/parser.d.ts +0 -28
  142. package/build/schema/parser.js +0 -170
  143. package/build/schema/parser.js.map +0 -1
  144. package/build/schema/parser.test.d.ts +0 -1
  145. package/build/schema/parser.test.js +0 -120
  146. package/build/schema/parser.test.js.map +0 -1
  147. package/build/schema/resolve-schema-lib.d.ts +0 -12
  148. package/build/schema/resolve-schema-lib.js +0 -11
  149. package/build/schema/resolve-schema-lib.js.map +0 -1
  150. package/build/schema/resolve-schema-lib.test.d.ts +0 -1
  151. package/build/schema/resolve-schema-lib.test.js +0 -17
  152. package/build/schema/resolve-schema-lib.test.js.map +0 -1
  153. package/build/schema/types.d.ts +0 -8
  154. package/build/schema/types.js +0 -2
  155. package/build/schema/types.js.map +0 -1
  156. package/build/stack-utils.d.ts +0 -25
  157. package/build/stack-utils.js +0 -95
  158. package/build/stack-utils.js.map +0 -1
  159. package/build/stack-utils.test.d.ts +0 -1
  160. package/build/stack-utils.test.js +0 -80
  161. package/build/stack-utils.test.js.map +0 -1
@@ -1,95 +0,0 @@
1
- /**
2
- * Internal ts-procedures files that should be skipped when finding user code.
3
- * Only skip the core library files, not test files or user code.
4
- */
5
- const INTERNAL_FILES = [
6
- '/index.ts',
7
- '/index.js',
8
- '/errors.ts',
9
- '/errors.js',
10
- '/stack-utils.ts',
11
- '/stack-utils.js',
12
- '/compute-schema.ts',
13
- '/compute-schema.js',
14
- '/parser.ts',
15
- '/parser.js',
16
- ];
17
- /**
18
- * Captures the stack trace at the call site and extracts the definition location.
19
- * Finds the first stack frame outside of ts-procedures internal files.
20
- */
21
- export function captureDefinitionInfo() {
22
- const err = new Error();
23
- const stack = err.stack;
24
- if (!stack) {
25
- return {};
26
- }
27
- const lines = stack.split('\n');
28
- // Find the first frame that's not from ts-procedures internals
29
- // Skip the first line (Error message) and frames from this module
30
- let userFrame;
31
- for (let i = 1; i < lines.length; i++) {
32
- const rawLine = lines[i];
33
- if (!rawLine)
34
- continue;
35
- const line = rawLine.trim();
36
- // Skip empty or invalid frames
37
- if (!line.startsWith('at ')) {
38
- continue;
39
- }
40
- // Skip frames from ts-procedures internal source files
41
- const isInternalFile = INTERNAL_FILES.some(file => line.includes(file));
42
- if (isInternalFile) {
43
- continue;
44
- }
45
- // Skip frames from ts-procedures in node_modules (when used as a dependency)
46
- if (line.includes('/node_modules/ts-procedures/') || line.includes('\\node_modules\\ts-procedures\\')) {
47
- continue;
48
- }
49
- // Skip internal node frames
50
- if (line.includes('node:') || line.startsWith('at Module.') || line.startsWith('at Object.<anonymous> (node:')) {
51
- continue;
52
- }
53
- userFrame = line;
54
- break;
55
- }
56
- if (!userFrame) {
57
- return { definitionStack: stack };
58
- }
59
- const definedAt = parseStackFrame(userFrame);
60
- return {
61
- definedAt,
62
- definitionStack: stack,
63
- };
64
- }
65
- /**
66
- * Parses a V8 stack frame line to extract file, line, and column info.
67
- * Handles formats like:
68
- * - "at Object.<anonymous> (/path/to/file.ts:10:5)"
69
- * - "at functionName (/path/to/file.ts:10:5)"
70
- * - "at /path/to/file.ts:10:5"
71
- */
72
- function parseStackFrame(frame) {
73
- // Match patterns like "(path:line:column)" or just "path:line:column"
74
- const match = frame.match(/\(([^)]+):(\d+):(\d+)\)$/) || frame.match(/at ([^:]+):(\d+):(\d+)$/);
75
- if (match && match[1] && match[2] && match[3]) {
76
- return {
77
- file: match[1],
78
- line: parseInt(match[2], 10),
79
- column: parseInt(match[3], 10),
80
- raw: frame,
81
- };
82
- }
83
- return undefined;
84
- }
85
- /**
86
- * Formats definition info for appending to error stacks.
87
- */
88
- export function formatDefinitionInfo(info, procedureName) {
89
- if (!info.definedAt) {
90
- return undefined;
91
- }
92
- const { file, line, column } = info.definedAt;
93
- return `\n--- Procedure "${procedureName}" defined at ---\n at ${file}:${line}:${column}`;
94
- }
95
- //# sourceMappingURL=stack-utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stack-utils.js","sourceRoot":"","sources":["../src/stack-utils.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,80 +0,0 @@
1
- import { describe, expect, test } from 'vitest';
2
- import { captureDefinitionInfo, formatDefinitionInfo } from './stack-utils.js';
3
- describe('Stack Utils', () => {
4
- describe('captureDefinitionInfo', () => {
5
- test('returns definition info with definedAt', () => {
6
- const info = captureDefinitionInfo();
7
- // Should capture the call site in this test file
8
- expect(info).toBeDefined();
9
- expect(info.definitionStack).toBeDefined();
10
- expect(typeof info.definitionStack).toBe('string');
11
- });
12
- test('definedAt contains file, line, column when available', () => {
13
- const info = captureDefinitionInfo();
14
- // The definedAt should be present since we're calling from user code (test file)
15
- if (info.definedAt) {
16
- expect(info.definedAt.file).toBeDefined();
17
- expect(typeof info.definedAt.file).toBe('string');
18
- expect(info.definedAt.line).toBeDefined();
19
- expect(typeof info.definedAt.line).toBe('number');
20
- expect(info.definedAt.line).toBeGreaterThan(0);
21
- expect(info.definedAt.column).toBeDefined();
22
- expect(typeof info.definedAt.column).toBe('number');
23
- expect(info.definedAt.column).toBeGreaterThan(0);
24
- expect(info.definedAt.raw).toBeDefined();
25
- expect(typeof info.definedAt.raw).toBe('string');
26
- }
27
- });
28
- test('definitionStack contains Error stack trace', () => {
29
- const info = captureDefinitionInfo();
30
- expect(info.definitionStack).toContain('Error');
31
- expect(info.definitionStack).toContain('at ');
32
- });
33
- });
34
- describe('formatDefinitionInfo', () => {
35
- test('returns undefined when definedAt is not present', () => {
36
- const info = {};
37
- const result = formatDefinitionInfo(info, 'TestProcedure');
38
- expect(result).toBeUndefined();
39
- });
40
- test('returns formatted string when definedAt is present', () => {
41
- const info = {
42
- definedAt: {
43
- file: '/app/procedures/test.ts',
44
- line: 42,
45
- column: 5,
46
- raw: 'at Object.<anonymous> (/app/procedures/test.ts:42:5)',
47
- },
48
- };
49
- const result = formatDefinitionInfo(info, 'TestProcedure');
50
- expect(result).toBeDefined();
51
- expect(result).toContain('--- Procedure "TestProcedure" defined at ---');
52
- expect(result).toContain('/app/procedures/test.ts:42:5');
53
- });
54
- test('includes procedure name in formatted output', () => {
55
- const info = {
56
- definedAt: {
57
- file: '/path/to/file.ts',
58
- line: 10,
59
- column: 3,
60
- raw: 'at /path/to/file.ts:10:3',
61
- },
62
- };
63
- const result = formatDefinitionInfo(info, 'MyCustomProcedure');
64
- expect(result).toContain('"MyCustomProcedure"');
65
- });
66
- });
67
- describe('integration with procedure creation', () => {
68
- test('captures location from calling code', () => {
69
- // Helper to simulate what happens in Create()
70
- function simulateCreate() {
71
- return captureDefinitionInfo();
72
- }
73
- const info = simulateCreate();
74
- // Should have captured the location of the simulateCreate() call
75
- expect(info).toBeDefined();
76
- expect(info.definitionStack).toBeDefined();
77
- });
78
- });
79
- });
80
- //# sourceMappingURL=stack-utils.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stack-utils.test.js","sourceRoot":"","sources":["../src/stack-utils.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAkB,MAAM,kBAAkB,CAAA;AAE9F,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACrC,IAAI,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAClD,MAAM,IAAI,GAAG,qBAAqB,EAAE,CAAA;YAEpC,iDAAiD;YACjD,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAA;YAC1B,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,WAAW,EAAE,CAAA;YAC1C,MAAM,CAAC,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACpD,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,sDAAsD,EAAE,GAAG,EAAE;YAChE,MAAM,IAAI,GAAG,qBAAqB,EAAE,CAAA;YAEpC,iFAAiF;YACjF,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAA;gBACzC,MAAM,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;gBACjD,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAA;gBACzC,MAAM,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;gBACjD,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;gBAC9C,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAA;gBAC3C,MAAM,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;gBACnD,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;gBAChD,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAA;gBACxC,MAAM,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAClD,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACtD,MAAM,IAAI,GAAG,qBAAqB,EAAE,CAAA;YAEpC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;YAC/C,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;QAC/C,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACpC,IAAI,CAAC,iDAAiD,EAAE,GAAG,EAAE;YAC3D,MAAM,IAAI,GAAmB,EAAE,CAAA;YAC/B,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,EAAE,eAAe,CAAC,CAAA;YAE1D,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,CAAA;QAChC,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,oDAAoD,EAAE,GAAG,EAAE;YAC9D,MAAM,IAAI,GAAmB;gBAC3B,SAAS,EAAE;oBACT,IAAI,EAAE,yBAAyB;oBAC/B,IAAI,EAAE,EAAE;oBACR,MAAM,EAAE,CAAC;oBACT,GAAG,EAAE,sDAAsD;iBAC5D;aACF,CAAA;YACD,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,EAAE,eAAe,CAAC,CAAA;YAE1D,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAA;YAC5B,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,8CAA8C,CAAC,CAAA;YACxE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAA;QAC1D,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACvD,MAAM,IAAI,GAAmB;gBAC3B,SAAS,EAAE;oBACT,IAAI,EAAE,kBAAkB;oBACxB,IAAI,EAAE,EAAE;oBACR,MAAM,EAAE,CAAC;oBACT,GAAG,EAAE,0BAA0B;iBAChC;aACF,CAAA;YACD,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAA;YAE9D,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAA;QACjD,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,qCAAqC,EAAE,GAAG,EAAE;QACnD,IAAI,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC/C,8CAA8C;YAC9C,SAAS,cAAc;gBACrB,OAAO,qBAAqB,EAAE,CAAA;YAChC,CAAC;YAED,MAAM,IAAI,GAAG,cAAc,EAAE,CAAA;YAE7B,iEAAiE;YACjE,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAA;YAC1B,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,WAAW,EAAE,CAAA;QAC5C,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}