@superblocksteam/vite-plugin-file-sync 2.0.18-next.2 → 2.0.18-next.21

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 (215) hide show
  1. package/dist/ai-service/app-interface/source-tracker.d.ts +9 -2
  2. package/dist/ai-service/app-interface/source-tracker.d.ts.map +1 -1
  3. package/dist/ai-service/app-interface/source-tracker.js +22 -4
  4. package/dist/ai-service/app-interface/source-tracker.js.map +1 -1
  5. package/dist/ai-service/artifacts/bolt.js +4 -4
  6. package/dist/ai-service/artifacts/bolt.js.map +1 -1
  7. package/dist/ai-service/context/app-context.d.ts +37 -0
  8. package/dist/ai-service/context/app-context.d.ts.map +1 -0
  9. package/dist/ai-service/context/app-context.js +205 -0
  10. package/dist/ai-service/context/app-context.js.map +1 -0
  11. package/dist/ai-service/evals/content-matchers/index.d.ts +1 -0
  12. package/dist/ai-service/evals/content-matchers/index.d.ts.map +1 -1
  13. package/dist/ai-service/evals/content-matchers/index.js +8 -0
  14. package/dist/ai-service/evals/content-matchers/index.js.map +1 -1
  15. package/dist/ai-service/evals/helpers/eval-scoring.d.ts +23 -4
  16. package/dist/ai-service/evals/helpers/eval-scoring.d.ts.map +1 -1
  17. package/dist/ai-service/evals/helpers/eval-scoring.js +211 -34
  18. package/dist/ai-service/evals/helpers/eval-scoring.js.map +1 -1
  19. package/dist/ai-service/evals/helpers/index.d.ts +20 -1
  20. package/dist/ai-service/evals/helpers/index.d.ts.map +1 -1
  21. package/dist/ai-service/evals/helpers/index.js +108 -2
  22. package/dist/ai-service/evals/helpers/index.js.map +1 -1
  23. package/dist/ai-service/evals/llm-provider.d.ts +2 -0
  24. package/dist/ai-service/evals/llm-provider.d.ts.map +1 -0
  25. package/dist/ai-service/evals/llm-provider.js +9 -0
  26. package/dist/ai-service/evals/llm-provider.js.map +1 -0
  27. package/dist/ai-service/index.d.ts +10 -1
  28. package/dist/ai-service/index.d.ts.map +1 -1
  29. package/dist/ai-service/index.js +80 -11
  30. package/dist/ai-service/index.js.map +1 -1
  31. package/dist/ai-service/integrations/from-prompt-context.js +1 -1
  32. package/dist/ai-service/integrations/from-prompt-context.js.map +1 -1
  33. package/dist/ai-service/integrations/store.d.ts +3 -5
  34. package/dist/ai-service/integrations/store.d.ts.map +1 -1
  35. package/dist/ai-service/integrations/store.js +5 -13
  36. package/dist/ai-service/integrations/store.js.map +1 -1
  37. package/dist/ai-service/llm/impl/anthropic.d.ts +3 -0
  38. package/dist/ai-service/llm/impl/anthropic.d.ts.map +1 -0
  39. package/dist/ai-service/llm/impl/anthropic.js +42 -0
  40. package/dist/ai-service/llm/impl/anthropic.js.map +1 -0
  41. package/dist/ai-service/llm/provider.d.ts +3 -0
  42. package/dist/ai-service/llm/provider.d.ts.map +1 -0
  43. package/dist/ai-service/llm/provider.js +30 -0
  44. package/dist/ai-service/llm/provider.js.map +1 -0
  45. package/dist/ai-service/llm/types.d.ts +15 -0
  46. package/dist/ai-service/llm/types.d.ts.map +1 -0
  47. package/dist/ai-service/llm/types.js +2 -0
  48. package/dist/ai-service/llm/types.js.map +1 -0
  49. package/dist/ai-service/llm/utils.d.ts +9 -0
  50. package/dist/ai-service/llm/utils.d.ts.map +1 -0
  51. package/dist/ai-service/llm/utils.js +49 -0
  52. package/dist/ai-service/llm/utils.js.map +1 -0
  53. package/dist/ai-service/prompt-builder-service/builders/code-generation.d.ts.map +1 -1
  54. package/dist/ai-service/prompt-builder-service/builders/code-generation.js +95 -38
  55. package/dist/ai-service/prompt-builder-service/builders/code-generation.js.map +1 -1
  56. package/dist/ai-service/prompt-builder-service/builders/incremental-edits.d.ts +13 -0
  57. package/dist/ai-service/prompt-builder-service/builders/incremental-edits.d.ts.map +1 -0
  58. package/dist/ai-service/prompt-builder-service/builders/incremental-edits.js +71 -0
  59. package/dist/ai-service/prompt-builder-service/builders/incremental-edits.js.map +1 -0
  60. package/dist/ai-service/prompt-builder-service/classifiers/prompt-interpret-task.d.ts +24 -0
  61. package/dist/ai-service/prompt-builder-service/classifiers/prompt-interpret-task.d.ts.map +1 -0
  62. package/dist/ai-service/prompt-builder-service/classifiers/prompt-interpret-task.js +117 -0
  63. package/dist/ai-service/prompt-builder-service/classifiers/prompt-interpret-task.js.map +1 -0
  64. package/dist/ai-service/prompt-builder-service/constants/superblocks-platform-fragments.d.ts +2 -2
  65. package/dist/ai-service/prompt-builder-service/constants/superblocks-platform-fragments.d.ts.map +1 -1
  66. package/dist/ai-service/prompt-builder-service/constants/superblocks-platform-fragments.js +56 -29
  67. package/dist/ai-service/prompt-builder-service/constants/superblocks-platform-fragments.js.map +1 -1
  68. package/dist/ai-service/prompt-builder-service/fragment-generators/base-fragment.d.ts +3 -1
  69. package/dist/ai-service/prompt-builder-service/fragment-generators/base-fragment.d.ts.map +1 -1
  70. package/dist/ai-service/prompt-builder-service/fragment-generators/base-fragment.js +36 -3
  71. package/dist/ai-service/prompt-builder-service/fragment-generators/base-fragment.js.map +1 -1
  72. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ButtonPropsDocs.d.ts +1 -1
  73. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ButtonPropsDocs.d.ts.map +1 -1
  74. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ButtonPropsDocs.js +2 -2
  75. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ButtonPropsDocs.js.map +1 -1
  76. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/CheckboxPropsDocs.js +1 -1
  77. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ColumnPropsDocs.d.ts +1 -1
  78. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ColumnPropsDocs.d.ts.map +1 -1
  79. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ColumnPropsDocs.js +2 -2
  80. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ColumnPropsDocs.js.map +1 -1
  81. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ContainerPropsDocs.d.ts +1 -1
  82. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ContainerPropsDocs.d.ts.map +1 -1
  83. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ContainerPropsDocs.js +2 -2
  84. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ContainerPropsDocs.js.map +1 -1
  85. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/DatePickerPropsDocs.d.ts +1 -1
  86. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/DatePickerPropsDocs.d.ts.map +1 -1
  87. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/DatePickerPropsDocs.js +2 -2
  88. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/DatePickerPropsDocs.js.map +1 -1
  89. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/DropdownPropsDocs.js +1 -1
  90. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/IconPropsDocs.js +1 -1
  91. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ImagePropsDocs.d.ts +1 -1
  92. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ImagePropsDocs.d.ts.map +1 -1
  93. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ImagePropsDocs.js +2 -2
  94. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ImagePropsDocs.js.map +1 -1
  95. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/InputPropsDocs.d.ts +1 -1
  96. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/InputPropsDocs.d.ts.map +1 -1
  97. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/InputPropsDocs.js +2 -2
  98. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/InputPropsDocs.js.map +1 -1
  99. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ModalPropsDocs.d.ts +1 -1
  100. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ModalPropsDocs.d.ts.map +1 -1
  101. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ModalPropsDocs.js +2 -2
  102. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ModalPropsDocs.js.map +1 -1
  103. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/PagePropsDocs.js +1 -1
  104. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/SectionPropsDocs.js +1 -1
  105. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/SlideoutPropsDocs.d.ts +1 -1
  106. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/SlideoutPropsDocs.d.ts.map +1 -1
  107. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/SlideoutPropsDocs.js +2 -2
  108. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/SlideoutPropsDocs.js.map +1 -1
  109. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/SwitchPropsDocs.js +1 -1
  110. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/TablePropsDocs.d.ts +1 -1
  111. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/TablePropsDocs.d.ts.map +1 -1
  112. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/TablePropsDocs.js +2 -2
  113. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/TablePropsDocs.js.map +1 -1
  114. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/TextPropsDocs.d.ts +1 -1
  115. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/TextPropsDocs.d.ts.map +1 -1
  116. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/TextPropsDocs.js +2 -2
  117. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/TextPropsDocs.js.map +1 -1
  118. package/dist/ai-service/prompt-builder-service/static-fragments/library-typedefs/Dim.js +1 -1
  119. package/dist/ai-service/prompt-builder-service/static-fragments/library-typedefs/EventFlow.js +1 -1
  120. package/dist/ai-service/prompt-builder-service/static-fragments/library-typedefs/TextStyleWithVariant.js +1 -1
  121. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/full-examples.d.ts +1 -1
  122. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/full-examples.d.ts.map +1 -1
  123. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/full-examples.js +2 -2
  124. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/full-examples.js.map +1 -1
  125. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/index.d.ts +1 -0
  126. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/index.d.ts.map +1 -1
  127. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/index.js +1 -0
  128. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/index.js.map +1 -1
  129. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-api.d.ts +1 -1
  130. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-api.d.ts.map +1 -1
  131. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-api.js +2 -2
  132. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-api.js.map +1 -1
  133. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-components-rules.js +1 -1
  134. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-custom-components.js +1 -1
  135. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-data-filtering.js +1 -1
  136. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-event-flow.js +1 -1
  137. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-forms.js +1 -1
  138. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-layouts.js +1 -1
  139. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-page.js +1 -1
  140. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-rbac.js +1 -1
  141. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-routes.js +1 -1
  142. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-state.js +1 -1
  143. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-theming.js +1 -1
  144. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/system-base.js +1 -1
  145. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/system-incremental.d.ts +2 -0
  146. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/system-incremental.d.ts.map +1 -0
  147. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/system-incremental.js +6 -0
  148. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/system-incremental.js.map +1 -0
  149. package/dist/ai-service/prompt-builder-service/types.d.ts +21 -7
  150. package/dist/ai-service/prompt-builder-service/types.d.ts.map +1 -1
  151. package/dist/ai-service/prompt-builder-service/types.js +10 -1
  152. package/dist/ai-service/prompt-builder-service/types.js.map +1 -1
  153. package/dist/ai-service/result-buffer/bolt.js +2 -2
  154. package/dist/ai-service/result-buffer/bolt.js.map +1 -1
  155. package/dist/ai-service/state-machine/clark-fsm.d.ts +10 -2
  156. package/dist/ai-service/state-machine/clark-fsm.d.ts.map +1 -1
  157. package/dist/ai-service/state-machine/clark-fsm.js.map +1 -1
  158. package/dist/ai-service/state-machine/handlers/agent-planning.d.ts.map +1 -1
  159. package/dist/ai-service/state-machine/handlers/agent-planning.js +49 -11
  160. package/dist/ai-service/state-machine/handlers/agent-planning.js.map +1 -1
  161. package/dist/ai-service/state-machine/handlers/llm-generating.d.ts +1 -1
  162. package/dist/ai-service/state-machine/handlers/llm-generating.d.ts.map +1 -1
  163. package/dist/ai-service/state-machine/handlers/llm-generating.js +226 -231
  164. package/dist/ai-service/state-machine/handlers/llm-generating.js.map +1 -1
  165. package/dist/ai-service/state-machine/handlers/post-processing.d.ts +1 -1
  166. package/dist/ai-service/state-machine/handlers/post-processing.d.ts.map +1 -1
  167. package/dist/ai-service/state-machine/handlers/post-processing.js +56 -3
  168. package/dist/ai-service/state-machine/handlers/post-processing.js.map +1 -1
  169. package/dist/ai-service/test-utils/anthropic-service-mock.d.ts +1 -1
  170. package/dist/ai-service/test-utils/anthropic-service-mock.d.ts.map +1 -1
  171. package/dist/ai-service/test-utils/anthropic-service-mock.js +9 -1
  172. package/dist/ai-service/test-utils/anthropic-service-mock.js.map +1 -1
  173. package/dist/ai-service/test-utils/app-generation-mocks/orders-app.d.ts +1 -1
  174. package/dist/ai-service/test-utils/app-generation-mocks/orders-app.d.ts.map +1 -1
  175. package/dist/ai-service/test-utils/app-generation-mocks/orders-app.js +80 -38
  176. package/dist/ai-service/test-utils/app-generation-mocks/orders-app.js.map +1 -1
  177. package/dist/ai-service/test-utils/app-generation-mocks/smoketest.d.ts +1 -1
  178. package/dist/ai-service/test-utils/app-generation-mocks/smoketest.d.ts.map +1 -1
  179. package/dist/ai-service/test-utils/app-generation-mocks/smoketest.js +9 -3
  180. package/dist/ai-service/test-utils/app-generation-mocks/smoketest.js.map +1 -1
  181. package/dist/ai-service/transform/shared.d.ts.map +1 -1
  182. package/dist/ai-service/transform/shared.js +1 -5
  183. package/dist/ai-service/transform/shared.js.map +1 -1
  184. package/dist/ai-service/types.d.ts +1 -1
  185. package/dist/ai-service/types.d.ts.map +1 -1
  186. package/dist/components-manager.d.ts.map +1 -1
  187. package/dist/components-manager.js +9 -15
  188. package/dist/components-manager.js.map +1 -1
  189. package/dist/file-sync-vite-plugin.d.ts.map +1 -1
  190. package/dist/file-sync-vite-plugin.js +50 -11
  191. package/dist/file-sync-vite-plugin.js.map +1 -1
  192. package/dist/lock-service/index.d.ts +1 -0
  193. package/dist/lock-service/index.d.ts.map +1 -1
  194. package/dist/lock-service/index.js +27 -11
  195. package/dist/lock-service/index.js.map +1 -1
  196. package/dist/server-rpc/index.d.ts +0 -1
  197. package/dist/server-rpc/index.d.ts.map +1 -1
  198. package/dist/server-rpc/index.js +0 -4
  199. package/dist/server-rpc/index.js.map +1 -1
  200. package/dist/socket-manager.d.ts.map +1 -1
  201. package/dist/socket-manager.js +5 -0
  202. package/dist/socket-manager.js.map +1 -1
  203. package/dist/virtual-modules.d.ts +5 -0
  204. package/dist/virtual-modules.d.ts.map +1 -0
  205. package/dist/virtual-modules.js +5 -0
  206. package/dist/virtual-modules.js.map +1 -0
  207. package/package.json +6 -6
  208. package/dist/ai-service/evals/lib/modal-config.d.ts +0 -8
  209. package/dist/ai-service/evals/lib/modal-config.d.ts.map +0 -1
  210. package/dist/ai-service/evals/lib/modal-config.js +0 -23
  211. package/dist/ai-service/evals/lib/modal-config.js.map +0 -1
  212. package/dist/ai-service/prompt-builder-service/constants/superblocks-components-fragments.d.ts +0 -3
  213. package/dist/ai-service/prompt-builder-service/constants/superblocks-components-fragments.d.ts.map +0 -1
  214. package/dist/ai-service/prompt-builder-service/constants/superblocks-components-fragments.js +0 -24
  215. package/dist/ai-service/prompt-builder-service/constants/superblocks-components-fragments.js.map +0 -1
