@buoy-design/cli 0.3.38 → 0.4.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 (155) hide show
  1. package/dist/bin.js +0 -0
  2. package/dist/commands/designmd/diff.d.ts +34 -0
  3. package/dist/commands/designmd/diff.d.ts.map +1 -0
  4. package/dist/commands/designmd/diff.js +35 -0
  5. package/dist/commands/designmd/diff.js.map +1 -0
  6. package/dist/commands/designmd/export.d.ts +11 -0
  7. package/dist/commands/designmd/export.d.ts.map +1 -0
  8. package/dist/commands/designmd/export.js +37 -0
  9. package/dist/commands/designmd/export.js.map +1 -0
  10. package/dist/commands/designmd/index.d.ts +3 -0
  11. package/dist/commands/designmd/index.d.ts.map +1 -0
  12. package/dist/commands/designmd/index.js +57 -0
  13. package/dist/commands/designmd/index.js.map +1 -0
  14. package/dist/commands/designmd/init.d.ts +17 -0
  15. package/dist/commands/designmd/init.d.ts.map +1 -0
  16. package/dist/commands/designmd/init.js +89 -0
  17. package/dist/commands/designmd/init.js.map +1 -0
  18. package/dist/commands/designmd/lint.d.ts +10 -0
  19. package/dist/commands/designmd/lint.d.ts.map +1 -0
  20. package/dist/commands/designmd/lint.js +13 -0
  21. package/dist/commands/designmd/lint.js.map +1 -0
  22. package/dist/commands/index.d.ts +2 -0
  23. package/dist/commands/index.d.ts.map +1 -1
  24. package/dist/commands/index.js +2 -0
  25. package/dist/commands/index.js.map +1 -1
  26. package/dist/commands/system.d.ts +3 -0
  27. package/dist/commands/system.d.ts.map +1 -0
  28. package/dist/commands/system.js +119 -0
  29. package/dist/commands/system.js.map +1 -0
  30. package/dist/config/auto-detect.d.ts.map +1 -1
  31. package/dist/config/auto-detect.js +4 -0
  32. package/dist/config/auto-detect.js.map +1 -1
  33. package/dist/config/schema.d.ts +89 -0
  34. package/dist/config/schema.d.ts.map +1 -1
  35. package/dist/config/schema.js +15 -0
  36. package/dist/config/schema.js.map +1 -1
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +7 -3
  39. package/dist/index.js.map +1 -1
  40. package/dist/scan/orchestrator.d.ts +7 -0
  41. package/dist/scan/orchestrator.d.ts.map +1 -1
  42. package/dist/scan/orchestrator.js +47 -0
  43. package/dist/scan/orchestrator.js.map +1 -1
  44. package/dist/services/remote-check.js +2 -0
  45. package/dist/services/remote-check.js.map +1 -1
  46. package/dist/services/system-map.d.ts +51 -0
  47. package/dist/services/system-map.d.ts.map +1 -0
  48. package/dist/services/system-map.js +135 -0
  49. package/dist/services/system-map.js.map +1 -0
  50. package/package.json +15 -14
  51. package/LICENSE +0 -21
  52. package/dist/commands/audit.d.ts +0 -3
  53. package/dist/commands/audit.d.ts.map +0 -1
  54. package/dist/commands/audit.js +0 -235
  55. package/dist/commands/audit.js.map +0 -1
  56. package/dist/commands/baseline.d.ts +0 -47
  57. package/dist/commands/baseline.d.ts.map +0 -1
  58. package/dist/commands/baseline.js +0 -327
  59. package/dist/commands/baseline.js.map +0 -1
  60. package/dist/commands/begin.d.ts +0 -9
  61. package/dist/commands/begin.d.ts.map +0 -1
  62. package/dist/commands/begin.js +0 -827
  63. package/dist/commands/begin.js.map +0 -1
  64. package/dist/commands/build.d.ts +0 -8
  65. package/dist/commands/build.d.ts.map +0 -1
  66. package/dist/commands/build.js +0 -26
  67. package/dist/commands/build.js.map +0 -1
  68. package/dist/commands/check.d.ts.sync-conflict-20260305-170128-6PCZ3ZU.map +0 -1
  69. package/dist/commands/check.js.sync-conflict-20260313-114446-6PCZ3ZU.map +0 -1
  70. package/dist/commands/check.sync-conflict-20260305-155016-6PCZ3ZU.d.ts +0 -26
  71. package/dist/commands/check.sync-conflict-20260305-155016-6PCZ3ZU.d.ts.map +0 -1
  72. package/dist/commands/check.sync-conflict-20260305-155016-6PCZ3ZU.js +0 -438
  73. package/dist/commands/check.sync-conflict-20260305-155016-6PCZ3ZU.js.map +0 -1
  74. package/dist/commands/commands.d.ts +0 -8
  75. package/dist/commands/commands.d.ts.map +0 -1
  76. package/dist/commands/commands.js +0 -148
  77. package/dist/commands/commands.js.map +0 -1
  78. package/dist/commands/components-query.d.ts +0 -13
  79. package/dist/commands/components-query.d.ts.map +0 -1
  80. package/dist/commands/components-query.js +0 -263
  81. package/dist/commands/components-query.js.map +0 -1
  82. package/dist/commands/components.d.ts +0 -8
  83. package/dist/commands/components.d.ts.map +0 -1
  84. package/dist/commands/components.js +0 -14
  85. package/dist/commands/components.js.map +0 -1
  86. package/dist/commands/dock.js.sync-conflict-20260313-172700-6PCZ3ZU.map +0 -1
  87. package/dist/commands/dock.sync-conflict-20260309-191923-6PCZ3ZU.js +0 -1006
  88. package/dist/commands/history.d.ts +0 -3
  89. package/dist/commands/history.d.ts.map +0 -1
  90. package/dist/commands/history.js +0 -352
  91. package/dist/commands/history.js.map +0 -1
  92. package/dist/commands/plugins.d.ts +0 -3
  93. package/dist/commands/plugins.d.ts.map +0 -1
  94. package/dist/commands/plugins.js +0 -63
  95. package/dist/commands/plugins.js.map +0 -1
  96. package/dist/commands/show.d.ts.sync-conflict-20260306-165917-6PCZ3ZU.map +0 -1
  97. package/dist/commands/show.sync-conflict-20260305-140755-6PCZ3ZU.js +0 -1735
  98. package/dist/commands/show.sync-conflict-20260309-130326-6PCZ3ZU.d.ts +0 -11
  99. package/dist/commands/show.sync-conflict-20260309-130326-6PCZ3ZU.d.ts.map +0 -1
  100. package/dist/commands/show.sync-conflict-20260309-130326-6PCZ3ZU.js +0 -1735
  101. package/dist/commands/show.sync-conflict-20260309-130326-6PCZ3ZU.js.map +0 -1
  102. package/dist/config/loader.d.ts.sync-conflict-20260313-145931-6PCZ3ZU.map +0 -1
  103. package/dist/config/loader.js.sync-conflict-20260309-033512-6PCZ3ZU.map +0 -1
  104. package/dist/config/loader.sync-conflict-20260307-175208-6PCZ3ZU.d.ts +0 -8
  105. package/dist/config/loader.sync-conflict-20260307-175208-6PCZ3ZU.d.ts.map +0 -1
  106. package/dist/config/loader.sync-conflict-20260307-175208-6PCZ3ZU.js +0 -162
  107. package/dist/config/loader.sync-conflict-20260307-175208-6PCZ3ZU.js.map +0 -1
  108. package/dist/config/schema.d.ts.sync-conflict-20260309-154654-6PCZ3ZU.map +0 -1
  109. package/dist/config/schema.sync-conflict-20260309-135703-6PCZ3ZU.js +0 -214
  110. package/dist/config/schema.sync-conflict-20260313-173553-6PCZ3ZU.d.ts +0 -1812
  111. package/dist/config/schema.sync-conflict-20260313-173553-6PCZ3ZU.d.ts.map +0 -1
  112. package/dist/config/schema.sync-conflict-20260313-173553-6PCZ3ZU.js +0 -214
  113. package/dist/config/schema.sync-conflict-20260313-173553-6PCZ3ZU.js.map +0 -1
  114. package/dist/detect/frameworks.js.sync-conflict-20260306-123756-6PCZ3ZU.map +0 -1
  115. package/dist/detect/frameworks.sync-conflict-20260313-150557-6PCZ3ZU.js +0 -252
  116. package/dist/detect/monorepo-patterns.js.sync-conflict-20260309-155400-6PCZ3ZU.map +0 -1
  117. package/dist/detect/monorepo-patterns.sync-conflict-20260311-182757-6PCZ3ZU.js +0 -209
  118. package/dist/hooks/index.d.ts.sync-conflict-20260306-220901-6PCZ3ZU.map +0 -1
  119. package/dist/hooks/index.sync-conflict-20260311-082258-6PCZ3ZU.js +0 -616
  120. package/dist/output/formatters.js.sync-conflict-20260306-134702-6PCZ3ZU.map +0 -1
  121. package/dist/output/formatters.sync-conflict-20260306-180804-6PCZ3ZU.js +0 -867
  122. package/dist/output/formatters.sync-conflict-20260307-131418-5SN2GZG.d.ts +0 -29
  123. package/dist/output/formatters.sync-conflict-20260307-131418-5SN2GZG.d.ts.map +0 -1
  124. package/dist/output/formatters.sync-conflict-20260307-131418-5SN2GZG.js +0 -867
  125. package/dist/output/formatters.sync-conflict-20260307-131418-5SN2GZG.js.map +0 -1
  126. package/dist/output/formatters.sync-conflict-20260307-143122-5SN2GZG.d.ts +0 -29
  127. package/dist/output/formatters.sync-conflict-20260307-143122-5SN2GZG.d.ts.map +0 -1
  128. package/dist/output/formatters.sync-conflict-20260307-143122-5SN2GZG.js +0 -867
  129. package/dist/output/formatters.sync-conflict-20260307-143122-5SN2GZG.js.map +0 -1
  130. package/dist/output/index.sync-conflict-20260309-222859-6PCZ3ZU.js +0 -5
  131. package/dist/output/reporters.d.sync-conflict-20260309-193820-6PCZ3ZU.ts +0 -38
  132. package/dist/output/reporters.d.ts.sync-conflict-20260306-193811-6PCZ3ZU.map +0 -1
  133. package/dist/output/reporters.js.sync-conflict-20260313-164629-6PCZ3ZU.map +0 -1
  134. package/dist/output/reporters.sync-conflict-20260309-030558-6PCZ3ZU.js +0 -182
  135. package/dist/output/reports.d.ts.sync-conflict-20260307-172149-6PCZ3ZU.map +0 -1
  136. package/dist/output/reports.js.sync-conflict-20260305-161643-6PCZ3ZU.map +0 -1
  137. package/dist/output/reports.sync-conflict-20260305-211951-6PCZ3ZU.js +0 -393
  138. package/dist/output/visuals.d.ts +0 -53
  139. package/dist/output/visuals.d.ts.map +0 -1
  140. package/dist/output/visuals.js +0 -194
  141. package/dist/output/visuals.js.map +0 -1
  142. package/dist/services/drift-analysis.d.sync-conflict-20260306-151016-6PCZ3ZU.ts +0 -194
  143. package/dist/services/drift-analysis.d.ts.sync-conflict-20260307-175904-6PCZ3ZU.map +0 -1
  144. package/dist/services/drift-analysis.js.sync-conflict-20260313-152307-6PCZ3ZU.map +0 -1
  145. package/dist/services/drift-analysis.sync-conflict-20260309-133811-6PCZ3ZU.d.ts +0 -194
  146. package/dist/services/drift-analysis.sync-conflict-20260309-133811-6PCZ3ZU.d.ts.map +0 -1
  147. package/dist/services/drift-analysis.sync-conflict-20260309-133811-6PCZ3ZU.js +0 -1022
  148. package/dist/services/drift-analysis.sync-conflict-20260309-133811-6PCZ3ZU.js.map +0 -1
  149. package/dist/services/skill-export.d.ts.sync-conflict-20260309-171021-6PCZ3ZU.map +0 -1
  150. package/dist/services/skill-export.js.sync-conflict-20260313-155735-6PCZ3ZU.map +0 -1
  151. package/dist/services/skill-export.sync-conflict-20260309-144621-6PCZ3ZU.d.ts +0 -109
  152. package/dist/services/skill-export.sync-conflict-20260309-144621-6PCZ3ZU.d.ts.map +0 -1
  153. package/dist/services/skill-export.sync-conflict-20260309-144621-6PCZ3ZU.js +0 -737
  154. package/dist/services/skill-export.sync-conflict-20260309-144621-6PCZ3ZU.js.map +0 -1
  155. package/dist/services/skill-export.sync-conflict-20260313-161246-6PCZ3ZU.js +0 -737
