@codebakers/mcp 5.2.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/INSTALL.md +221 -0
- package/LICENSE +21 -0
- package/README.md +412 -0
- package/dist/cli.d.ts +9 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +236 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +526 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/analyze-mockups.d.ts +18 -0
- package/dist/tools/analyze-mockups.d.ts.map +1 -0
- package/dist/tools/analyze-mockups.js +497 -0
- package/dist/tools/analyze-mockups.js.map +1 -0
- package/dist/tools/autonomous-build.d.ts +19 -0
- package/dist/tools/autonomous-build.d.ts.map +1 -0
- package/dist/tools/autonomous-build.js +287 -0
- package/dist/tools/autonomous-build.js.map +1 -0
- package/dist/tools/check-gate.d.ts +21 -0
- package/dist/tools/check-gate.d.ts.map +1 -0
- package/dist/tools/check-gate.js +446 -0
- package/dist/tools/check-gate.js.map +1 -0
- package/dist/tools/check-scope.d.ts +22 -0
- package/dist/tools/check-scope.d.ts.map +1 -0
- package/dist/tools/check-scope.js +251 -0
- package/dist/tools/check-scope.js.map +1 -0
- package/dist/tools/deploy-vercel.d.ts +18 -0
- package/dist/tools/deploy-vercel.d.ts.map +1 -0
- package/dist/tools/deploy-vercel.js +178 -0
- package/dist/tools/deploy-vercel.js.map +1 -0
- package/dist/tools/diagnose-error.d.ts +20 -0
- package/dist/tools/diagnose-error.d.ts.map +1 -0
- package/dist/tools/diagnose-error.js +351 -0
- package/dist/tools/diagnose-error.js.map +1 -0
- package/dist/tools/enforce-feature.d.ts +25 -0
- package/dist/tools/enforce-feature.d.ts.map +1 -0
- package/dist/tools/enforce-feature.js +387 -0
- package/dist/tools/enforce-feature.js.map +1 -0
- package/dist/tools/execute-atomic-unit.d.ts +23 -0
- package/dist/tools/execute-atomic-unit.d.ts.map +1 -0
- package/dist/tools/execute-atomic-unit.js +107 -0
- package/dist/tools/execute-atomic-unit.js.map +1 -0
- package/dist/tools/fix-commit.d.ts +23 -0
- package/dist/tools/fix-commit.d.ts.map +1 -0
- package/dist/tools/fix-commit.js +213 -0
- package/dist/tools/fix-commit.js.map +1 -0
- package/dist/tools/fix-mockups.d.ts +21 -0
- package/dist/tools/fix-mockups.d.ts.map +1 -0
- package/dist/tools/fix-mockups.js +595 -0
- package/dist/tools/fix-mockups.js.map +1 -0
- package/dist/tools/generate-api-route.d.ts +18 -0
- package/dist/tools/generate-api-route.d.ts.map +1 -0
- package/dist/tools/generate-api-route.js +212 -0
- package/dist/tools/generate-api-route.js.map +1 -0
- package/dist/tools/generate-chatbot.d.ts +20 -0
- package/dist/tools/generate-chatbot.d.ts.map +1 -0
- package/dist/tools/generate-chatbot.js +555 -0
- package/dist/tools/generate-chatbot.js.map +1 -0
- package/dist/tools/generate-component.d.ts +18 -0
- package/dist/tools/generate-component.d.ts.map +1 -0
- package/dist/tools/generate-component.js +159 -0
- package/dist/tools/generate-component.js.map +1 -0
- package/dist/tools/generate-docs.d.ts +21 -0
- package/dist/tools/generate-docs.d.ts.map +1 -0
- package/dist/tools/generate-docs.js +782 -0
- package/dist/tools/generate-docs.js.map +1 -0
- package/dist/tools/generate-e2e-tests.d.ts +12 -0
- package/dist/tools/generate-e2e-tests.d.ts.map +1 -0
- package/dist/tools/generate-e2e-tests.js +37 -0
- package/dist/tools/generate-e2e-tests.js.map +1 -0
- package/dist/tools/generate-migration.d.ts +21 -0
- package/dist/tools/generate-migration.d.ts.map +1 -0
- package/dist/tools/generate-migration.js +94 -0
- package/dist/tools/generate-migration.js.map +1 -0
- package/dist/tools/generate-schema.d.ts +18 -0
- package/dist/tools/generate-schema.d.ts.map +1 -0
- package/dist/tools/generate-schema.js +422 -0
- package/dist/tools/generate-schema.js.map +1 -0
- package/dist/tools/generate-spec.d.ts +18 -0
- package/dist/tools/generate-spec.d.ts.map +1 -0
- package/dist/tools/generate-spec.js +446 -0
- package/dist/tools/generate-spec.js.map +1 -0
- package/dist/tools/generate-store-contracts.d.ts +17 -0
- package/dist/tools/generate-store-contracts.d.ts.map +1 -0
- package/dist/tools/generate-store-contracts.js +356 -0
- package/dist/tools/generate-store-contracts.js.map +1 -0
- package/dist/tools/generate-store.d.ts +16 -0
- package/dist/tools/generate-store.d.ts.map +1 -0
- package/dist/tools/generate-store.js +166 -0
- package/dist/tools/generate-store.js.map +1 -0
- package/dist/tools/generate-unit-tests.d.ts +14 -0
- package/dist/tools/generate-unit-tests.d.ts.map +1 -0
- package/dist/tools/generate-unit-tests.js +85 -0
- package/dist/tools/generate-unit-tests.js.map +1 -0
- package/dist/tools/get-context.d.ts +35 -0
- package/dist/tools/get-context.d.ts.map +1 -0
- package/dist/tools/get-context.js +367 -0
- package/dist/tools/get-context.js.map +1 -0
- package/dist/tools/init-session.d.ts +22 -0
- package/dist/tools/init-session.d.ts.map +1 -0
- package/dist/tools/init-session.js +232 -0
- package/dist/tools/init-session.js.map +1 -0
- package/dist/tools/map-dependencies.d.ts +25 -0
- package/dist/tools/map-dependencies.d.ts.map +1 -0
- package/dist/tools/map-dependencies.js +480 -0
- package/dist/tools/map-dependencies.js.map +1 -0
- package/dist/tools/optimize-performance.d.ts +18 -0
- package/dist/tools/optimize-performance.d.ts.map +1 -0
- package/dist/tools/optimize-performance.js +285 -0
- package/dist/tools/optimize-performance.js.map +1 -0
- package/dist/tools/run-interview.d.ts +23 -0
- package/dist/tools/run-interview.d.ts.map +1 -0
- package/dist/tools/run-interview.js +371 -0
- package/dist/tools/run-interview.js.map +1 -0
- package/dist/tools/run-tests.d.ts +12 -0
- package/dist/tools/run-tests.d.ts.map +1 -0
- package/dist/tools/run-tests.js +30 -0
- package/dist/tools/run-tests.js.map +1 -0
- package/dist/tools/scan-security.d.ts +19 -0
- package/dist/tools/scan-security.d.ts.map +1 -0
- package/dist/tools/scan-security.js +358 -0
- package/dist/tools/scan-security.js.map +1 -0
- package/dist/tools/validate-accessibility.d.ts +18 -0
- package/dist/tools/validate-accessibility.d.ts.map +1 -0
- package/dist/tools/validate-accessibility.js +251 -0
- package/dist/tools/validate-accessibility.js.map +1 -0
- package/dist/tools/validate-mockups.d.ts +21 -0
- package/dist/tools/validate-mockups.d.ts.map +1 -0
- package/dist/tools/validate-mockups.js +433 -0
- package/dist/tools/validate-mockups.js.map +1 -0
- package/dist/tools/verify-completeness.d.ts +13 -0
- package/dist/tools/verify-completeness.d.ts.map +1 -0
- package/dist/tools/verify-completeness.js +68 -0
- package/dist/tools/verify-completeness.js.map +1 -0
- package/dist/tools/verify-mockups.d.ts +14 -0
- package/dist/tools/verify-mockups.d.ts.map +1 -0
- package/dist/tools/verify-mockups.js +85 -0
- package/dist/tools/verify-mockups.js.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* codebakers_generate_api_route
|
|
3
|
+
*
|
|
4
|
+
* API Route Generator
|
|
5
|
+
*
|
|
6
|
+
* Generates Next.js API routes with:
|
|
7
|
+
* - Supabase integration
|
|
8
|
+
* - Security filters (user_id)
|
|
9
|
+
* - Error handling
|
|
10
|
+
* - TypeScript types
|
|
11
|
+
*/
|
|
12
|
+
import * as fs from 'fs/promises';
|
|
13
|
+
import * as path from 'path';
|
|
14
|
+
export async function generateApiRoute(args) {
|
|
15
|
+
const cwd = process.cwd();
|
|
16
|
+
const { entity, operation } = args;
|
|
17
|
+
const tableName = entity.toLowerCase() + 's';
|
|
18
|
+
const routePath = operation === 'list' || operation === 'create'
|
|
19
|
+
? `src/app/api/${tableName}/route.ts`
|
|
20
|
+
: `src/app/api/${tableName}/[id]/route.ts`;
|
|
21
|
+
let code = '';
|
|
22
|
+
if (operation === 'list') {
|
|
23
|
+
code = generateListRoute(entity, tableName);
|
|
24
|
+
}
|
|
25
|
+
else if (operation === 'get') {
|
|
26
|
+
code = generateGetRoute(entity, tableName);
|
|
27
|
+
}
|
|
28
|
+
else if (operation === 'create') {
|
|
29
|
+
code = generateCreateRoute(entity, tableName);
|
|
30
|
+
}
|
|
31
|
+
else if (operation === 'update') {
|
|
32
|
+
code = generateUpdateRoute(entity, tableName);
|
|
33
|
+
}
|
|
34
|
+
else if (operation === 'delete') {
|
|
35
|
+
code = generateDeleteRoute(entity, tableName);
|
|
36
|
+
}
|
|
37
|
+
const fullPath = path.join(cwd, routePath);
|
|
38
|
+
await fs.mkdir(path.dirname(fullPath), { recursive: true });
|
|
39
|
+
await fs.writeFile(fullPath, code, 'utf-8');
|
|
40
|
+
return `🍞 CodeBakers: API Route Generated
|
|
41
|
+
|
|
42
|
+
**File:** ${routePath}
|
|
43
|
+
**Entity:** ${entity}
|
|
44
|
+
**Operation:** ${operation}
|
|
45
|
+
|
|
46
|
+
Includes:
|
|
47
|
+
✅ Authentication check
|
|
48
|
+
✅ Security filter (user_id)
|
|
49
|
+
✅ Error handling
|
|
50
|
+
✅ TypeScript types
|
|
51
|
+
✅ Supabase integration
|
|
52
|
+
✅ Uses .maybeSingle() (not .single())`;
|
|
53
|
+
}
|
|
54
|
+
function generateListRoute(entity, table) {
|
|
55
|
+
return `import { createClient } from '@/lib/supabase/server';
|
|
56
|
+
import { NextRequest, NextResponse } from 'next/server';
|
|
57
|
+
|
|
58
|
+
export async function GET(req: NextRequest) {
|
|
59
|
+
const supabase = createClient();
|
|
60
|
+
|
|
61
|
+
const { data: { user } } = await supabase.auth.getUser();
|
|
62
|
+
if (!user) {
|
|
63
|
+
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const { data, error } = await supabase
|
|
67
|
+
.from('${table}')
|
|
68
|
+
.select('*')
|
|
69
|
+
.eq('user_id', user.id)
|
|
70
|
+
.order('created_at', { ascending: false });
|
|
71
|
+
|
|
72
|
+
if (error) {
|
|
73
|
+
return NextResponse.json({ error: error.message }, { status: 500 });
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
return NextResponse.json({ data });
|
|
77
|
+
}
|
|
78
|
+
`;
|
|
79
|
+
}
|
|
80
|
+
function generateGetRoute(entity, table) {
|
|
81
|
+
return `import { createClient } from '@/lib/supabase/server';
|
|
82
|
+
import { NextRequest, NextResponse } from 'next/server';
|
|
83
|
+
|
|
84
|
+
export async function GET(
|
|
85
|
+
req: NextRequest,
|
|
86
|
+
{ params }: { params: { id: string } }
|
|
87
|
+
) {
|
|
88
|
+
const supabase = createClient();
|
|
89
|
+
|
|
90
|
+
const { data: { user } } = await supabase.auth.getUser();
|
|
91
|
+
if (!user) {
|
|
92
|
+
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
const { data, error } = await supabase
|
|
96
|
+
.from('${table}')
|
|
97
|
+
.select('*')
|
|
98
|
+
.eq('id', params.id)
|
|
99
|
+
.eq('user_id', user.id)
|
|
100
|
+
.maybeSingle();
|
|
101
|
+
|
|
102
|
+
if (error) {
|
|
103
|
+
return NextResponse.json({ error: error.message }, { status: 500 });
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
if (!data) {
|
|
107
|
+
return NextResponse.json({ error: 'Not found' }, { status: 404 });
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
return NextResponse.json({ data });
|
|
111
|
+
}
|
|
112
|
+
`;
|
|
113
|
+
}
|
|
114
|
+
function generateCreateRoute(entity, table) {
|
|
115
|
+
return `import { createClient } from '@/lib/supabase/server';
|
|
116
|
+
import { NextRequest, NextResponse } from 'next/server';
|
|
117
|
+
|
|
118
|
+
export async function POST(req: NextRequest) {
|
|
119
|
+
const supabase = createClient();
|
|
120
|
+
|
|
121
|
+
const { data: { user } } = await supabase.auth.getUser();
|
|
122
|
+
if (!user) {
|
|
123
|
+
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
const body = await req.json();
|
|
127
|
+
|
|
128
|
+
const { data, error } = await supabase
|
|
129
|
+
.from('${table}')
|
|
130
|
+
.insert({
|
|
131
|
+
...body,
|
|
132
|
+
user_id: user.id,
|
|
133
|
+
})
|
|
134
|
+
.select()
|
|
135
|
+
.maybeSingle();
|
|
136
|
+
|
|
137
|
+
if (error) {
|
|
138
|
+
return NextResponse.json({ error: error.message }, { status: 500 });
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
return NextResponse.json({ data }, { status: 201 });
|
|
142
|
+
}
|
|
143
|
+
`;
|
|
144
|
+
}
|
|
145
|
+
function generateUpdateRoute(entity, table) {
|
|
146
|
+
return `import { createClient } from '@/lib/supabase/server';
|
|
147
|
+
import { NextRequest, NextResponse } from 'next/server';
|
|
148
|
+
|
|
149
|
+
export async function PATCH(
|
|
150
|
+
req: NextRequest,
|
|
151
|
+
{ params }: { params: { id: string } }
|
|
152
|
+
) {
|
|
153
|
+
const supabase = createClient();
|
|
154
|
+
|
|
155
|
+
const { data: { user } } = await supabase.auth.getUser();
|
|
156
|
+
if (!user) {
|
|
157
|
+
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
const body = await req.json();
|
|
161
|
+
|
|
162
|
+
const { data, error } = await supabase
|
|
163
|
+
.from('${table}')
|
|
164
|
+
.update(body)
|
|
165
|
+
.eq('id', params.id)
|
|
166
|
+
.eq('user_id', user.id)
|
|
167
|
+
.select()
|
|
168
|
+
.maybeSingle();
|
|
169
|
+
|
|
170
|
+
if (error) {
|
|
171
|
+
return NextResponse.json({ error: error.message }, { status: 500 });
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
if (!data) {
|
|
175
|
+
return NextResponse.json({ error: 'Not found' }, { status: 404 });
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
return NextResponse.json({ data });
|
|
179
|
+
}
|
|
180
|
+
`;
|
|
181
|
+
}
|
|
182
|
+
function generateDeleteRoute(entity, table) {
|
|
183
|
+
return `import { createClient } from '@/lib/supabase/server';
|
|
184
|
+
import { NextRequest, NextResponse } from 'next/server';
|
|
185
|
+
|
|
186
|
+
export async function DELETE(
|
|
187
|
+
req: NextRequest,
|
|
188
|
+
{ params }: { params: { id: string } }
|
|
189
|
+
) {
|
|
190
|
+
const supabase = createClient();
|
|
191
|
+
|
|
192
|
+
const { data: { user } } = await supabase.auth.getUser();
|
|
193
|
+
if (!user) {
|
|
194
|
+
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
const { error } = await supabase
|
|
198
|
+
.from('${table}')
|
|
199
|
+
.delete()
|
|
200
|
+
.eq('id', params.id)
|
|
201
|
+
.eq('user_id', user.id)
|
|
202
|
+
.maybeSingle();
|
|
203
|
+
|
|
204
|
+
if (error) {
|
|
205
|
+
return NextResponse.json({ error: error.message }, { status: 500 });
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
return NextResponse.json({ success: true });
|
|
209
|
+
}
|
|
210
|
+
`;
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=generate-api-route.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-api-route.js","sourceRoot":"","sources":["../../src/tools/generate-api-route.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAO7B,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAAe;IACpD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IAEnC,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC;IAC7C,MAAM,SAAS,GAAG,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,QAAQ;QAC9D,CAAC,CAAC,eAAe,SAAS,WAAW;QACrC,CAAC,CAAC,eAAe,SAAS,gBAAgB,CAAC;IAE7C,IAAI,IAAI,GAAG,EAAE,CAAC;IAEd,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACzB,IAAI,GAAG,iBAAiB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC9C,CAAC;SAAM,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;QAC/B,IAAI,GAAG,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC7C,CAAC;SAAM,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;QAClC,IAAI,GAAG,mBAAmB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAChD,CAAC;SAAM,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;QAClC,IAAI,GAAG,mBAAmB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAChD,CAAC;SAAM,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;QAClC,IAAI,GAAG,mBAAmB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC3C,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAE5C,OAAO;;YAEG,SAAS;cACP,MAAM;iBACH,SAAS;;;;;;;;sCAQY,CAAC;AACvC,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAc,EAAE,KAAa;IACtD,OAAO;;;;;;;;;;;;aAYI,KAAK;;;;;;;;;;;CAWjB,CAAC;AACF,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAc,EAAE,KAAa;IACrD,OAAO;;;;;;;;;;;;;;;aAeI,KAAK;;;;;;;;;;;;;;;;CAgBjB,CAAC;AACF,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAc,EAAE,KAAa;IACxD,OAAO;;;;;;;;;;;;;;aAcI,KAAK;;;;;;;;;;;;;;CAcjB,CAAC;AACF,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAc,EAAE,KAAa;IACxD,OAAO;;;;;;;;;;;;;;;;;aAiBI,KAAK;;;;;;;;;;;;;;;;;CAiBjB,CAAC;AACF,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAc,EAAE,KAAa;IACxD,OAAO;;;;;;;;;;;;;;;aAeI,KAAK;;;;;;;;;;;;CAYjB,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* codebakers_generate_chatbot
|
|
3
|
+
*
|
|
4
|
+
* AI Chatbot Generator - In-App Help Assistant
|
|
5
|
+
*
|
|
6
|
+
* Generates AI chatbot component that:
|
|
7
|
+
* - Knows entire source code
|
|
8
|
+
* - Can answer questions about the app
|
|
9
|
+
* - Helps users navigate features
|
|
10
|
+
* - Integrates into help section
|
|
11
|
+
* - Uses RAG (retrieval-augmented generation)
|
|
12
|
+
*/
|
|
13
|
+
interface ChatbotArgs {
|
|
14
|
+
position?: 'bottom-right' | 'bottom-left' | 'sidebar';
|
|
15
|
+
include_api_knowledge?: boolean;
|
|
16
|
+
include_component_knowledge?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export declare function generateChatbot(args?: ChatbotArgs): Promise<string>;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=generate-chatbot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-chatbot.d.ts","sourceRoot":"","sources":["../../src/tools/generate-chatbot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,UAAU,WAAW;IACnB,QAAQ,CAAC,EAAE,cAAc,GAAG,aAAa,GAAG,SAAS,CAAC;IACtD,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,2BAA2B,CAAC,EAAE,OAAO,CAAC;CACvC;AAED,wBAAsB,eAAe,CAAC,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CA+B7E"}
|