@bubblelab/bubble-core 0.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.
- package/LICENSE.txt +202 -0
- package/dist/bubble-bundle.d.ts +2021 -0
- package/dist/bubble-factory.d.ts +161 -0
- package/dist/bubble-factory.d.ts.map +1 -0
- package/dist/bubble-factory.js +426 -0
- package/dist/bubble-factory.js.map +1 -0
- package/dist/bubble-flow/bubble-flow-class.d.ts +19 -0
- package/dist/bubble-flow/bubble-flow-class.d.ts.map +1 -0
- package/dist/bubble-flow/bubble-flow-class.js +23 -0
- package/dist/bubble-flow/bubble-flow-class.js.map +1 -0
- package/dist/bubble-flow/sample/data-analyst-flow.d.ts +15 -0
- package/dist/bubble-flow/sample/data-analyst-flow.d.ts.map +1 -0
- package/dist/bubble-flow/sample/data-analyst-flow.js +63 -0
- package/dist/bubble-flow/sample/data-analyst-flow.js.map +1 -0
- package/dist/bubble-flow/sample/error-ts.d.ts +23 -0
- package/dist/bubble-flow/sample/error-ts.d.ts.map +1 -0
- package/dist/bubble-flow/sample/error-ts.js +31 -0
- package/dist/bubble-flow/sample/error-ts.js.map +1 -0
- package/dist/bubble-flow/sample/sanitytest.d.ts +10 -0
- package/dist/bubble-flow/sample/sanitytest.d.ts.map +1 -0
- package/dist/bubble-flow/sample/sanitytest.js +13 -0
- package/dist/bubble-flow/sample/sanitytest.js.map +1 -0
- package/dist/bubble-flow/sample/simple-webhook-2.d.ts +19 -0
- package/dist/bubble-flow/sample/simple-webhook-2.d.ts.map +1 -0
- package/dist/bubble-flow/sample/simple-webhook-2.js +23 -0
- package/dist/bubble-flow/sample/simple-webhook-2.js.map +1 -0
- package/dist/bubble-flow/sample/simple-webhook.d.ts +10 -0
- package/dist/bubble-flow/sample/simple-webhook.d.ts.map +1 -0
- package/dist/bubble-flow/sample/simple-webhook.js +18 -0
- package/dist/bubble-flow/sample/simple-webhook.js.map +1 -0
- package/dist/bubble-flow/sample/simplified-data-analysis.flow.d.ts +29 -0
- package/dist/bubble-flow/sample/simplified-data-analysis.flow.d.ts.map +1 -0
- package/dist/bubble-flow/sample/simplified-data-analysis.flow.js +150 -0
- package/dist/bubble-flow/sample/simplified-data-analysis.flow.js.map +1 -0
- package/dist/bubble-flow/sample/slack-v0.1.d.ts +10 -0
- package/dist/bubble-flow/sample/slack-v0.1.d.ts.map +1 -0
- package/dist/bubble-flow/sample/slack-v0.1.js +59 -0
- package/dist/bubble-flow/sample/slack-v0.1.js.map +1 -0
- package/dist/bubble-flow/sample/slackagenttest.d.ts +10 -0
- package/dist/bubble-flow/sample/slackagenttest.d.ts.map +1 -0
- package/dist/bubble-flow/sample/slackagenttest.js +59 -0
- package/dist/bubble-flow/sample/slackagenttest.js.map +1 -0
- package/dist/bubble-trigger/index.d.ts +2 -0
- package/dist/bubble-trigger/index.d.ts.map +1 -0
- package/dist/bubble-trigger/index.js +2 -0
- package/dist/bubble-trigger/index.js.map +1 -0
- package/dist/bubble-trigger/types.d.ts +87 -0
- package/dist/bubble-trigger/types.d.ts.map +1 -0
- package/dist/bubble-trigger/types.js +14 -0
- package/dist/bubble-trigger/types.js.map +1 -0
- package/dist/bubbles/service-bubble/ai-agent.d.ts +428 -0
- package/dist/bubbles/service-bubble/ai-agent.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/ai-agent.js +881 -0
- package/dist/bubbles/service-bubble/ai-agent.js.map +1 -0
- package/dist/bubbles/service-bubble/gmail.d.ts +3073 -0
- package/dist/bubbles/service-bubble/gmail.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/gmail.js +908 -0
- package/dist/bubbles/service-bubble/gmail.js.map +1 -0
- package/dist/bubbles/service-bubble/google-calendar.d.ts +3377 -0
- package/dist/bubbles/service-bubble/google-calendar.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/google-calendar.js +527 -0
- package/dist/bubbles/service-bubble/google-calendar.js.map +1 -0
- package/dist/bubbles/service-bubble/google-drive.d.ts +1152 -0
- package/dist/bubbles/service-bubble/google-drive.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/google-drive.js +943 -0
- package/dist/bubbles/service-bubble/google-drive.js.map +1 -0
- package/dist/bubbles/service-bubble/google-sheets.d.ts +1811 -0
- package/dist/bubbles/service-bubble/google-sheets.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/google-sheets.js +904 -0
- package/dist/bubbles/service-bubble/google-sheets.js.map +1 -0
- package/dist/bubbles/service-bubble/hello-world.d.ts +74 -0
- package/dist/bubbles/service-bubble/hello-world.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/hello-world.js +67 -0
- package/dist/bubbles/service-bubble/hello-world.js.map +1 -0
- package/dist/bubbles/service-bubble/http.d.ts +134 -0
- package/dist/bubbles/service-bubble/http.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/http.js +184 -0
- package/dist/bubbles/service-bubble/http.js.map +1 -0
- package/dist/bubbles/service-bubble/postgresql.d.ts +180 -0
- package/dist/bubbles/service-bubble/postgresql.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/postgresql.js +448 -0
- package/dist/bubbles/service-bubble/postgresql.js.map +1 -0
- package/dist/bubbles/service-bubble/resend.d.ts +301 -0
- package/dist/bubbles/service-bubble/resend.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/resend.js +253 -0
- package/dist/bubbles/service-bubble/resend.js.map +1 -0
- package/dist/bubbles/service-bubble/slack.d.ts +5869 -0
- package/dist/bubbles/service-bubble/slack.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/slack.js +1536 -0
- package/dist/bubbles/service-bubble/slack.js.map +1 -0
- package/dist/bubbles/service-bubble/storage.d.ts +571 -0
- package/dist/bubbles/service-bubble/storage.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/storage.js +504 -0
- package/dist/bubbles/service-bubble/storage.js.map +1 -0
- package/dist/bubbles/tool-bubble/bubbleflow-validation-tool.d.ts +308 -0
- package/dist/bubbles/tool-bubble/bubbleflow-validation-tool.d.ts.map +1 -0
- package/dist/bubbles/tool-bubble/bubbleflow-validation-tool.js +285 -0
- package/dist/bubbles/tool-bubble/bubbleflow-validation-tool.js.map +1 -0
- package/dist/bubbles/tool-bubble/chart-js-tool.d.ts +416 -0
- package/dist/bubbles/tool-bubble/chart-js-tool.d.ts.map +1 -0
- package/dist/bubbles/tool-bubble/chart-js-tool.js +570 -0
- package/dist/bubbles/tool-bubble/chart-js-tool.js.map +1 -0
- package/dist/bubbles/tool-bubble/get-bubble-details-tool.d.ts +99 -0
- package/dist/bubbles/tool-bubble/get-bubble-details-tool.d.ts.map +1 -0
- package/dist/bubbles/tool-bubble/get-bubble-details-tool.js +645 -0
- package/dist/bubbles/tool-bubble/get-bubble-details-tool.js.map +1 -0
- package/dist/bubbles/tool-bubble/list-bubbles-tool.d.ts +112 -0
- package/dist/bubbles/tool-bubble/list-bubbles-tool.d.ts.map +1 -0
- package/dist/bubbles/tool-bubble/list-bubbles-tool.js +82 -0
- package/dist/bubbles/tool-bubble/list-bubbles-tool.js.map +1 -0
- package/dist/bubbles/tool-bubble/reddit-scrape-tool.d.ts +413 -0
- package/dist/bubbles/tool-bubble/reddit-scrape-tool.d.ts.map +1 -0
- package/dist/bubbles/tool-bubble/reddit-scrape-tool.js +327 -0
- package/dist/bubbles/tool-bubble/reddit-scrape-tool.js.map +1 -0
- package/dist/bubbles/tool-bubble/research-agent-tool.d.ts +122 -0
- package/dist/bubbles/tool-bubble/research-agent-tool.d.ts.map +1 -0
- package/dist/bubbles/tool-bubble/research-agent-tool.js +343 -0
- package/dist/bubbles/tool-bubble/research-agent-tool.js.map +1 -0
- package/dist/bubbles/tool-bubble/sql-query-tool.d.ts +131 -0
- package/dist/bubbles/tool-bubble/sql-query-tool.d.ts.map +1 -0
- package/dist/bubbles/tool-bubble/sql-query-tool.js +147 -0
- package/dist/bubbles/tool-bubble/sql-query-tool.js.map +1 -0
- package/dist/bubbles/tool-bubble/tool-template.d.ts +257 -0
- package/dist/bubbles/tool-bubble/tool-template.d.ts.map +1 -0
- package/dist/bubbles/tool-bubble/tool-template.js +238 -0
- package/dist/bubbles/tool-bubble/tool-template.js.map +1 -0
- package/dist/bubbles/tool-bubble/virtual-file-editor-example.d.ts +8 -0
- package/dist/bubbles/tool-bubble/virtual-file-editor-example.d.ts.map +1 -0
- package/dist/bubbles/tool-bubble/virtual-file-editor-example.js +65 -0
- package/dist/bubbles/tool-bubble/virtual-file-editor-example.js.map +1 -0
- package/dist/bubbles/tool-bubble/virtual-file-editor.tool.d.ts +125 -0
- package/dist/bubbles/tool-bubble/virtual-file-editor.tool.d.ts.map +1 -0
- package/dist/bubbles/tool-bubble/virtual-file-editor.tool.js +169 -0
- package/dist/bubbles/tool-bubble/virtual-file-editor.tool.js.map +1 -0
- package/dist/bubbles/tool-bubble/web-crawl-tool.d.ts +218 -0
- package/dist/bubbles/tool-bubble/web-crawl-tool.d.ts.map +1 -0
- package/dist/bubbles/tool-bubble/web-crawl-tool.js +255 -0
- package/dist/bubbles/tool-bubble/web-crawl-tool.js.map +1 -0
- package/dist/bubbles/tool-bubble/web-extract-tool.d.ts +134 -0
- package/dist/bubbles/tool-bubble/web-extract-tool.d.ts.map +1 -0
- package/dist/bubbles/tool-bubble/web-extract-tool.js +175 -0
- package/dist/bubbles/tool-bubble/web-extract-tool.js.map +1 -0
- package/dist/bubbles/tool-bubble/web-scrape-tool.d.ts +228 -0
- package/dist/bubbles/tool-bubble/web-scrape-tool.d.ts.map +1 -0
- package/dist/bubbles/tool-bubble/web-scrape-tool.js +214 -0
- package/dist/bubbles/tool-bubble/web-scrape-tool.js.map +1 -0
- package/dist/bubbles/tool-bubble/web-search-tool.d.ts +134 -0
- package/dist/bubbles/tool-bubble/web-search-tool.d.ts.map +1 -0
- package/dist/bubbles/tool-bubble/web-search-tool.js +155 -0
- package/dist/bubbles/tool-bubble/web-search-tool.js.map +1 -0
- package/dist/bubbles/workflow-bubble/bubbleflow-generator.workflow.d.ts +114 -0
- package/dist/bubbles/workflow-bubble/bubbleflow-generator.workflow.d.ts.map +1 -0
- package/dist/bubbles/workflow-bubble/bubbleflow-generator.workflow.js +777 -0
- package/dist/bubbles/workflow-bubble/bubbleflow-generator.workflow.js.map +1 -0
- package/dist/bubbles/workflow-bubble/bubblscript-generateor.workflow.d.ts +97 -0
- package/dist/bubbles/workflow-bubble/bubblscript-generateor.workflow.d.ts.map +1 -0
- package/dist/bubbles/workflow-bubble/bubblscript-generateor.workflow.js +327 -0
- package/dist/bubbles/workflow-bubble/bubblscript-generateor.workflow.js.map +1 -0
- package/dist/bubbles/workflow-bubble/database-analyzer.workflow.d.ts +303 -0
- package/dist/bubbles/workflow-bubble/database-analyzer.workflow.d.ts.map +1 -0
- package/dist/bubbles/workflow-bubble/database-analyzer.workflow.js +297 -0
- package/dist/bubbles/workflow-bubble/database-analyzer.workflow.js.map +1 -0
- package/dist/bubbles/workflow-bubble/file-editor-agent.workflow.d.ts +157 -0
- package/dist/bubbles/workflow-bubble/file-editor-agent.workflow.d.ts.map +1 -0
- package/dist/bubbles/workflow-bubble/file-editor-agent.workflow.js +310 -0
- package/dist/bubbles/workflow-bubble/file-editor-agent.workflow.js.map +1 -0
- package/dist/bubbles/workflow-bubble/generate-document.workflow.d.ts +543 -0
- package/dist/bubbles/workflow-bubble/generate-document.workflow.d.ts.map +1 -0
- package/dist/bubbles/workflow-bubble/generate-document.workflow.js +628 -0
- package/dist/bubbles/workflow-bubble/generate-document.workflow.js.map +1 -0
- package/dist/bubbles/workflow-bubble/parse-document.workflow.d.ts +679 -0
- package/dist/bubbles/workflow-bubble/parse-document.workflow.d.ts.map +1 -0
- package/dist/bubbles/workflow-bubble/parse-document.workflow.js +604 -0
- package/dist/bubbles/workflow-bubble/parse-document.workflow.js.map +1 -0
- package/dist/bubbles/workflow-bubble/pdf-form-operations.workflow.d.ts +1011 -0
- package/dist/bubbles/workflow-bubble/pdf-form-operations.workflow.d.ts.map +1 -0
- package/dist/bubbles/workflow-bubble/pdf-form-operations.workflow.js +841 -0
- package/dist/bubbles/workflow-bubble/pdf-form-operations.workflow.js.map +1 -0
- package/dist/bubbles/workflow-bubble/pdf-ocr.workflow.d.ts +883 -0
- package/dist/bubbles/workflow-bubble/pdf-ocr.workflow.d.ts.map +1 -0
- package/dist/bubbles/workflow-bubble/pdf-ocr.workflow.js +781 -0
- package/dist/bubbles/workflow-bubble/pdf-ocr.workflow.js.map +1 -0
- package/dist/bubbles/workflow-bubble/slack-data-assistant.workflow.d.ts +300 -0
- package/dist/bubbles/workflow-bubble/slack-data-assistant.workflow.d.ts.map +1 -0
- package/dist/bubbles/workflow-bubble/slack-data-assistant.workflow.js +508 -0
- package/dist/bubbles/workflow-bubble/slack-data-assistant.workflow.js.map +1 -0
- package/dist/bubbles/workflow-bubble/slack-formatter-agent.d.ts +731 -0
- package/dist/bubbles/workflow-bubble/slack-formatter-agent.d.ts.map +1 -0
- package/dist/bubbles/workflow-bubble/slack-formatter-agent.js +690 -0
- package/dist/bubbles/workflow-bubble/slack-formatter-agent.js.map +1 -0
- package/dist/bubbles/workflow-bubble/slack-notifier.workflow.d.ts +401 -0
- package/dist/bubbles/workflow-bubble/slack-notifier.workflow.d.ts.map +1 -0
- package/dist/bubbles/workflow-bubble/slack-notifier.workflow.js +382 -0
- package/dist/bubbles/workflow-bubble/slack-notifier.workflow.js.map +1 -0
- package/dist/bubbles/workflow-bubble/workflow-template.d.ts +144 -0
- package/dist/bubbles/workflow-bubble/workflow-template.d.ts.map +1 -0
- package/dist/bubbles/workflow-bubble/workflow-template.js +124 -0
- package/dist/bubbles/workflow-bubble/workflow-template.js.map +1 -0
- package/dist/index.d.ts +46 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +53 -0
- package/dist/index.js.map +1 -0
- package/dist/logging/BubbleLogger.d.ts +146 -0
- package/dist/logging/BubbleLogger.d.ts.map +1 -0
- package/dist/logging/BubbleLogger.js +472 -0
- package/dist/logging/BubbleLogger.js.map +1 -0
- package/dist/logging/StreamingBubbleLogger.d.ts +85 -0
- package/dist/logging/StreamingBubbleLogger.d.ts.map +1 -0
- package/dist/logging/StreamingBubbleLogger.js +340 -0
- package/dist/logging/StreamingBubbleLogger.js.map +1 -0
- package/dist/types/ai-models.d.ts +4 -0
- package/dist/types/ai-models.d.ts.map +1 -0
- package/dist/types/ai-models.js +14 -0
- package/dist/types/ai-models.js.map +1 -0
- package/dist/types/available-tools.d.ts +4 -0
- package/dist/types/available-tools.d.ts.map +1 -0
- package/dist/types/available-tools.js +19 -0
- package/dist/types/available-tools.js.map +1 -0
- package/dist/types/base-bubble-class.d.ts +47 -0
- package/dist/types/base-bubble-class.d.ts.map +1 -0
- package/dist/types/base-bubble-class.js +212 -0
- package/dist/types/base-bubble-class.js.map +1 -0
- package/dist/types/bubble-errors.d.ts +44 -0
- package/dist/types/bubble-errors.d.ts.map +1 -0
- package/dist/types/bubble-errors.js +51 -0
- package/dist/types/bubble-errors.js.map +1 -0
- package/dist/types/bubble.d.ts +73 -0
- package/dist/types/bubble.d.ts.map +1 -0
- package/dist/types/bubble.js +2 -0
- package/dist/types/bubble.js.map +1 -0
- package/dist/types/credentials.d.ts +6 -0
- package/dist/types/credentials.d.ts.map +1 -0
- package/dist/types/credentials.js +6 -0
- package/dist/types/credentials.js.map +1 -0
- package/dist/types/service-bubble-class.d.ts +31 -0
- package/dist/types/service-bubble-class.d.ts.map +1 -0
- package/dist/types/service-bubble-class.js +36 -0
- package/dist/types/service-bubble-class.js.map +1 -0
- package/dist/types/streaming-events.d.ts +18 -0
- package/dist/types/streaming-events.d.ts.map +1 -0
- package/dist/types/streaming-events.js +5 -0
- package/dist/types/streaming-events.js.map +1 -0
- package/dist/types/tool-bubble-class.d.ts +19 -0
- package/dist/types/tool-bubble-class.d.ts.map +1 -0
- package/dist/types/tool-bubble-class.js +48 -0
- package/dist/types/tool-bubble-class.js.map +1 -0
- package/dist/types/workflow-bubble-class.d.ts +25 -0
- package/dist/types/workflow-bubble-class.d.ts.map +1 -0
- package/dist/types/workflow-bubble-class.js +30 -0
- package/dist/types/workflow-bubble-class.js.map +1 -0
- package/dist/utils/bubbleflow-parser.d.ts +32 -0
- package/dist/utils/bubbleflow-parser.d.ts.map +1 -0
- package/dist/utils/bubbleflow-parser.js +332 -0
- package/dist/utils/bubbleflow-parser.js.map +1 -0
- package/dist/utils/bubbleflow-validation.d.ts +9 -0
- package/dist/utils/bubbleflow-validation.d.ts.map +1 -0
- package/dist/utils/bubbleflow-validation.js +116 -0
- package/dist/utils/bubbleflow-validation.js.map +1 -0
- package/dist/utils/json-parsing.d.ts +20 -0
- package/dist/utils/json-parsing.d.ts.map +1 -0
- package/dist/utils/json-parsing.js +394 -0
- package/dist/utils/json-parsing.js.map +1 -0
- package/dist/utils/mock-data-generator.d.ts +43 -0
- package/dist/utils/mock-data-generator.d.ts.map +1 -0
- package/dist/utils/mock-data-generator.js +312 -0
- package/dist/utils/mock-data-generator.js.map +1 -0
- package/dist/utils/param-helper.d.ts +2 -0
- package/dist/utils/param-helper.d.ts.map +1 -0
- package/dist/utils/param-helper.js +5 -0
- package/dist/utils/param-helper.js.map +1 -0
- package/dist/utils/source-bubble-parser.d.ts +31 -0
- package/dist/utils/source-bubble-parser.d.ts.map +1 -0
- package/dist/utils/source-bubble-parser.js +231 -0
- package/dist/utils/source-bubble-parser.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1,394 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSON parsing utilities extracted from AI Agent for reusability and testing
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Strip markdown code fences and return inner content.
|
|
6
|
+
*/
|
|
7
|
+
function stripCodeFences(input) {
|
|
8
|
+
let s = input.trim();
|
|
9
|
+
// Remove fenced blocks entirely, keep inner JSON
|
|
10
|
+
s = s.replace(/```(?:json)?\s*\n?([\s\S]*?)\n?```/g, '$1');
|
|
11
|
+
s = s.replace(/^```json\s*/, '').replace(/\s*```[^\n]*$/, '');
|
|
12
|
+
return s.trim();
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Extract the first top-level JSON object/array from mixed text using a scanner
|
|
16
|
+
* that respects quotes and escaping.
|
|
17
|
+
*/
|
|
18
|
+
function extractTopLevelJson(input) {
|
|
19
|
+
const s = input;
|
|
20
|
+
let start = -1;
|
|
21
|
+
for (let i = 0; i < s.length; i++) {
|
|
22
|
+
const ch = s[i];
|
|
23
|
+
if (ch === '{' || ch === '[') {
|
|
24
|
+
start = i;
|
|
25
|
+
break;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
if (start === -1)
|
|
29
|
+
return null;
|
|
30
|
+
const stack = [];
|
|
31
|
+
let insideString = false;
|
|
32
|
+
let escapeNext = false;
|
|
33
|
+
let end = -1;
|
|
34
|
+
for (let i = start; i < s.length; i++) {
|
|
35
|
+
const ch = s[i];
|
|
36
|
+
if (insideString) {
|
|
37
|
+
if (escapeNext) {
|
|
38
|
+
escapeNext = false;
|
|
39
|
+
}
|
|
40
|
+
else if (ch === '\\') {
|
|
41
|
+
escapeNext = true;
|
|
42
|
+
}
|
|
43
|
+
else if (ch === '"') {
|
|
44
|
+
insideString = false;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
if (ch === '"') {
|
|
49
|
+
insideString = true;
|
|
50
|
+
}
|
|
51
|
+
else if (ch === '{') {
|
|
52
|
+
stack.push('object');
|
|
53
|
+
}
|
|
54
|
+
else if (ch === '[') {
|
|
55
|
+
stack.push('array');
|
|
56
|
+
}
|
|
57
|
+
else if (ch === '}') {
|
|
58
|
+
if (stack[stack.length - 1] === 'object')
|
|
59
|
+
stack.pop();
|
|
60
|
+
if (stack.length === 0) {
|
|
61
|
+
end = i;
|
|
62
|
+
break;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
else if (ch === ']') {
|
|
66
|
+
if (stack[stack.length - 1] === 'array')
|
|
67
|
+
stack.pop();
|
|
68
|
+
if (stack.length === 0) {
|
|
69
|
+
end = i;
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
if (end !== -1) {
|
|
76
|
+
return s.slice(start, end + 1);
|
|
77
|
+
}
|
|
78
|
+
// If not properly closed, return from start to end and let post-processing fix it
|
|
79
|
+
return s.slice(start);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* State-machine pass to escape problematic quotes and control chars inside strings.
|
|
83
|
+
* Heuristic: inside a string, a quote is considered an end if the next non-WS
|
|
84
|
+
* char is a valid JSON delimiter for the string type; otherwise, we escape it.
|
|
85
|
+
*/
|
|
86
|
+
function escapeProblematicQuotesAndControlChars(input) {
|
|
87
|
+
const out = [];
|
|
88
|
+
const scope = [];
|
|
89
|
+
let insideString = false;
|
|
90
|
+
let escapeNext = false;
|
|
91
|
+
let isKeyString = false;
|
|
92
|
+
let prevNonWS = null;
|
|
93
|
+
const isWhitespace = (c) => /\s/.test(c);
|
|
94
|
+
for (let i = 0; i < input.length; i++) {
|
|
95
|
+
const ch = input[i];
|
|
96
|
+
if (!insideString) {
|
|
97
|
+
if (ch === '{') {
|
|
98
|
+
scope.push('object');
|
|
99
|
+
out.push(ch);
|
|
100
|
+
prevNonWS = ch;
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
if (ch === '[') {
|
|
104
|
+
scope.push('array');
|
|
105
|
+
out.push(ch);
|
|
106
|
+
prevNonWS = ch;
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
if (ch === '}' || ch === ']') {
|
|
110
|
+
scope.pop();
|
|
111
|
+
out.push(ch);
|
|
112
|
+
prevNonWS = ch;
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
if (ch === '"') {
|
|
116
|
+
// Determine key vs value string
|
|
117
|
+
if (prevNonWS === ':') {
|
|
118
|
+
isKeyString = false;
|
|
119
|
+
}
|
|
120
|
+
else if (scope[scope.length - 1] === 'object' &&
|
|
121
|
+
(prevNonWS === '{' || prevNonWS === ',' || prevNonWS === null)) {
|
|
122
|
+
isKeyString = true;
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
// In arrays or after colon, consider as value string
|
|
126
|
+
isKeyString = false;
|
|
127
|
+
}
|
|
128
|
+
insideString = true;
|
|
129
|
+
out.push('"');
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
if (!isWhitespace(ch)) {
|
|
133
|
+
prevNonWS = ch;
|
|
134
|
+
}
|
|
135
|
+
out.push(ch);
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
// inside string
|
|
139
|
+
if (escapeNext) {
|
|
140
|
+
out.push(ch);
|
|
141
|
+
escapeNext = false;
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
if (ch === '\\') {
|
|
145
|
+
out.push('\\');
|
|
146
|
+
escapeNext = true;
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
if (ch === '"') {
|
|
150
|
+
// Peek next non-whitespace char
|
|
151
|
+
let j = i + 1;
|
|
152
|
+
let nextNonWS;
|
|
153
|
+
while (j < input.length) {
|
|
154
|
+
const c = input[j];
|
|
155
|
+
if (!isWhitespace(c)) {
|
|
156
|
+
nextNonWS = c;
|
|
157
|
+
break;
|
|
158
|
+
}
|
|
159
|
+
j++;
|
|
160
|
+
}
|
|
161
|
+
const validTerminator = isKeyString
|
|
162
|
+
? nextNonWS === ':'
|
|
163
|
+
: nextNonWS === ',' ||
|
|
164
|
+
nextNonWS === ']' ||
|
|
165
|
+
nextNonWS === '}' ||
|
|
166
|
+
nextNonWS === undefined;
|
|
167
|
+
if (validTerminator) {
|
|
168
|
+
insideString = false;
|
|
169
|
+
out.push('"');
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
// Treat as literal quote inside value string
|
|
173
|
+
out.push('\\"');
|
|
174
|
+
continue;
|
|
175
|
+
}
|
|
176
|
+
if (ch === '\n') {
|
|
177
|
+
out.push('\\n');
|
|
178
|
+
continue;
|
|
179
|
+
}
|
|
180
|
+
if (ch === '\r') {
|
|
181
|
+
out.push('\\r');
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
if (ch === '\t') {
|
|
185
|
+
out.push('\\t');
|
|
186
|
+
continue;
|
|
187
|
+
}
|
|
188
|
+
out.push(ch);
|
|
189
|
+
}
|
|
190
|
+
if (insideString) {
|
|
191
|
+
// Close any unterminated string
|
|
192
|
+
out.push('"');
|
|
193
|
+
}
|
|
194
|
+
return out.join('');
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Extract JSON from mixed text/JSON responses with robust cleanup
|
|
198
|
+
*/
|
|
199
|
+
export function extractAndCleanJSON(input) {
|
|
200
|
+
const stripped = stripCodeFences(input);
|
|
201
|
+
// Preferred: scan/extract top-level JSON
|
|
202
|
+
const scanned = extractTopLevelJson(stripped);
|
|
203
|
+
if (scanned) {
|
|
204
|
+
const cleaned = postProcessJSON(scanned);
|
|
205
|
+
try {
|
|
206
|
+
JSON.parse(cleaned);
|
|
207
|
+
return cleaned;
|
|
208
|
+
}
|
|
209
|
+
catch {
|
|
210
|
+
// continue
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
const trimmed = stripped.trim();
|
|
214
|
+
// Fallback: regex match for object/array
|
|
215
|
+
const jsonMatch = trimmed.match(/({[^{}]*(?:{[^{}]*}[^{}]*)*}|\[[^[\]]*(?:\[[^[\]]*\][^[\]]*)*\])/);
|
|
216
|
+
if (jsonMatch) {
|
|
217
|
+
const candidate = jsonMatch[1];
|
|
218
|
+
const cleaned = postProcessJSON(candidate);
|
|
219
|
+
try {
|
|
220
|
+
JSON.parse(cleaned);
|
|
221
|
+
return cleaned;
|
|
222
|
+
}
|
|
223
|
+
catch {
|
|
224
|
+
// Continue to other strategies
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
// Last fallback: slice from first brace/bracket and try to fix
|
|
228
|
+
const firstBracketIdx = trimmed.search(/[[{]/);
|
|
229
|
+
if (firstBracketIdx !== -1) {
|
|
230
|
+
const candidate = trimmed.slice(firstBracketIdx);
|
|
231
|
+
const cleaned = postProcessJSON(candidate);
|
|
232
|
+
try {
|
|
233
|
+
JSON.parse(cleaned);
|
|
234
|
+
return cleaned;
|
|
235
|
+
}
|
|
236
|
+
catch {
|
|
237
|
+
// Continue to other strategies
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
return null;
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Post-process potentially malformed JSON string to fix common issues
|
|
244
|
+
*/
|
|
245
|
+
export function postProcessJSON(jsonString) {
|
|
246
|
+
let processed = jsonString.trim();
|
|
247
|
+
// Remove markdown code blocks if present
|
|
248
|
+
processed = stripCodeFences(processed);
|
|
249
|
+
// Remove trailing backslashes and other non-JSON characters after closing braces/brackets
|
|
250
|
+
processed = processed.replace(/([}\]])\s*\\+[^\n]*$/g, '$1');
|
|
251
|
+
// Remove common prefixes that AI might add
|
|
252
|
+
processed = processed
|
|
253
|
+
.replace(/^(?:Here's|Here is|The JSON is|Result:|Answer:)\s*:?\s*/i, '')
|
|
254
|
+
.replace(/^(?:the result|the response|response|result)\s*:?\s*/i, '')
|
|
255
|
+
.replace(/^["']?\s*/, '') // Remove leading quotes/spaces
|
|
256
|
+
.replace(/\s*["']?$/, ''); // Remove trailing quotes/spaces
|
|
257
|
+
// Fix unquoted keys first (before dealing with quotes)
|
|
258
|
+
processed = processed.replace(/([{,]\s*)([a-zA-Z_$][a-zA-Z0-9_$]*)(\s*):/g, '$1"$2"$3:');
|
|
259
|
+
// Remove trailing commas before closing brackets/braces
|
|
260
|
+
processed = processed.replace(/,\s*(?=[}\]])/g, '');
|
|
261
|
+
// Only convert single-quoted strings to double-quoted strings if the ENTIRE JSON uses single quotes
|
|
262
|
+
// We detect this by checking if there are more single-quoted keys/values than double-quoted ones
|
|
263
|
+
const singleQuotedPattern = /:\s*'[^']*'/g;
|
|
264
|
+
const doubleQuotedPattern = /:\s*"[^"]*"/g;
|
|
265
|
+
const singleQuoteCount = (processed.match(singleQuotedPattern) || []).length;
|
|
266
|
+
const doubleQuoteCount = (processed.match(doubleQuotedPattern) || []).length;
|
|
267
|
+
// Only do global single-quote replacement if it looks like the JSON is using single quotes throughout
|
|
268
|
+
if (singleQuoteCount > doubleQuoteCount && singleQuoteCount > 2) {
|
|
269
|
+
processed = processed.replace(/(^|:|\[|,|\{)\s*'([^'\\]*(?:\\.[^'\\]*)*)'/g, '$1"$2"');
|
|
270
|
+
}
|
|
271
|
+
// Escape problematic quotes and control chars in strings via state machine
|
|
272
|
+
processed = escapeProblematicQuotesAndControlChars(processed);
|
|
273
|
+
// Remove trailing commas before closing brackets/braces again after quote fixes
|
|
274
|
+
processed = processed.replace(/,\s*(?=[}\]])/g, '');
|
|
275
|
+
// Remove control characters that can break JSON
|
|
276
|
+
// eslint-disable-next-line no-control-regex
|
|
277
|
+
processed = processed.replace(/[\x00-\x08\x0B-\x0C\x0E-\x1F\x7F]/g, '');
|
|
278
|
+
// Remove any trailing non-JSON content (like explanatory text after JSON)
|
|
279
|
+
const lastObj = processed.lastIndexOf('}');
|
|
280
|
+
const lastArr = processed.lastIndexOf(']');
|
|
281
|
+
const lastClose = Math.max(lastObj, lastArr);
|
|
282
|
+
if (lastClose !== -1) {
|
|
283
|
+
processed = processed.slice(0, lastClose + 1);
|
|
284
|
+
}
|
|
285
|
+
// Attempt to balance brackets and braces more intelligently
|
|
286
|
+
const openBraces = (processed.match(/{/g) || []).length;
|
|
287
|
+
const closeBraces = (processed.match(/}/g) || []).length;
|
|
288
|
+
const openBrackets = (processed.match(/\[/g) || []).length;
|
|
289
|
+
const closeBrackets = (processed.match(/]/g) || []).length;
|
|
290
|
+
// Add missing closing braces/brackets, but only if the string looks like it should have them
|
|
291
|
+
if (openBraces > closeBraces && processed.includes('{')) {
|
|
292
|
+
// Only add closing braces if the string starts with { or contains proper object structure
|
|
293
|
+
if (processed.trim().startsWith('{') || processed.includes('":')) {
|
|
294
|
+
// For nested structures, we need to be more careful about the order
|
|
295
|
+
// First close inner structures, then outer ones
|
|
296
|
+
const missingBraces = openBraces - closeBraces;
|
|
297
|
+
const missingBrackets = openBrackets - closeBrackets;
|
|
298
|
+
// If we have both missing braces and brackets, close brackets first (inner structures)
|
|
299
|
+
if (missingBrackets > 0 && processed.includes('[')) {
|
|
300
|
+
processed += ']'.repeat(missingBrackets);
|
|
301
|
+
}
|
|
302
|
+
// Then close braces
|
|
303
|
+
processed += '}'.repeat(missingBraces);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
else if (openBrackets > closeBrackets && processed.includes('[')) {
|
|
307
|
+
// Only add closing brackets if the string starts with [ or contains array structure
|
|
308
|
+
if (processed.trim().startsWith('[') || processed.includes('[')) {
|
|
309
|
+
processed += ']'.repeat(openBrackets - closeBrackets);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
// Remove excess closing braces/brackets
|
|
313
|
+
if (closeBraces > openBraces) {
|
|
314
|
+
const excess = closeBraces - openBraces;
|
|
315
|
+
for (let i = 0; i < excess; i++) {
|
|
316
|
+
processed = processed.replace(/}\s*$/, '');
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
if (closeBrackets > openBrackets) {
|
|
320
|
+
const excess = closeBrackets - openBrackets;
|
|
321
|
+
for (let i = 0; i < excess; i++) {
|
|
322
|
+
processed = processed.replace(/]\s*$/, '');
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
return processed;
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Multi-stage JSON parsing approach with various fallback strategies
|
|
329
|
+
*/
|
|
330
|
+
export function parseJsonWithFallbacks(finalResponse) {
|
|
331
|
+
const attempts = [
|
|
332
|
+
// Attempt 1: Try parsing the original response as-is
|
|
333
|
+
() => {
|
|
334
|
+
JSON.parse(finalResponse);
|
|
335
|
+
return finalResponse;
|
|
336
|
+
},
|
|
337
|
+
// Attempt 2: Strip code fences, scan-extract, then post-process
|
|
338
|
+
() => {
|
|
339
|
+
const stripped = stripCodeFences(finalResponse);
|
|
340
|
+
const scanned = extractTopLevelJson(stripped);
|
|
341
|
+
if (!scanned)
|
|
342
|
+
throw new Error('No valid JSON found');
|
|
343
|
+
const cleaned = postProcessJSON(scanned);
|
|
344
|
+
JSON.parse(cleaned);
|
|
345
|
+
return cleaned;
|
|
346
|
+
},
|
|
347
|
+
// Attempt 3: Try basic post-processing on original
|
|
348
|
+
() => {
|
|
349
|
+
const processed = postProcessJSON(finalResponse);
|
|
350
|
+
JSON.parse(processed);
|
|
351
|
+
return processed;
|
|
352
|
+
},
|
|
353
|
+
// Attempt 4: Last resort - try to wrap in object if it looks like key-value content
|
|
354
|
+
() => {
|
|
355
|
+
const trimmed = finalResponse.trim();
|
|
356
|
+
if (trimmed && !trimmed.startsWith('{') && !trimmed.startsWith('[')) {
|
|
357
|
+
// If it contains key-like patterns, try wrapping in object
|
|
358
|
+
if (trimmed.includes(':') && !trimmed.includes('\n\n')) {
|
|
359
|
+
const wrapped = `{${trimmed}}`;
|
|
360
|
+
const processed = postProcessJSON(wrapped);
|
|
361
|
+
JSON.parse(processed);
|
|
362
|
+
return processed;
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
throw new Error('Cannot convert to valid JSON');
|
|
366
|
+
},
|
|
367
|
+
];
|
|
368
|
+
let lastError = null;
|
|
369
|
+
for (let i = 0; i < attempts.length; i++) {
|
|
370
|
+
try {
|
|
371
|
+
const result = attempts[i]();
|
|
372
|
+
if (i > 0) {
|
|
373
|
+
console.log(`[JSON Parser] Parsing successful on attempt ${i + 1}`);
|
|
374
|
+
}
|
|
375
|
+
return { response: result, error: undefined, success: true };
|
|
376
|
+
}
|
|
377
|
+
catch (error) {
|
|
378
|
+
lastError =
|
|
379
|
+
error instanceof Error ? error : new Error('Unknown parsing error');
|
|
380
|
+
console.warn(`[JSON Parser] Parsing attempt ${i + 1} failed:`, lastError.message);
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
// All attempts failed
|
|
384
|
+
console.warn('[JSON Parser] All JSON parsing attempts failed');
|
|
385
|
+
console.warn('[JSON Parser] Original response:', finalResponse);
|
|
386
|
+
// Try to provide the best available response even if not valid JSON
|
|
387
|
+
const lastAttempt = extractAndCleanJSON(finalResponse) || postProcessJSON(finalResponse);
|
|
388
|
+
return {
|
|
389
|
+
response: lastAttempt,
|
|
390
|
+
error: `AI Agent failed to generate valid JSON. Post-processing attempted but JSON is still malformed: ${lastError?.message || 'Unknown error'}`,
|
|
391
|
+
success: false,
|
|
392
|
+
};
|
|
393
|
+
}
|
|
394
|
+
//# sourceMappingURL=json-parsing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-parsing.js","sourceRoot":"","sources":["../../src/utils/json-parsing.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,SAAS,eAAe,CAAC,KAAa;IACpC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IACrB,iDAAiD;IACjD,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,qCAAqC,EAAE,IAAI,CAAC,CAAC;IAC3D,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;IAC9D,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,SAAS,mBAAmB,CAAC,KAAa;IACxC,MAAM,CAAC,GAAG,KAAK,CAAC;IAChB,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;IACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAChB,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YAC7B,KAAK,GAAG,CAAC,CAAC;YACV,MAAM;QACR,CAAC;IACH,CAAC;IACD,IAAI,KAAK,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAE9B,MAAM,KAAK,GAA8B,EAAE,CAAC;IAC5C,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;IAEb,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAChB,IAAI,YAAY,EAAE,CAAC;YACjB,IAAI,UAAU,EAAE,CAAC;gBACf,UAAU,GAAG,KAAK,CAAC;YACrB,CAAC;iBAAM,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;gBACvB,UAAU,GAAG,IAAI,CAAC;YACpB,CAAC;iBAAM,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBACtB,YAAY,GAAG,KAAK,CAAC;YACvB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBACf,YAAY,GAAG,IAAI,CAAC;YACtB,CAAC;iBAAM,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBACtB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvB,CAAC;iBAAM,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBACtB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACtB,CAAC;iBAAM,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBACtB,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,QAAQ;oBAAE,KAAK,CAAC,GAAG,EAAE,CAAC;gBACtD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACvB,GAAG,GAAG,CAAC,CAAC;oBACR,MAAM;gBACR,CAAC;YACH,CAAC;iBAAM,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBACtB,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,OAAO;oBAAE,KAAK,CAAC,GAAG,EAAE,CAAC;gBACrD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACvB,GAAG,GAAG,CAAC,CAAC;oBACR,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;QACf,OAAO,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;IACjC,CAAC;IAED,kFAAkF;IAClF,OAAO,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACxB,CAAC;AAED;;;;GAIG;AACH,SAAS,sCAAsC,CAAC,KAAa;IAC3D,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,KAAK,GAA8B,EAAE,CAAC;IAC5C,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,IAAI,SAAS,GAAkB,IAAI,CAAC;IAEpC,MAAM,YAAY,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAEjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAEpB,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBACf,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACrB,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACb,SAAS,GAAG,EAAE,CAAC;gBACf,SAAS;YACX,CAAC;YACD,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBACf,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACpB,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACb,SAAS,GAAG,EAAE,CAAC;gBACf,SAAS;YACX,CAAC;YACD,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBAC7B,KAAK,CAAC,GAAG,EAAE,CAAC;gBACZ,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACb,SAAS,GAAG,EAAE,CAAC;gBACf,SAAS;YACX,CAAC;YACD,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBACf,gCAAgC;gBAChC,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;oBACtB,WAAW,GAAG,KAAK,CAAC;gBACtB,CAAC;qBAAM,IACL,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,QAAQ;oBACpC,CAAC,SAAS,KAAK,GAAG,IAAI,SAAS,KAAK,GAAG,IAAI,SAAS,KAAK,IAAI,CAAC,EAC9D,CAAC;oBACD,WAAW,GAAG,IAAI,CAAC;gBACrB,CAAC;qBAAM,CAAC;oBACN,qDAAqD;oBACrD,WAAW,GAAG,KAAK,CAAC;gBACtB,CAAC;gBACD,YAAY,GAAG,IAAI,CAAC;gBACpB,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACd,SAAS;YACX,CAAC;YACD,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC;gBACtB,SAAS,GAAG,EAAE,CAAC;YACjB,CAAC;YACD,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACb,SAAS;QACX,CAAC;QAED,gBAAgB;QAChB,IAAI,UAAU,EAAE,CAAC;YACf,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACb,UAAU,GAAG,KAAK,CAAC;YACnB,SAAS;QACX,CAAC;QACD,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YAChB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACf,UAAU,GAAG,IAAI,CAAC;YAClB,SAAS;QACX,CAAC;QACD,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YACf,gCAAgC;YAChC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,IAAI,SAA6B,CAAC;YAClC,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;gBACxB,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACnB,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrB,SAAS,GAAG,CAAC,CAAC;oBACd,MAAM;gBACR,CAAC;gBACD,CAAC,EAAE,CAAC;YACN,CAAC;YACD,MAAM,eAAe,GAAG,WAAW;gBACjC,CAAC,CAAC,SAAS,KAAK,GAAG;gBACnB,CAAC,CAAC,SAAS,KAAK,GAAG;oBACjB,SAAS,KAAK,GAAG;oBACjB,SAAS,KAAK,GAAG;oBACjB,SAAS,KAAK,SAAS,CAAC;YAC5B,IAAI,eAAe,EAAE,CAAC;gBACpB,YAAY,GAAG,KAAK,CAAC;gBACrB,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACd,SAAS;YACX,CAAC;YACD,6CAA6C;YAC7C,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChB,SAAS;QACX,CAAC;QACD,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YAChB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChB,SAAS;QACX,CAAC;QACD,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YAChB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChB,SAAS;QACX,CAAC;QACD,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YAChB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChB,SAAS;QACX,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,CAAC;IAED,IAAI,YAAY,EAAE,CAAC;QACjB,gCAAgC;QAChC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChB,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IAExC,yCAAyC;IACzC,MAAM,OAAO,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAC9C,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACpB,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,MAAM,CAAC;YACP,WAAW;QACb,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IAEhC,yCAAyC;IACzC,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAC7B,kEAAkE,CACnE,CAAC;IACF,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,OAAO,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACpB,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,MAAM,CAAC;YACP,+BAA+B;QACjC,CAAC;IACH,CAAC;IAED,+DAA+D;IAC/D,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/C,IAAI,eAAe,KAAK,CAAC,CAAC,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACpB,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,MAAM,CAAC;YACP,+BAA+B;QACjC,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,UAAkB;IAChD,IAAI,SAAS,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;IAElC,yCAAyC;IACzC,SAAS,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAEvC,0FAA0F;IAC1F,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,uBAAuB,EAAE,IAAI,CAAC,CAAC;IAE7D,2CAA2C;IAC3C,SAAS,GAAG,SAAS;SAClB,OAAO,CAAC,0DAA0D,EAAE,EAAE,CAAC;SACvE,OAAO,CAAC,uDAAuD,EAAE,EAAE,CAAC;SACpE,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,+BAA+B;SACxD,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,gCAAgC;IAE7D,uDAAuD;IACvD,SAAS,GAAG,SAAS,CAAC,OAAO,CAC3B,4CAA4C,EAC5C,WAAW,CACZ,CAAC;IAEF,wDAAwD;IACxD,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;IAEpD,oGAAoG;IACpG,iGAAiG;IACjG,MAAM,mBAAmB,GAAG,cAAc,CAAC;IAC3C,MAAM,mBAAmB,GAAG,cAAc,CAAC;IAC3C,MAAM,gBAAgB,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;IAC7E,MAAM,gBAAgB,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;IAE7E,sGAAsG;IACtG,IAAI,gBAAgB,GAAG,gBAAgB,IAAI,gBAAgB,GAAG,CAAC,EAAE,CAAC;QAChE,SAAS,GAAG,SAAS,CAAC,OAAO,CAC3B,6CAA6C,EAC7C,QAAQ,CACT,CAAC;IACJ,CAAC;IAED,2EAA2E;IAC3E,SAAS,GAAG,sCAAsC,CAAC,SAAS,CAAC,CAAC;IAE9D,gFAAgF;IAChF,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;IAEpD,gDAAgD;IAChD,4CAA4C;IAC5C,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,oCAAoC,EAAE,EAAE,CAAC,CAAC;IAExE,0EAA0E;IAC1E,MAAM,OAAO,GAAG,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7C,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;QACrB,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,4DAA4D;IAC5D,MAAM,UAAU,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;IACxD,MAAM,WAAW,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;IACzD,MAAM,YAAY,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;IAC3D,MAAM,aAAa,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;IAE3D,6FAA6F;IAC7F,IAAI,UAAU,GAAG,WAAW,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACxD,0FAA0F;QAC1F,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACjE,oEAAoE;YACpE,gDAAgD;YAChD,MAAM,aAAa,GAAG,UAAU,GAAG,WAAW,CAAC;YAC/C,MAAM,eAAe,GAAG,YAAY,GAAG,aAAa,CAAC;YAErD,uFAAuF;YACvF,IAAI,eAAe,GAAG,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnD,SAAS,IAAI,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;YAC3C,CAAC;YAED,oBAAoB;YACpB,SAAS,IAAI,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;SAAM,IAAI,YAAY,GAAG,aAAa,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACnE,oFAAoF;QACpF,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAChE,SAAS,IAAI,GAAG,CAAC,MAAM,CAAC,YAAY,GAAG,aAAa,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED,wCAAwC;IACxC,IAAI,WAAW,GAAG,UAAU,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,WAAW,GAAG,UAAU,CAAC;QACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChC,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IACD,IAAI,aAAa,GAAG,YAAY,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,aAAa,GAAG,YAAY,CAAC;QAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChC,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,aAAqB;IAK1D,MAAM,QAAQ,GAAG;QACf,qDAAqD;QACrD,GAAG,EAAE;YACH,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAC1B,OAAO,aAAa,CAAC;QACvB,CAAC;QACD,gEAAgE;QAChE,GAAG,EAAE;YACH,MAAM,QAAQ,GAAG,eAAe,CAAC,aAAa,CAAC,CAAC;YAChD,MAAM,OAAO,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;YAC9C,IAAI,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;YACrD,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;YACzC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACpB,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,mDAAmD;QACnD,GAAG,EAAE;YACH,MAAM,SAAS,GAAG,eAAe,CAAC,aAAa,CAAC,CAAC;YACjD,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACtB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,oFAAoF;QACpF,GAAG,EAAE;YACH,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,EAAE,CAAC;YACrC,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpE,2DAA2D;gBAC3D,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBACvD,MAAM,OAAO,GAAG,IAAI,OAAO,GAAG,CAAC;oBAC/B,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;oBAC3C,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;oBACtB,OAAO,SAAS,CAAC;gBACnB,CAAC;YACH,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAClD,CAAC;KACF,CAAC;IAEF,IAAI,SAAS,GAAiB,IAAI,CAAC;IAEnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACV,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACtE,CAAC;YACD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC/D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,SAAS;gBACP,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;YACtE,OAAO,CAAC,IAAI,CACV,iCAAiC,CAAC,GAAG,CAAC,UAAU,EAChD,SAAS,CAAC,OAAO,CAClB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,sBAAsB;IACtB,OAAO,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;IAC/D,OAAO,CAAC,IAAI,CAAC,kCAAkC,EAAE,aAAa,CAAC,CAAC;IAEhE,oEAAoE;IACpE,MAAM,WAAW,GACf,mBAAmB,CAAC,aAAa,CAAC,IAAI,eAAe,CAAC,aAAa,CAAC,CAAC;IAEvE,OAAO;QACL,QAAQ,EAAE,WAAW;QACrB,KAAK,EAAE,kGAAkG,SAAS,EAAE,OAAO,IAAI,eAAe,EAAE;QAChJ,OAAO,EAAE,KAAK;KACf,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { BubbleResult, BubbleOperationResult } from '../types/bubble.js';
|
|
3
|
+
/**
|
|
4
|
+
* Utility class for generating mock data from Zod schemas
|
|
5
|
+
* Useful for testing, development, and creating sample data
|
|
6
|
+
*/
|
|
7
|
+
export declare class MockDataGenerator {
|
|
8
|
+
/**
|
|
9
|
+
* Generate a complete mock BubbleResult from a result schema
|
|
10
|
+
*/
|
|
11
|
+
static generateMockResult<TResult extends BubbleOperationResult>(resultSchema: z.ZodObject<z.ZodRawShape>): BubbleResult<TResult>;
|
|
12
|
+
/**
|
|
13
|
+
* Generate mock data from JSON Schema
|
|
14
|
+
* Converts JSON Schema to mock data with realistic values
|
|
15
|
+
*/
|
|
16
|
+
static generateMockFromJsonSchema(jsonSchema: Record<string, unknown>): Record<string, unknown>;
|
|
17
|
+
/**
|
|
18
|
+
* Generate a mock value for a specific JSON Schema property
|
|
19
|
+
*/
|
|
20
|
+
static generateMockValueFromJsonSchema(schema: Record<string, unknown>): unknown;
|
|
21
|
+
/**
|
|
22
|
+
* Generate mock data object from a Zod schema
|
|
23
|
+
* Recursively handles nested objects, arrays, and primitive types
|
|
24
|
+
*/
|
|
25
|
+
static generateMockFromSchema(schema: z.ZodObject<z.ZodRawShape>): Record<string, unknown>;
|
|
26
|
+
/**
|
|
27
|
+
* Generate a mock value for a specific Zod type
|
|
28
|
+
*/
|
|
29
|
+
static generateMockValue(zodType: z.ZodTypeAny): unknown;
|
|
30
|
+
/**
|
|
31
|
+
* Generate mock string values with format-specific handling
|
|
32
|
+
*/
|
|
33
|
+
private static generateMockString;
|
|
34
|
+
/**
|
|
35
|
+
* Generate mock number values respecting constraints
|
|
36
|
+
*/
|
|
37
|
+
private static generateMockNumber;
|
|
38
|
+
/**
|
|
39
|
+
* Generate mock data with custom seed for reproducible results
|
|
40
|
+
*/
|
|
41
|
+
static generateMockWithSeed<TResult extends BubbleOperationResult>(resultSchema: z.ZodObject<z.ZodRawShape>, seed: number): BubbleResult<TResult>;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=mock-data-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-data-generator.d.ts","sourceRoot":"","sources":["../../src/utils/mock-data-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE9E;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B;;OAEG;IACH,MAAM,CAAC,kBAAkB,CAAC,OAAO,SAAS,qBAAqB,EAC7D,YAAY,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,GACvC,YAAY,CAAC,OAAO,CAAC;IAYxB;;;OAGG;IACH,MAAM,CAAC,0BAA0B,CAC/B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IA0B1B;;OAEG;IACH,MAAM,CAAC,+BAA+B,CACpC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO;IAwEV;;;OAGG;IACH,MAAM,CAAC,sBAAsB,CAC3B,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,GACjC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IA0B1B;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC,CAAC,UAAU,GAAG,OAAO;IA0HxD;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAoCjC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IA4BjC;;OAEG;IACH,MAAM,CAAC,oBAAoB,CAAC,OAAO,SAAS,qBAAqB,EAC/D,YAAY,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,EACxC,IAAI,EAAE,MAAM,GACX,YAAY,CAAC,OAAO,CAAC;CAmBzB"}
|