@@ -1,209 +0,0 @@
1
- /**
2
- * Monorepo pattern detection and expansion
3
- *
4
- * Handles automatic pattern expansion for popular monorepo structures:
5
- * - pnpm workspaces (pnpm-workspace.yaml)
6
- * - yarn/npm workspaces (package.json workspaces)
7
- * - Lerna (lerna.json)
8
- * - Nx workspaces (nx.json with apps/libs structure)
9
- * - Turborepo (turbo.json)
10
- */
11
- import { existsSync, readFileSync } from 'fs';
12
- import { resolve } from 'path';
13
- import { parse as parseYaml } from 'yaml';
14
- // Note: These patterns are used in project-detector.ts for scanning monorepo directories
15
- // The actual patterns are defined inline there for better maintainability
16
- /**
17
- * Detect monorepo configuration from project root
18
- */
19
- export function detectMonorepoConfig(projectRoot) {
20
- // Check for pnpm workspaces
21
- const pnpmWorkspacePath = resolve(projectRoot, 'pnpm-workspace.yaml');
22
- if (existsSync(pnpmWorkspacePath)) {
23
- const patterns = parsePnpmWorkspaces(pnpmWorkspacePath);
24
- return { type: 'pnpm', workspacePatterns: patterns };
25
- }
26
- // Check for lerna.json
27
- const lernaPath = resolve(projectRoot, 'lerna.json');
28
- if (existsSync(lernaPath)) {
29
- const patterns = parseLernaConfig(lernaPath);
30
- return { type: 'lerna', workspacePatterns: patterns };
31
- }
32
- // Check for nx.json
33
- const nxPath = resolve(projectRoot, 'nx.json');
34
- if (existsSync(nxPath)) {
35
- // Nx typically uses apps/ and libs/ structure
36
- return { type: 'nx', workspacePatterns: ['apps/*', 'libs/*', 'packages/*'] };
37
- }
38
- // Check for turbo.json
39
- const turboPath = resolve(projectRoot, 'turbo.json');
40
- if (existsSync(turboPath)) {
41
- // Turborepo uses package.json workspaces or pnpm-workspace.yaml
42
- // Fall through to check package.json
43
- }
44
- // Check for package.json workspaces (yarn/npm)
45
- const pkgPath = resolve(projectRoot, 'package.json');
46
- if (existsSync(pkgPath)) {
47
- try {
48
- const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
49
- const workspaces = pkg.workspaces;
50
- if (workspaces) {
51
- // Handle both array and object format
52
- const patterns = Array.isArray(workspaces)
53
- ? workspaces
54
- : (workspaces.packages || []);
55
- if (patterns.length > 0) {
56
- // Determine if it's turborepo with npm/yarn workspaces
57
- const type = existsSync(turboPath) ? 'turborepo' :
58
- existsSync(resolve(projectRoot, 'yarn.lock')) ? 'yarn' : 'npm';
59
- return { type, workspacePatterns: patterns };
60
- }
61
- }
62
- }
63
- catch {
64
- // Invalid JSON, continue
65
- }
66
- }
67
- return { type: null, workspacePatterns: [] };
68
- }
69
- /**
70
- * Parse pnpm-workspace.yaml to get workspace patterns
71
- */
72
- function parsePnpmWorkspaces(filePath) {
73
- try {
74
- const content = readFileSync(filePath, 'utf-8');
75
- const config = parseYaml(content);
76
- return config?.packages || [];
77
- }
78
- catch {
79
- // Default pnpm patterns
80
- return ['packages/*'];
81
- }
82
- }
83
- /**
84
- * Parse lerna.json to get workspace patterns
85
- */
86
- function parseLernaConfig(filePath) {
87
- try {
88
- const content = readFileSync(filePath, 'utf-8');
89
- const config = JSON.parse(content);
90
- return config?.packages || ['packages/*'];
91
- }
92
- catch {
93
- return ['packages/*'];
94
- }
95
- }
96
- /**
97
- * Expand file patterns for monorepo structures
98
- *
99
- * Given base patterns like ['src/**\/*.tsx'], this function expands them
100
- * to include monorepo package locations like ['packages/*\/src/**\/*.tsx']
101
- *
102
- * @param basePatterns - Original file patterns (e.g., ['src/**\/*.tsx'])
103
- * @param monorepoConfig - Detected monorepo configuration
104
- * @returns Expanded patterns for the monorepo structure
105
- */
106
- export function expandPatternsForMonorepo(basePatterns, monorepoConfig) {
107
- if (!monorepoConfig.type || monorepoConfig.workspacePatterns.length === 0) {
108
- return {
109
- basePatterns,
110
- monorepoPatterns: [],
111
- allPatterns: basePatterns,
112
- };
113
- }
114
- const monorepoPatterns = [];
115
- for (const workspacePattern of monorepoConfig.workspacePatterns) {
116
- // Convert workspace patterns like 'packages/*' to component patterns
117
- // Remove trailing /* if present for cleaner paths
118
- const baseWorkspace = workspacePattern.replace(/\/\*+$/, '');
119
- for (const basePattern of basePatterns) {
120
- // Handle patterns that start with 'src/'
121
- if (basePattern.startsWith('src/')) {
122
- // packages/* + src/**/*.tsx -> packages/*/src/**/*.tsx
123
- monorepoPatterns.push(`${baseWorkspace}/*/${basePattern}`);
124
- // Also check for scoped packages: packages/@scope/*/src/**/*.tsx
125
- if (baseWorkspace === 'packages') {
126
- monorepoPatterns.push(`packages/@*/*/${basePattern}`);
127
- }
128
- }
129
- else {
130
- // For patterns not starting with src/, add them under workspace packages
131
- // **/*.tsx -> packages/*/src/**/*.tsx
132
- monorepoPatterns.push(`${baseWorkspace}/*/src/${basePattern}`);
133
- if (baseWorkspace === 'packages') {
134
- monorepoPatterns.push(`packages/@*/*/src/${basePattern}`);
135
- }
136
- }
137
- }
138
- }
139
- // Add standard monorepo paths that might not be in workspace config
140
- // but are commonly used (e.g., apps/ for Nx)
141
- const additionalPatterns = [];
142
- if (monorepoConfig.type === 'nx' || monorepoConfig.type === 'turborepo') {
143
- for (const basePattern of basePatterns) {
144
- if (basePattern.startsWith('src/')) {
145
- additionalPatterns.push(`apps/*/${basePattern}`);
146
- additionalPatterns.push(`libs/*/${basePattern}`);
147
- }
148
- else {
149
- additionalPatterns.push(`apps/*/src/${basePattern}`);
150
- additionalPatterns.push(`libs/*/src/${basePattern}`);
151
- }
152
- }
153
- }
154
- // Combine and deduplicate
155
- const allMonorepoPatterns = Array.from(new Set([...monorepoPatterns, ...additionalPatterns]));
156
- return {
157
- basePatterns,
158
- monorepoPatterns: allMonorepoPatterns,
159
- allPatterns: Array.from(new Set([...basePatterns, ...allMonorepoPatterns])),
160
- };
161
- }
162
- /**
163
- * Get default include patterns for a framework, expanded for monorepo if detected
164
- *
165
- * @param framework - Framework name (react, vue, svelte, angular)
166
- * @param projectRoot - Project root directory
167
- * @returns Include patterns appropriate for the project structure
168
- */
169
- export function getIncludePatternsForFramework(framework, projectRoot) {
170
- // Base patterns by framework
171
- const basePatterns = {
172
- react: ['src/**/*.tsx', 'src/**/*.jsx'],
173
- vue: ['src/**/*.vue'],
174
- svelte: ['src/**/*.svelte'],
175
- angular: ['src/**/*.component.ts'],
176
- webcomponent: ['src/**/*.ts'],
177
- };
178
- const patterns = basePatterns[framework] || ['src/**/*.tsx'];
179
- const monorepoConfig = detectMonorepoConfig(projectRoot);
180
- if (!monorepoConfig.type) {
181
- return patterns;
182
- }
183
- const expanded = expandPatternsForMonorepo(patterns, monorepoConfig);
184
- return expanded.allPatterns;
185
- }
186
- /**
187
- * Check if a project is a monorepo
188
- */
189
- export function isMonorepo(projectRoot) {
190
- const config = detectMonorepoConfig(projectRoot);
191
- return config.type !== null;
192
- }
193
- /**
194
- * Get human-readable monorepo type description
195
- */
196
- export function getMonorepoDescription(config) {
197
- if (!config.type)
198
- return 'Single package';
199
- const descriptions = {
200
- pnpm: 'pnpm workspace',
201
- yarn: 'Yarn workspace',
202
- npm: 'npm workspace',
203
- lerna: 'Lerna monorepo',
204
- nx: 'Nx workspace',
205
- turborepo: 'Turborepo',
206
- };
207
- return descriptions[config.type] || 'Monorepo';
208
- }
209
- //# sourceMappingURL=monorepo-patterns.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAuCA;;GAEG;AACH,eAAO,MAAM,kBAAkB;;CAE9B,CAAC;AAmBF,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,OAAO,GAAG,YAAY,GAAG,aAAa,CAAC;AAExE;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CA8BvE;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,gBAAgB,CA2BhE;AAgLD;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,gBAAgB,CAoB5E;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE;QACL,YAAY,CAAC,EAAE,KAAK,CAAC;YACnB,KAAK,EAAE,KAAK,CAAC;gBACX,IAAI,EAAE,SAAS,CAAC;gBAChB,OAAO,EAAE,MAAM,CAAC;aACjB,CAAC,CAAC;SACJ,CAAC,CAAC;QACH,WAAW,CAAC,EAAE,KAAK,CAAC;YAClB,OAAO,EAAE,MAAM,CAAC;YAChB,KAAK,EAAE,KAAK,CAAC;gBACX,IAAI,EAAE,SAAS,CAAC;gBAChB,OAAO,EAAE,MAAM,CAAC;aACjB,CAAC,CAAC;SACJ,CAAC,CAAC;QACH,UAAU,CAAC,EAAE,KAAK,CAAC;YACjB,OAAO,EAAE,MAAM,CAAC;YAChB,KAAK,EAAE,KAAK,CAAC;gBACX,IAAI,EAAE,SAAS,CAAC;gBAChB,OAAO,EAAE,MAAM,CAAC;aACjB,CAAC,CAAC;SACJ,CAAC,CAAC;KACJ,CAAC;CACH;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,IAAI,iBAAiB,CA6C7D;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CAClB;AA4LD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,sBAAsB,CA6G5E"}