@@ -1,30 +1,45 @@
1
1
  import ddTrace from "dd-trace";
2
2
  import { expect } from "vitest";
3
- import { findComponentsInPage, parseScopeEntityNames, } from "../content-matchers/index.js";
3
+ import { findComponentAtPath, findComponentsInPage, parseScopeEntityNames, } from "../content-matchers/index.js";
4
4
  import { groupArtifacts, runLinterCLI } from "./index.js";
5
5
  const SOFT_CHECK_PENALTIES = {
6
6
  wrongApiCount: 0.3,
7
7
  wrongUiComponentCount: 0.3,
8
8
  lintErrors: 0.3,
9
9
  };
10
+ function getComponentForPropertyCheck(foundComponents, config) {
11
+ if (config.path) {
12
+ return findComponentAtPath(foundComponents, config.path);
13
+ }
14
+ const index = config.index ?? 0;
15
+ return foundComponents[index];
16
+ }
10
17
  // Reusable eval scoring function
11
18
  // ------------------------
12
19
  export async function calculateEvalScore({ artifacts, getTempDir, config, traceData, }) {
13
- const { scopes, pages, apis, components } = groupArtifacts(artifacts);
20
+ const { scopes, pages, apis, customComponents, components } = groupArtifacts(artifacts);
14
21
  const evalChecks = {};
15
22
  const apiNames = apis.map((api) => api.params.apiName.replace(".ts", ""));
16
23
  // Calculate all evaluation results first (no assertions yet)
17
24
  // ------------------------
18
25
  let criticalChecksPassed = true;
19
- // Critical 1: Has expected number of pages (1)
26
+ // Critical 1: Has expected number of pages
27
+ const expectedPageCount = config.expectedPageCount ?? 1;
20
28
  evalChecks.hasExpectedPageCount =
21
- pages.length === 1 && pages[0]?.params.pageName === "Page1";
29
+ pages.length === expectedPageCount &&
30
+ (expectedPageCount > 1
31
+ ? pages.every((page, i) => page.params.pageName === `Page${i + 1}`)
32
+ : pages[0]?.params.pageName === "Page1");
22
33
  if (!evalChecks.hasExpectedPageCount) {
23
34
  criticalChecksPassed = false;
24
35
  }
25
- // Critical 2: Has expected number of scopes (1)
36
+ // Critical 2: Has expected number of scopes
37
+ const expectedScopeCount = config.expectedScopeCount ?? 1;
26
38
  evalChecks.hasExpectedScopeCount =
27
- scopes.length === 1 && scopes[0]?.params.pageName === "Page1";
39
+ scopes.length === expectedScopeCount &&
40
+ (expectedScopeCount > 1
41
+ ? scopes.every((scope, i) => scope.params.pageName === `Page${i + 1}`)
42
+ : scopes[0]?.params.pageName === "Page1");
28
43
  if (!evalChecks.hasExpectedScopeCount) {
29
44
  criticalChecksPassed = false;
30
45
  }
@@ -55,25 +70,25 @@ export async function calculateEvalScore({ artifacts, getTempDir, config, traceD
55
70
  criticalChecksPassed = false;
56
71
  }
57
72
  // Critical 5: Component count check
58
- let hasExpectedComponentCount = false;
73
+ let hasExpectedCustomComponentCount = false;
59
74
  if (typeof config.expectedCustomComponentCount === "number") {
60
- hasExpectedComponentCount =
61
- components.length === config.expectedCustomComponentCount;
75
+ hasExpectedCustomComponentCount =
76
+ customComponents.length === config.expectedCustomComponentCount;
62
77
  }
63
78
  else {
64
79
  const [min, max] = config.expectedCustomComponentCount;
65
- hasExpectedComponentCount =
66
- components.length >= min && components.length <= max;
80
+ hasExpectedCustomComponentCount =
81
+ customComponents.length >= min && customComponents.length <= max;
67
82
  }
68
- evalChecks.hasExpectedComponentCount = hasExpectedComponentCount;
69
- if (!evalChecks.hasExpectedComponentCount) {
83
+ evalChecks.hasExpectedCustomComponentCount = hasExpectedCustomComponentCount;
84
+ if (!evalChecks.hasExpectedCustomComponentCount) {
70
85
  criticalChecksPassed = false;
71
86
  }
72
87
  // Get page content for UI component checks
73
88
  const pageContent = pages[0]?.content;
74
89
  // Critical 6: Required UI components
75
- let hasExpectedUiComponents = true;
76
- for (const uiComponent of config.expectedUiComponents) {
90
+ let hasExpectedUiComponentsInPage = true;
91
+ for (const uiComponent of config.expectedUiComponents ?? []) {
77
92
  if (uiComponent.required) {
78
93
  const foundComponents = findComponentsInPage(pageContent || "", uiComponent.type);
79
94
  let componentCheckPassed = false;
@@ -91,13 +106,107 @@ export async function calculateEvalScore({ artifacts, getTempDir, config, traceD
91
106
  foundComponents.length >= min && foundComponents.length <= max;
92
107
  }
93
108
  if (!componentCheckPassed) {
94
- hasExpectedUiComponents = false;
109
+ hasExpectedUiComponentsInPage = false;
95
110
  break;
96
111
  }
97
112
  }
98
113
  }
99
- evalChecks.hasExpectedUiComponents = hasExpectedUiComponents;
100
- if (!evalChecks.hasExpectedUiComponents) {
114
+ evalChecks.hasExpectedUiComponentsInPage = hasExpectedUiComponentsInPage;
115
+ if (!evalChecks.hasExpectedUiComponentsInPage) {
116
+ criticalChecksPassed = false;
117
+ }
118
+ // Critical check 7: Does it have the expected properties?
119
+ let hasExpectedUiComponentProperties = true;
120
+ if (config.expectedUiComponentProperties) {
121
+ for (const uiComponent of config.expectedUiComponentProperties) {
122
+ const foundComponents = findComponentsInPage(pageContent || "", uiComponent.type);
123
+ const component = getComponentForPropertyCheck(foundComponents, uiComponent);
124
+ if (!component) {
125
+ const selector = uiComponent.path
126
+ ? `at path [${uiComponent.path.join(", ")}]`
127
+ : `at index ${uiComponent.index ?? 0}`;
128
+ throw new Error(`Component of type ${uiComponent.type} ${selector} to check properties on not found`);
129
+ }
130
+ for (const [key, value] of Object.entries(uiComponent.expectedProperties ?? {})) {
131
+ const propertyValueIsCorrect = component.props[key] === value;
132
+ if (!propertyValueIsCorrect) {
133
+ hasExpectedUiComponentProperties = false;
134
+ break;
135
+ }
136
+ }
137
+ // Check for expected undefined properties
138
+ if (uiComponent.expectedUndefinedProperties) {
139
+ for (const undefinedProp of uiComponent.expectedUndefinedProperties) {
140
+ const propertyIsUndefined = !(undefinedProp in component.props) ||
141
+ component.props[undefinedProp] === undefined;
142
+ if (!propertyIsUndefined) {
143
+ hasExpectedUiComponentProperties = false;
144
+ break;
145
+ }
146
+ }
147
+ }
148
+ }
149
+ evalChecks.hasExpectedUiComponentProperties =
150
+ hasExpectedUiComponentProperties;
151
+ if (!hasExpectedUiComponentProperties) {
152
+ criticalChecksPassed = false;
153
+ }
154
+ }
155
+ // Critical check 8: Component artifacts have expected properties
156
+ let hasExpectedComponentArtifacts = true;
157
+ if (config.expectedComponentArtifacts &&
158
+ config.expectedComponentArtifacts.length > 0) {
159
+ for (const expectedComponent of config.expectedComponentArtifacts) {
160
+ // Find component artifact matching the criteria
161
+ const componentArtifact = components.find((comp) => {
162
+ // Parse the component content to check tagName and bindName
163
+ if (comp.filePath !== expectedComponent.filePath) {
164
+ return false;
165
+ }
166
+ // For component artifacts, we need to parse the content to extract properties
167
+ // This is a simplified check - in practice you might need more sophisticated parsing
168
+ const content = comp.content;
169
+ const hasExpectedTag = content.includes(`<${expectedComponent.tagName}`);
170
+ if (expectedComponent.bindName) {
171
+ const hasExpectedBind = content.includes(`bind={${expectedComponent.bindName}}`);
172
+ return hasExpectedTag && hasExpectedBind;
173
+ }
174
+ return hasExpectedTag;
175
+ });
176
+ if (!componentArtifact) {
177
+ hasExpectedComponentArtifacts = false;
178
+ break;
179
+ }
180
+ // Check if the component artifact contains the expected properties
181
+ for (const [propKey, propValue] of Object.entries(expectedComponent.expectedProperties ?? {})) {
182
+ // Simple string-based property check for component artifacts
183
+ // This could be enhanced with proper AST parsing if needed
184
+ const hasProperty = componentArtifact.content.includes(`${propKey}=${JSON.stringify(propValue)}`) ||
185
+ componentArtifact.content.includes(`${propKey}={${JSON.stringify(propValue)}}`);
186
+ if (!hasProperty) {
187
+ hasExpectedComponentArtifacts = false;
188
+ break;
189
+ }
190
+ }
191
+ // Check for expected undefined properties in component artifacts
192
+ if (expectedComponent.expectedUndefinedProperties) {
193
+ for (const undefinedProp of expectedComponent.expectedUndefinedProperties) {
194
+ // Check that the property is NOT present in the component artifact
195
+ const propertyIsPresent = componentArtifact.content.includes(`${undefinedProp}=`) ||
196
+ componentArtifact.content.includes(`${undefinedProp} =`);
197
+ if (propertyIsPresent) {
198
+ hasExpectedComponentArtifacts = false;
199
+ break;
200
+ }
201
+ }
202
+ }
203
+ if (!hasExpectedComponentArtifacts) {
204
+ break;
205
+ }
206
+ }
207
+ }
208
+ evalChecks.hasExpectedComponentArtifacts = hasExpectedComponentArtifacts;
209
+ if (!hasExpectedComponentArtifacts) {
101
210
  criticalChecksPassed = false;
102
211
  }
103
212
  // Soft checks calculation
@@ -120,8 +229,8 @@ export async function calculateEvalScore({ artifacts, getTempDir, config, traceD
120
229
  }
121
230
  evalChecks.hasReasonableApiCount = hasReasonableApiCount;
122
231
  // Soft 2: UI component count tolerance
123
- let hasReasonableUiComponentCounts = true;
124
- for (const uiComponent of config.expectedUiComponents) {
232
+ let hasReasonableUiComponentInPageCounts = true;
233
+ for (const uiComponent of config.expectedUiComponents ?? []) {
125
234
  if (!uiComponent.required) {
126
235
  const foundComponents = findComponentsInPage(pageContent || "", uiComponent.type);
127
236
  let withinTolerance = true;
@@ -138,15 +247,17 @@ export async function calculateEvalScore({ artifacts, getTempDir, config, traceD
138
247
  }
139
248
  if (!withinTolerance) {
140
249
  softScore -= SOFT_CHECK_PENALTIES.wrongUiComponentCount;
141
- hasReasonableUiComponentCounts = false;
250
+ hasReasonableUiComponentInPageCounts = false;
142
251
  }
143
252
  }
144
253
  }
145
- evalChecks.hasReasonableUiComponentCounts = hasReasonableUiComponentCounts;
254
+ evalChecks.hasReasonableUiComponentInPageCounts =
255
+ hasReasonableUiComponentInPageCounts;
146
256
  // Soft 3: Lint errors
147
257
  const lintResult = await runLinterCLI(artifacts, getTempDir());
148
258
  evalChecks.hasLintErrors = lintResult.hasErrors;
149
259
  if (evalChecks.hasLintErrors) {
260
+ console.log("Lint results:", JSON.stringify(lintResult, null, 2));
150
261
  softScore -= SOFT_CHECK_PENALTIES.lintErrors;
151
262
  }
152
263
  // Calculate final eval score
@@ -165,6 +276,7 @@ export async function calculateEvalScore({ artifacts, getTempDir, config, traceD
165
276
  pages,
166
277
  apis,
167
278
  apiNames,
279
+ customComponents,
168
280
  components,
169
281
  },
170
282
  };
@@ -186,10 +298,13 @@ export async function calculateEvalScore({ artifacts, getTempDir, config, traceD
186
298
  softScore,
187
299
  pageCount: pages.length,
188
300
  apiCount: apis.length,
189
- componentCount: components.length,
301
+ customComponents: customComponents.length,
190
302
  uniqueApiCount: new Set(apiNames).size,
191
303
  lintErrorCount: lintResult.errorCount,
192
304
  lintWarningCount: lintResult.warningCount,
305
+ // Count undefined properties checks
306
+ undefinedPropertiesChecked: (config.expectedUiComponentProperties?.reduce((count, comp) => count + (comp.expectedUndefinedProperties?.length || 0), 0) || 0) +
307
+ (config.expectedComponentArtifacts?.reduce((count, comp) => count + (comp.expectedUndefinedProperties?.length || 0), 0) || 0),
193
308
  // Add detailed error counts by rule (sanitize rule names for Datadog)
194
309
  ...Object.entries(lintResult.ruleBreakdown).reduce((acc, [ruleId, counts]) => {
195
310
  // Sanitize rule name: replace special characters with underscores
@@ -208,27 +323,33 @@ export async function calculateEvalScore({ artifacts, getTempDir, config, traceD
208
323
  }
209
324
  // Now run all the assertions (after trace data is sent)
210
325
  // ------------------------
211
- expect(pages).toHaveLength(1);
212
- expect(pages[0]?.params.pageName).toEqual("Page1");
213
- expect(scopes).toHaveLength(1);
214
- expect(scopes[0]?.params.pageName).toEqual("Page1");
326
+ expect(pages).toHaveLength(expectedPageCount);
327
+ for (let i = 0; i < expectedPageCount; i++) {
328
+ expect(pages[i]?.params.pageName).toEqual(`Page${i + 1}`);
329
+ }
330
+ expect(scopes).toHaveLength(expectedScopeCount);
331
+ for (let i = 0; i < expectedScopeCount; i++) {
332
+ expect(scopes[i]?.params.pageName).toEqual(`Page${i + 1}`);
333
+ }
215
334
  expect(new Set(apiNames).size).toBe(apiNames.length);
216
335
  for (const api of apis) {
217
336
  expect(api.params.pageName).toEqual("Page1");
218
337
  }
219
- const scopeEntityNames = parseScopeEntityNames(scopes[0]);
220
- for (const apiName of apiNames) {
221
- expect(scopeEntityNames).toContain(apiName);
338
+ if (expectedScopeCount > 0) {
339
+ const scopeEntityNames = parseScopeEntityNames(scopes[0]);
340
+ for (const apiName of apiNames) {
341
+ expect(scopeEntityNames).toContain(apiName);
342
+ }
222
343
  }
223
344
  if (typeof config.expectedCustomComponentCount === "number") {
224
- expect(components).toHaveLength(config.expectedCustomComponentCount);
345
+ expect(customComponents).toHaveLength(config.expectedCustomComponentCount);
225
346
  }
226
347
  else {
227
348
  const [min, max] = config.expectedCustomComponentCount;
228
- expect(components.length).toBeGreaterThanOrEqual(min);
229
- expect(components.length).toBeLessThanOrEqual(max);
349
+ expect(customComponents.length).toBeGreaterThanOrEqual(min);
350
+ expect(customComponents.length).toBeLessThanOrEqual(max);
230
351
  }
231
- for (const uiComponent of config.expectedUiComponents) {
352
+ for (const uiComponent of config.expectedUiComponents ?? []) {
232
353
  if (uiComponent.required) {
233
354
  const foundComponents = findComponentsInPage(pageContent || "", uiComponent.type);
234
355
  if (typeof uiComponent.expectedCount === "number") {
@@ -254,6 +375,62 @@ export async function calculateEvalScore({ artifacts, getTempDir, config, traceD
254
375
  expect(apis.length).toBeGreaterThanOrEqual(min);
255
376
  expect(apis.length).toBeLessThanOrEqual(max);
256
377
  }
378
+ if (config.expectedUiComponentProperties) {
379
+ for (const expected of config.expectedUiComponentProperties) {
380
+ const { type, expectedProperties } = expected;
381
+ const foundComponents = findComponentsInPage(pageContent || "", type);
382
+ const comp = getComponentForPropertyCheck(foundComponents, expected);
383
+ if (!comp) {
384
+ const selector = expected.path
385
+ ? `at path [${expected.path.join(", ")}]`
386
+ : `at index ${expected.index ?? 0}`;
387
+ throw new Error(`Component of type ${type} ${selector} to check properties on not found`);
388
+ }
389
+ for (const [propKey, propValue] of Object.entries(expectedProperties ?? {})) {
390
+ expect(comp.props && comp.props[propKey] === propValue, `Property "${propKey}" expected value: ${JSON.stringify(propValue)}, actual: ${JSON.stringify(comp.props ? comp.props[propKey] : undefined)}`).toBeTruthy();
391
+ }
392
+ // Check assertions for expected undefined properties
393
+ if (expected.expectedUndefinedProperties) {
394
+ for (const undefinedProp of expected.expectedUndefinedProperties) {
395
+ expect(!(undefinedProp in comp.props) ||
396
+ comp.props[undefinedProp] === undefined, `Property "${undefinedProp}" should be undefined but was: ${JSON.stringify(comp.props ? comp.props[undefinedProp] : undefined)}`).toBeTruthy();
397
+ }
398
+ }
399
+ }
400
+ }
401
+ // Component artifacts assertions
402
+ if (config.expectedComponentArtifacts) {
403
+ for (const expectedComponent of config.expectedComponentArtifacts) {
404
+ const componentArtifact = components.find((comp) => {
405
+ if (comp.filePath !== expectedComponent.filePath) {
406
+ return false;
407
+ }
408
+ const content = comp.content;
409
+ const hasExpectedTag = content.includes(`<${expectedComponent.tagName}`);
410
+ if (expectedComponent.bindName) {
411
+ const hasExpectedBind = content.includes(`bind={${expectedComponent.bindName}}`);
412
+ return hasExpectedTag && hasExpectedBind;
413
+ }
414
+ return hasExpectedTag;
415
+ });
416
+ expect(componentArtifact, `Component artifact not found for ${expectedComponent.tagName} in ${expectedComponent.filePath}`).toBeDefined();
417
+ if (componentArtifact) {
418
+ for (const [propKey, propValue] of Object.entries(expectedComponent.expectedProperties ?? {})) {
419
+ const hasProperty = componentArtifact.content.includes(`${propKey}=${JSON.stringify(propValue)}`) ||
420
+ componentArtifact.content.includes(`${propKey}={${JSON.stringify(propValue)}}`);
421
+ expect(hasProperty, `Component artifact missing expected property ${propKey}=${JSON.stringify(propValue)}`).toBeTruthy();
422
+ }
423
+ // Check assertions for expected undefined properties in component artifacts
424
+ if (expectedComponent.expectedUndefinedProperties) {
425
+ for (const undefinedProp of expectedComponent.expectedUndefinedProperties) {
426
+ const propertyIsPresent = componentArtifact.content.includes(`${undefinedProp}=`) ||
427
+ componentArtifact.content.includes(`${undefinedProp} =`);
428
+ expect(!propertyIsPresent, `Component artifact should not have property "${undefinedProp}" but it was found`).toBeTruthy();
429
+ }
430
+ }
431
+ }
432
+ }
433
+ }
257
434
  // Lint check assertion
258
435
  if (lintResult.hasErrors) {
259
436
  console.log("Lint results:", JSON.stringify(lintResult, null, 2));
@@ -1 +1 @@
1
- {"version":3,"file":"eval-scoring.js","sourceRoot":"","sources":["../../../../src/ai-service/evals/helpers/eval-scoring.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"eval-scoring.js","sourceRoot":"","sources":["../../../../src/ai-service/evals/helpers/eval-scoring.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,10 @@
1
1
  import { type Tracer } from "dd-trace";
2
2
  import { Paths } from "../../const.js";
3
3
  import type { FileArtifact, PathParams } from "../../types.js";
4
+ import type { NodePath } from "@babel/traverse";
5
+ import type { Node } from "@babel/types";
4
6
  export declare const waitForNextTick: () => Promise<unknown>;
7
+ export declare const logLLMResponse: (result: any) => void;
5
8
  export declare function sanitizeErrorForTests(error: any): any;
6
9
  export declare function generateTextSafe(config: any): Promise<import("ai").GenerateTextResult<import("ai").ToolSet, never>>;
7
10
  export declare function wrapLLM<T>(fn: () => Promise<T>, options?: {
@@ -13,12 +16,28 @@ export type MatchedArtifact<T extends string> = FileArtifact & {
13
16
  };
14
17
  export declare function extractArtifacts(text: string): FileArtifact[];
15
18
  export declare function readDemoAppArtifacts(patterns?: string[]): Promise<FileArtifact[]>;
19
+ export declare function readAppArtifacts(appPath: string, patterns?: string[]): Promise<FileArtifact[]>;
20
+ export interface ComponentSearchCriteria {
21
+ tagName: string;
22
+ bindName?: string;
23
+ elementId?: string;
24
+ attributeFilters?: Record<string, string>;
25
+ /** If true, returns all matches instead of just the first one */
26
+ findAll?: boolean;
27
+ /** Zero-based index of which match to return (only used when findAll is false) */
28
+ matchIndex?: number;
29
+ }
30
+ export declare function createComponentNodePath(appPath: string, filePath: string, criteria: ComponentSearchCriteria): Promise<NodePath<Node> | undefined>;
31
+ export declare function createComponentNodePath(appPath: string, filePath: string, criteria: ComponentSearchCriteria & {
32
+ findAll: true;
33
+ }): Promise<NodePath<Node>[]>;
16
34
  export declare function groupArtifacts(artifacts: FileArtifact[]): {
17
35
  packageJson: FileArtifact | null;
18
36
  scopes: MatchedArtifact<Paths.PageScopes>[];
19
37
  pages: MatchedArtifact<Paths.PageIndexes>[];
20
38
  apis: MatchedArtifact<Paths.GeneratedApis>[];
21
- components: MatchedArtifact<Paths.ComponentsFile>[];
39
+ components: MatchedArtifact<any>[];
40
+ customComponents: MatchedArtifact<Paths.ComponentsFile>[];
22
41
  other: FileArtifact[];
23
42
  };
24
43
  export declare function useTempDir(): (testName?: string) => string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/evals/helpers/index.ts"],"names":[],"mappings":"AAOA,OAAgB,EAAE,KAAK,MAAM,EAAE,MAAM,UAAU,CAAC;AAOhD,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEvC,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE/D,eAAO,MAAM,eAAe,wBACyB,CAAC;AAGtD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,GAAG,GAAG,GAAG,CAuBrD;AAGD,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,GAAG,yEAOjD;AAED,wBAAsB,OAAO,CAAC,CAAC,EAC7B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,OAAO,CAAC,EAAE;IACR,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACjE,GACA,OAAO,CAAC,CAAC,CAAC,CA0BZ;AAED,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,MAAM,IAAI,YAAY,GAAG;IAC7D,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;CACvB,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,kBAG5C;AAED,wBAAsB,oBAAoB,CACxC,QAAQ,WAA6C,2BAatD;AAYD,wBAAgB,cAAc,CAAC,SAAS,EAAE,YAAY,EAAE;iBA4C7B,YAAY,GAAG,IAAI;YAC1B,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE;WACpC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE;UACrC,eAAe,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE;gBAChC,eAAe,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE;WAC5C,YAAY,EAAE;EAGhC;AAED,wBAAgB,UAAU,KAWhB,WAAW,MAAM,YAQ1B;AAED,wBAAgB,YAAY,SAiB3B;AAED,wBAAsB,SAAS,CAAC,SAAS,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,MAAM,mBAuEzE;AAED,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpE,SAAS,EAAE,OAAO,CAAC;CACpB;AAgDD,wBAAsB,YAAY,CAChC,SAAS,EAAE,YAAY,EAAE,EACzB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,UAAU,CAAC,CAgKrB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/evals/helpers/index.ts"],"names":[],"mappings":"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"}
@@ -3,18 +3,25 @@ import { readFile } from "node:fs/promises";
3
3
  import { mkdir, mkdtemp, rm, writeFile, symlink } from "node:fs/promises";
4
4
  import os from "node:os";
5
5
  import path from "node:path";
6
+ import { parse } from "@babel/parser";
6
7
  import superblocksLinter from "@superblocksteam/linter";
7
8
  import { generateText } from "ai";
8
9
  import ddTrace, {} from "dd-trace";
9
10
  import { ESLint } from "eslint";
10
11
  import { expect, beforeEach, afterEach } from "vitest";
11
12
  import packageJson from "../../../../package.json" with { type: "json" };
13
+ import { traverse } from "../../../traverse.js";
12
14
  import { OperationQueue } from "../../../util/operation-queue.js";
13
15
  import { AppShell } from "../../app-interface/shell.js";
14
16
  import { BoltArtifactProcessor } from "../../artifacts/bolt.js";
15
17
  import { Paths } from "../../const.js";
16
18
  import { matchMultiplePaths, matchPath } from "../../transform/shared.js";
17
19
  export const waitForNextTick = () => new Promise((resolve) => setTimeout(resolve, 1000));
20
+ export const logLLMResponse = (result) => {
21
+ console.log("====== LLM Response text:");
22
+ console.log(result.text);
23
+ console.log("====== End LLM Response text:");
24
+ };
18
25
  // Helper function to sanitize errors and prevent logging system prompts
19
26
  export function sanitizeErrorForTests(error) {
20
27
  if (typeof error !== "object" || error === null) {
@@ -71,6 +78,98 @@ export async function readDemoAppArtifacts(patterns = ["**/*.{ts,tsx,yaml,css}",
71
78
  });
72
79
  return await appShell.readFiles(patterns);
73
80
  }
81
+ export async function readAppArtifacts(appPath, patterns = ["**/*.{ts,tsx,yaml,css}", "package.json"]) {
82
+ // Get default app artifacts first
83
+ const defaultArtifacts = await readDemoAppArtifacts(patterns);
84
+ // Get specific app artifacts
85
+ const fullAppPath = path.resolve(__dirname, "../input-context", appPath);
86
+ const fsOperationQueue = new OperationQueue();
87
+ const appShell = new AppShell({
88
+ appRootDirPath: fullAppPath,
89
+ fsOperationQueue,
90
+ });
91
+ const specificArtifacts = await appShell.readFiles(patterns);
92
+ // Create a map for easy merging, keyed by file path
93
+ const artifactMap = new Map();
94
+ // Add default artifacts first
95
+ for (const artifact of defaultArtifacts) {
96
+ artifactMap.set(artifact.filePath, artifact);
97
+ }
98
+ // Add specific artifacts, overriding defaults if they exist
99
+ for (const artifact of specificArtifacts) {
100
+ artifactMap.set(artifact.filePath, artifact);
101
+ }
102
+ // Return merged artifacts as array
103
+ return Array.from(artifactMap.values());
104
+ }
105
+ export async function createComponentNodePath(appPath, filePath, criteria) {
106
+ const artifacts = await readAppArtifacts(appPath);
107
+ const targetArtifact = artifacts.find((a) => a.filePath === filePath);
108
+ if (!targetArtifact) {
109
+ return criteria.findAll ? [] : undefined;
110
+ }
111
+ const ast = parse(targetArtifact.content, {
112
+ sourceType: "module",
113
+ plugins: ["jsx", "typescript"],
114
+ });
115
+ const matches = [];
116
+ const targetIndex = criteria.matchIndex ?? 0;
117
+ traverse(ast, {
118
+ JSXOpeningElement(path) {
119
+ if (path.node.name.type === "JSXIdentifier" &&
120
+ path.node.name.name === criteria.tagName) {
121
+ let isMatch = true;
122
+ // Check bind attribute if specified
123
+ if (criteria.bindName) {
124
+ const bindAttr = path.node.attributes.find((attr) => attr.type === "JSXAttribute" &&
125
+ attr.name.type === "JSXIdentifier" &&
126
+ attr.name.name === "bind" &&
127
+ attr.value?.type === "JSXExpressionContainer" &&
128
+ attr.value.expression.type === "Identifier" &&
129
+ attr.value.expression.name === criteria.bindName);
130
+ if (!bindAttr)
131
+ isMatch = false;
132
+ }
133
+ // Check element ID if specified
134
+ if (criteria.elementId && isMatch) {
135
+ const idAttr = path.node.attributes.find((attr) => attr.type === "JSXAttribute" &&
136
+ attr.name.type === "JSXIdentifier" &&
137
+ attr.name.name === "data-sb-id" &&
138
+ attr.value?.type === "StringLiteral" &&
139
+ attr.value.value === criteria.elementId);
140
+ if (!idAttr)
141
+ isMatch = false;
142
+ }
143
+ // Check additional attribute filters if specified
144
+ if (criteria.attributeFilters && isMatch) {
145
+ for (const [attrName, attrValue] of Object.entries(criteria.attributeFilters)) {
146
+ const attr = path.node.attributes.find((attr) => attr.type === "JSXAttribute" &&
147
+ attr.name.type === "JSXIdentifier" &&
148
+ attr.name.name === attrName);
149
+ if (!attr ||
150
+ (attr.type === "JSXAttribute" &&
151
+ attr.value?.type === "StringLiteral" &&
152
+ attr.value.value !== attrValue)) {
153
+ isMatch = false;
154
+ break;
155
+ }
156
+ }
157
+ }
158
+ if (isMatch) {
159
+ matches.push(path);
160
+ // If we're not finding all matches and we've reached our target index, stop
161
+ if (!criteria.findAll && matches.length > targetIndex) {
162
+ path.stop();
163
+ }
164
+ }
165
+ }
166
+ },
167
+ });
168
+ if (criteria.findAll) {
169
+ return matches;
170
+ }
171
+ return matches[targetIndex] || undefined;
172
+ }
74
173
  async function writeArtifacts(artifacts, tempDir) {
75
174
  return Promise.all(artifacts.map(async (artifact) => {
76
175
  const fullPath = path.join(tempDir, artifact.filePath);
@@ -88,7 +187,13 @@ export function groupArtifacts(artifacts) {
88
187
  const pageScopeMatch = pageScopeMatcher(file.filePath);
89
188
  const apiPathMatch = apiPathMatcher(file.filePath);
90
189
  const componentPathsMatch = componentPathsMatcher(file.filePath);
91
- if (file.filePath === Paths.PackageJson) {
190
+ if (file.type === "component") {
191
+ acc.components.push({
192
+ ...file,
193
+ params: {},
194
+ });
195
+ }
196
+ else if (file.filePath === Paths.PackageJson) {
92
197
  acc.packageJson = file;
93
198
  }
94
199
  else if (pagePathMatch.matched) {
@@ -110,7 +215,7 @@ export function groupArtifacts(artifacts) {
110
215
  });
111
216
  }
112
217
  else if (componentPathsMatch.matched) {
113
- acc.components.push({
218
+ acc.customComponents.push({
114
219
  ...file,
115
220
  params: componentPathsMatch.params,
116
221
  });
@@ -125,6 +230,7 @@ export function groupArtifacts(artifacts) {
125
230
  pages: [],
126
231
  apis: [],
127
232
  components: [],
233
+ customComponents: [],
128
234
  other: [],
129
235
  });
130
236
  }