@plitzi/sdk-server 0.32.25 → 0.33.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 (514) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +326 -162
  3. package/dist/adapters/authAdapters.d.ts +21 -0
  4. package/dist/adapters/authAdapters.js +12 -0
  5. package/dist/adapters/jsonAdapters.d.ts +15 -0
  6. package/dist/adapters/jsonAdapters.js +9 -4
  7. package/dist/core/auth/api.d.ts +148 -0
  8. package/dist/core/auth/api.js +286 -0
  9. package/dist/core/auth/authorize.d.ts +96 -0
  10. package/dist/core/auth/authorize.js +92 -0
  11. package/dist/core/auth/createAuth.d.ts +165 -0
  12. package/dist/core/auth/createAuth.js +105 -0
  13. package/dist/core/auth/credentials.d.ts +29 -0
  14. package/dist/core/auth/credentials.js +48 -0
  15. package/dist/core/auth/domains.d.ts +41 -0
  16. package/dist/core/auth/domains.js +78 -0
  17. package/dist/core/auth/identity.d.ts +108 -0
  18. package/dist/core/auth/identity.js +164 -0
  19. package/dist/core/auth/oauth/client.d.ts +5 -0
  20. package/dist/core/auth/oauth/client.js +47 -0
  21. package/dist/core/auth/oauth/index.d.ts +78 -0
  22. package/dist/core/auth/oauth/index.js +113 -0
  23. package/dist/core/auth/oauth/providers/github.d.ts +2 -0
  24. package/dist/core/auth/oauth/providers/github.js +48 -0
  25. package/dist/core/auth/oauth/providers/google.d.ts +2 -0
  26. package/dist/core/auth/oauth/providers/google.js +30 -0
  27. package/dist/core/auth/oauth/state.d.ts +23 -0
  28. package/dist/core/auth/oauth/state.js +55 -0
  29. package/dist/core/auth/oauth/types.d.ts +51 -0
  30. package/dist/core/auth/oauth/types.js +13 -0
  31. package/dist/core/auth/routes.d.ts +50 -0
  32. package/dist/core/auth/routes.js +129 -0
  33. package/dist/core/auth/session.d.ts +128 -0
  34. package/dist/core/auth/session.js +165 -0
  35. package/dist/core/auth/spaceTokens.d.ts +137 -0
  36. package/dist/core/auth/spaceTokens.js +212 -0
  37. package/dist/core/auth/tokens.d.ts +151 -0
  38. package/dist/core/auth/tokens.js +221 -0
  39. package/dist/core/createServer.d.ts +29 -0
  40. package/dist/core/createServer.js +28 -14
  41. package/dist/core/handlers/authMiddleware.d.ts +27 -0
  42. package/dist/core/handlers/authMiddleware.js +38 -0
  43. package/dist/core/handlers/authRouteHandlers.d.ts +46 -0
  44. package/dist/core/handlers/authRouteHandlers.js +75 -0
  45. package/dist/core/handlers/types.d.ts +37 -0
  46. package/dist/{src/core → core}/http/dispatcher.d.ts +2 -2
  47. package/dist/core/http/dispatcher.js +8 -6
  48. package/dist/core/http/navigation.d.ts +11 -0
  49. package/dist/core/http/navigation.js +16 -0
  50. package/dist/core/http/securityHeaders.js +6 -4
  51. package/dist/core/http/stages/authApi.d.ts +17 -0
  52. package/dist/core/http/stages/authApi.js +66 -0
  53. package/dist/core/http/stages/authRoutes.js +40 -11
  54. package/dist/core/http/stages/exchangeRoute.d.ts +15 -0
  55. package/dist/core/http/stages/exchangeRoute.js +67 -0
  56. package/dist/core/http/stages/health.d.ts +11 -0
  57. package/dist/core/http/stages/health.js +25 -3
  58. package/dist/core/http/stages/middlewares.d.ts +2 -0
  59. package/dist/core/http/stages/static.d.ts +13 -0
  60. package/dist/core/http/stages/static.js +21 -6
  61. package/dist/core/http/types.d.ts +35 -0
  62. package/dist/{modules/mcp/constants.js → core/previewToken.js} +1 -1
  63. package/dist/core/sdkAssets.d.ts +16 -0
  64. package/dist/core/sdkAssets.js +46 -0
  65. package/dist/core/server/baseServer.js +40 -5
  66. package/dist/core/server/pageServer.d.ts +7 -0
  67. package/dist/core/server/pageServer.js +13 -17
  68. package/dist/core/services/action.d.ts +9 -0
  69. package/dist/core/services/action.js +21 -0
  70. package/dist/core/services/registry.d.ts +3 -0
  71. package/dist/core/services/registry.js +9 -19
  72. package/dist/{src/core → core}/services/resolve.d.ts +1 -0
  73. package/dist/core/services/resolve.js +6 -4
  74. package/dist/core/services/rsc.js +3 -2
  75. package/dist/core/staticFiles.js +1 -1
  76. package/dist/{src/core → core}/transports.d.ts +3 -0
  77. package/dist/core/transports.js +7 -6
  78. package/dist/handlers.d.ts +58 -0
  79. package/dist/handlers.js +3 -0
  80. package/dist/{src/helpers → helpers}/buildResponseHelpers.d.ts +2 -1
  81. package/dist/helpers/buildResponseHelpers.js +13 -4
  82. package/dist/helpers/buildServerInfo.d.ts +3 -0
  83. package/dist/helpers/buildServerInfo.js +25 -3
  84. package/dist/{src/helpers → helpers}/cache/keys.d.ts +5 -1
  85. package/dist/helpers/cache/keys.js +1 -1
  86. package/dist/helpers/compress.d.ts +18 -0
  87. package/dist/helpers/compress.js +47 -11
  88. package/dist/helpers/offlineDataLoader.d.ts +11 -0
  89. package/dist/helpers/offlineDataLoader.js +15 -0
  90. package/dist/helpers/resolveDebugMode.d.ts +10 -0
  91. package/dist/helpers/resolveDebugMode.js +13 -0
  92. package/dist/index.d.ts +16 -2
  93. package/dist/index.js +9 -20
  94. package/dist/kernel.d.ts +41 -0
  95. package/dist/kernel.js +22 -0
  96. package/dist/middlewares/spaceDeployment.d.ts +2 -0
  97. package/dist/middlewares/spaceDeployment.js +2 -1
  98. package/dist/modules/actions/handler.d.ts +11 -0
  99. package/dist/modules/actions/handler.js +77 -0
  100. package/dist/modules/connectors/engine.d.ts +42 -0
  101. package/dist/modules/connectors/engine.js +221 -0
  102. package/dist/modules/connectors/getByPath.d.ts +8 -0
  103. package/dist/modules/connectors/getByPath.js +21 -0
  104. package/dist/modules/connectors/index.d.ts +7 -0
  105. package/dist/modules/connectors/projection.d.ts +18 -0
  106. package/dist/modules/connectors/projection.js +108 -0
  107. package/dist/modules/connectors/resolver.d.ts +18 -0
  108. package/dist/modules/connectors/resolver.js +68 -0
  109. package/dist/modules/connectors/types.d.ts +19 -0
  110. package/dist/{src/modules → modules}/rsc/handler.d.ts +2 -2
  111. package/dist/modules/rsc/handler.js +54 -2
  112. package/dist/modules/rsc/resolveRscData.d.ts +35 -0
  113. package/dist/modules/rsc/resolveRscData.js +74 -0
  114. package/dist/{src/modules → modules}/ssr/Component.d.ts +4 -1
  115. package/dist/modules/ssr/Component.js +10 -3
  116. package/dist/modules/ssr/buildBody.d.ts +9 -0
  117. package/dist/modules/ssr/handler.d.ts +4 -0
  118. package/dist/modules/ssr/handler.js +18 -1
  119. package/dist/{src/modules → modules}/ssr/loadPluginComponents.d.ts +5 -2
  120. package/dist/modules/ssr/loadPluginComponents.js +20 -2
  121. package/dist/{src/modules → modules}/ssr/prepareRender.d.ts +2 -2
  122. package/dist/modules/ssr/prepareRender.js +24 -7
  123. package/dist/modules/ssr/preview.d.ts +10 -0
  124. package/dist/modules/ssr/preview.js +5 -78
  125. package/dist/modules/ssr/registerExternalPlugins.js +1 -1
  126. package/dist/modules/ssr/streamBody.d.ts +5 -0
  127. package/dist/modules/ssr/streamBody.js +1 -1
  128. package/dist/modules/ssr/template.d.ts +2 -0
  129. package/dist/modules/ssr/template.js +1 -1
  130. package/dist/plugins/compile.js +1 -1
  131. package/dist/plugins/manager.js +12 -8
  132. package/dist/ssr.d.ts +15 -0
  133. package/dist/ssr.js +4 -0
  134. package/package.json +29 -25
  135. package/dist/.gitkeep +0 -0
  136. package/dist/core/server/mcpServer.js +0 -29
  137. package/dist/core/services/mcp.js +0 -27
  138. package/dist/core/services/oauth.js +0 -116
  139. package/dist/core/services/preview.js +0 -37
  140. package/dist/core/services/proxy.js +0 -12
  141. package/dist/mcp.d.ts +0 -2
  142. package/dist/mcp.js +0 -7
  143. package/dist/modules/ai/AIEngine.js +0 -120
  144. package/dist/modules/ai/toolkit.js +0 -59
  145. package/dist/modules/mcp/apps/example/view/index.tsx +0 -70
  146. package/dist/modules/mcp/apps/index.js +0 -16
  147. package/dist/modules/mcp/apps/render/index.js +0 -17
  148. package/dist/modules/mcp/apps/render/styles.js +0 -54
  149. package/dist/modules/mcp/apps/render/view/heldBatch.ts +0 -107
  150. package/dist/modules/mcp/apps/render/view/index.tsx +0 -314
  151. package/dist/modules/mcp/apps/render/view/streamProgress.ts +0 -137
  152. package/dist/modules/mcp/apps/shared/assets.js +0 -10
  153. package/dist/modules/mcp/apps/shared/bundle.js +0 -23
  154. package/dist/modules/mcp/apps/shared/page.js +0 -34
  155. package/dist/modules/mcp/apps/shared/registerApp.js +0 -43
  156. package/dist/modules/mcp/apps/shared/resolve.js +0 -5
  157. package/dist/modules/mcp/apps/shared/shell.ejs +0 -59
  158. package/dist/modules/mcp/apps/shared/zodEnglishOnly.js +0 -23
  159. package/dist/modules/mcp/catalogs/builtinCallbacks.js +0 -204
  160. package/dist/modules/mcp/catalogs/builtinComponents.js +0 -170
  161. package/dist/modules/mcp/catalogs/builtinElementCallbacks.js +0 -50
  162. package/dist/modules/mcp/catalogs/builtinTransformers.js +0 -148
  163. package/dist/modules/mcp/catalogs/builtinUtilities.js +0 -90
  164. package/dist/modules/mcp/catalogs/cssCatalog/border.js +0 -30
  165. package/dist/modules/mcp/catalogs/cssCatalog/box.js +0 -31
  166. package/dist/modules/mcp/catalogs/cssCatalog/helpers.js +0 -185
  167. package/dist/modules/mcp/catalogs/cssCatalog/index.js +0 -131
  168. package/dist/modules/mcp/catalogs/cssCatalog/layout.js +0 -98
  169. package/dist/modules/mcp/catalogs/cssCatalog/visual.js +0 -144
  170. package/dist/modules/mcp/catalogs/observed.js +0 -90
  171. package/dist/modules/mcp/catalogs/paramSpec.js +0 -69
  172. package/dist/modules/mcp/catalogs/registry.js +0 -89
  173. package/dist/modules/mcp/handler.js +0 -83
  174. package/dist/modules/mcp/helpers/agentPrompt.js +0 -104
  175. package/dist/modules/mcp/helpers/computeVersion.js +0 -16
  176. package/dist/modules/mcp/helpers/guide.js +0 -467
  177. package/dist/modules/mcp/helpers/interactions.js +0 -123
  178. package/dist/modules/mcp/helpers/log.js +0 -64
  179. package/dist/modules/mcp/helpers/opResult.js +0 -18
  180. package/dist/modules/mcp/helpers/space.js +0 -300
  181. package/dist/modules/mcp/helpers/uris.js +0 -44
  182. package/dist/modules/mcp/previewClient.js +0 -31
  183. package/dist/modules/mcp/proxy/config.js +0 -63
  184. package/dist/modules/mcp/proxy/fetch.js +0 -91
  185. package/dist/modules/mcp/proxy/grant.js +0 -67
  186. package/dist/modules/mcp/proxy/guard.js +0 -38
  187. package/dist/modules/mcp/proxy/handler.js +0 -99
  188. package/dist/modules/mcp/proxy/payload.js +0 -29
  189. package/dist/modules/mcp/proxy/rewrite.js +0 -138
  190. package/dist/modules/mcp/proxy/sign.js +0 -15
  191. package/dist/modules/mcp/proxy/types.js +0 -9
  192. package/dist/modules/mcp/resources/canonical.js +0 -30
  193. package/dist/modules/mcp/resources/core.js +0 -18
  194. package/dist/modules/mcp/resources/envelope.js +0 -14
  195. package/dist/modules/mcp/resources/primer.js +0 -31
  196. package/dist/modules/mcp/resources/register.js +0 -190
  197. package/dist/modules/mcp/resources/renderGuide.js +0 -451
  198. package/dist/modules/mcp/resources/router.js +0 -37
  199. package/dist/modules/mcp/resources/schema.js +0 -43
  200. package/dist/modules/mcp/resources/style.js +0 -34
  201. package/dist/modules/mcp/screenshotClient.js +0 -47
  202. package/dist/modules/mcp/server.js +0 -113
  203. package/dist/modules/mcp/tools/apply/dispatch.js +0 -105
  204. package/dist/modules/mcp/tools/apply/index.js +0 -150
  205. package/dist/modules/mcp/tools/apply/writeResult.js +0 -37
  206. package/dist/modules/mcp/tools/index.js +0 -24
  207. package/dist/modules/mcp/tools/operations/index.js +0 -45
  208. package/dist/modules/mcp/tools/operations/schema/bindings/deleteBinding.js +0 -32
  209. package/dist/modules/mcp/tools/operations/schema/bindings/patchBinding.js +0 -36
  210. package/dist/modules/mcp/tools/operations/schema/bindings/upsertBinding.js +0 -47
  211. package/dist/modules/mcp/tools/operations/schema/elements/deleteElement.js +0 -29
  212. package/dist/modules/mcp/tools/operations/schema/elements/moveElement.js +0 -41
  213. package/dist/modules/mcp/tools/operations/schema/elements/patchElement.js +0 -58
  214. package/dist/modules/mcp/tools/operations/schema/elements/repeatElement.js +0 -148
  215. package/dist/modules/mcp/tools/operations/schema/elements/upsertElement.js +0 -65
  216. package/dist/modules/mcp/tools/operations/schema/folders/deleteFolder.js +0 -30
  217. package/dist/modules/mcp/tools/operations/schema/folders/upsertFolder.js +0 -49
  218. package/dist/modules/mcp/tools/operations/schema/interactions/deleteInteraction.js +0 -52
  219. package/dist/modules/mcp/tools/operations/schema/interactions/patchInteractionNode.js +0 -47
  220. package/dist/modules/mcp/tools/operations/schema/interactions/upsertInteractionFlow.js +0 -44
  221. package/dist/modules/mcp/tools/operations/schema/operations.js +0 -41
  222. package/dist/modules/mcp/tools/operations/schema/pages/deletePage.js +0 -25
  223. package/dist/modules/mcp/tools/operations/schema/pages/upsertPage.js +0 -75
  224. package/dist/modules/mcp/tools/operations/schema/settings/patchSettings.js +0 -45
  225. package/dist/modules/mcp/tools/operations/schema/shared.js +0 -122
  226. package/dist/modules/mcp/tools/operations/schema/translator.js +0 -215
  227. package/dist/modules/mcp/tools/operations/schema/variables/deleteVariable.js +0 -18
  228. package/dist/modules/mcp/tools/operations/schema/variables/upsertVariable.js +0 -42
  229. package/dist/modules/mcp/tools/operations/schema/write.js +0 -109
  230. package/dist/modules/mcp/tools/operations/schemaIds.js +0 -54
  231. package/dist/modules/mcp/tools/operations/style/definitions/deleteDefinition.js +0 -21
  232. package/dist/modules/mcp/tools/operations/style/definitions/patchDefinition.js +0 -28
  233. package/dist/modules/mcp/tools/operations/style/definitions/upsertDefinition.js +0 -24
  234. package/dist/modules/mcp/tools/operations/style/definitions/upsertDefinitions.js +0 -40
  235. package/dist/modules/mcp/tools/operations/style/globalStyles/deleteGlobalStyle.js +0 -21
  236. package/dist/modules/mcp/tools/operations/style/globalStyles/patchGlobalStyle.js +0 -28
  237. package/dist/modules/mcp/tools/operations/style/globalStyles/upsertGlobalStyle.js +0 -24
  238. package/dist/modules/mcp/tools/operations/style/idStyles/deleteIdStyle.js +0 -21
  239. package/dist/modules/mcp/tools/operations/style/idStyles/patchIdStyle.js +0 -28
  240. package/dist/modules/mcp/tools/operations/style/idStyles/upsertIdStyle.js +0 -24
  241. package/dist/modules/mcp/tools/operations/style/operations.js +0 -29
  242. package/dist/modules/mcp/tools/operations/style/shared.js +0 -59
  243. package/dist/modules/mcp/tools/operations/style/translator.js +0 -101
  244. package/dist/modules/mcp/tools/operations/style/variables/deleteStyleVariable.js +0 -21
  245. package/dist/modules/mcp/tools/operations/style/variables/upsertStyleVariable.js +0 -22
  246. package/dist/modules/mcp/tools/operations/style/write.js +0 -108
  247. package/dist/modules/mcp/tools/preview.js +0 -37
  248. package/dist/modules/mcp/tools/read.js +0 -51
  249. package/dist/modules/mcp/tools/render.js +0 -184
  250. package/dist/modules/mcp/tools/screenshot.js +0 -83
  251. package/dist/modules/mcp/tools/search.js +0 -115
  252. package/dist/modules/mcp/tools/shared/expandOperations.js +0 -44
  253. package/dist/modules/mcp/tools/shared/tool.js +0 -33
  254. package/dist/modules/mcp/tools/shared/validator/audit.js +0 -124
  255. package/dist/modules/mcp/tools/shared/validator/batch.js +0 -39
  256. package/dist/modules/mcp/tools/shared/validator/bindings.js +0 -70
  257. package/dist/modules/mcp/tools/shared/validator/context.js +0 -35
  258. package/dist/modules/mcp/tools/shared/validator/css.js +0 -39
  259. package/dist/modules/mcp/tools/shared/validator/elements.js +0 -68
  260. package/dist/modules/mcp/tools/shared/validator/index.js +0 -246
  261. package/dist/modules/mcp/tools/shared/validator/interactions.js +0 -103
  262. package/dist/modules/mcp/tools/shared/validator/refs.js +0 -28
  263. package/dist/modules/mcp/tools/validate.js +0 -47
  264. package/dist/modules/oauth/authorize.js +0 -177
  265. package/dist/modules/oauth/challenge.js +0 -33
  266. package/dist/modules/oauth/consentPage.js +0 -118
  267. package/dist/modules/oauth/metadata.js +0 -69
  268. package/dist/modules/oauth/params.js +0 -5
  269. package/dist/modules/oauth/pkce.js +0 -15
  270. package/dist/modules/oauth/records.js +0 -46
  271. package/dist/modules/oauth/register.js +0 -55
  272. package/dist/modules/oauth/respond.js +0 -44
  273. package/dist/modules/oauth/token.js +0 -100
  274. package/dist/public/.gitkeep +0 -0
  275. package/dist/src/adapters/jsonAdapters.d.ts +0 -7
  276. package/dist/src/core/createServer.d.ts +0 -14
  277. package/dist/src/core/http/stages/health.d.ts +0 -2
  278. package/dist/src/core/http/stages/middlewares.d.ts +0 -2
  279. package/dist/src/core/http/stages/static.d.ts +0 -5
  280. package/dist/src/core/http/types.d.ts +0 -22
  281. package/dist/src/core/server/mcpServer.d.ts +0 -2
  282. package/dist/src/core/server/pageServer.d.ts +0 -10
  283. package/dist/src/core/services/mcp.d.ts +0 -3
  284. package/dist/src/core/services/oauth.d.ts +0 -18
  285. package/dist/src/core/services/preview.d.ts +0 -2
  286. package/dist/src/core/services/proxy.d.ts +0 -2
  287. package/dist/src/core/services/registry.d.ts +0 -4
  288. package/dist/src/helpers/buildServerInfo.d.ts +0 -2
  289. package/dist/src/helpers/compress.d.ts +0 -3
  290. package/dist/src/index.d.ts +0 -15
  291. package/dist/src/mcp.d.ts +0 -14
  292. package/dist/src/middlewares/spaceDeployment.d.ts +0 -2
  293. package/dist/src/modules/ai/AIEngine.d.ts +0 -20
  294. package/dist/src/modules/ai/index.d.ts +0 -4
  295. package/dist/src/modules/ai/toolkit.d.ts +0 -17
  296. package/dist/src/modules/mcp/apps/example/index.d.ts +0 -8
  297. package/dist/src/modules/mcp/apps/index.d.ts +0 -11
  298. package/dist/src/modules/mcp/apps/render/index.d.ts +0 -4
  299. package/dist/src/modules/mcp/apps/render/styles.d.ts +0 -10
  300. package/dist/src/modules/mcp/apps/shared/assets.d.ts +0 -10
  301. package/dist/src/modules/mcp/apps/shared/bundle.d.ts +0 -4
  302. package/dist/src/modules/mcp/apps/shared/index.d.ts +0 -3
  303. package/dist/src/modules/mcp/apps/shared/page.d.ts +0 -2
  304. package/dist/src/modules/mcp/apps/shared/registerApp.d.ts +0 -5
  305. package/dist/src/modules/mcp/apps/shared/resolve.d.ts +0 -1
  306. package/dist/src/modules/mcp/apps/shared/zodEnglishOnly.d.ts +0 -4
  307. package/dist/src/modules/mcp/catalogs/builtinCallbacks.d.ts +0 -23
  308. package/dist/src/modules/mcp/catalogs/builtinComponents.d.ts +0 -4
  309. package/dist/src/modules/mcp/catalogs/builtinElementCallbacks.d.ts +0 -20
  310. package/dist/src/modules/mcp/catalogs/builtinTransformers.d.ts +0 -28
  311. package/dist/src/modules/mcp/catalogs/builtinUtilities.d.ts +0 -18
  312. package/dist/src/modules/mcp/catalogs/cssCatalog/border.d.ts +0 -4
  313. package/dist/src/modules/mcp/catalogs/cssCatalog/box.d.ts +0 -4
  314. package/dist/src/modules/mcp/catalogs/cssCatalog/helpers.d.ts +0 -34
  315. package/dist/src/modules/mcp/catalogs/cssCatalog/index.d.ts +0 -19
  316. package/dist/src/modules/mcp/catalogs/cssCatalog/layout.d.ts +0 -9
  317. package/dist/src/modules/mcp/catalogs/cssCatalog/visual.d.ts +0 -8
  318. package/dist/src/modules/mcp/catalogs/index.d.ts +0 -9
  319. package/dist/src/modules/mcp/catalogs/observed.d.ts +0 -48
  320. package/dist/src/modules/mcp/catalogs/paramSpec.d.ts +0 -42
  321. package/dist/src/modules/mcp/catalogs/registry.d.ts +0 -35
  322. package/dist/src/modules/mcp/e2e/index.d.ts +0 -6
  323. package/dist/src/modules/mcp/e2e/mcpEndpoint.d.ts +0 -27
  324. package/dist/src/modules/mcp/e2e/postMessageChannel.d.ts +0 -22
  325. package/dist/src/modules/mcp/e2e/renderingHost.d.ts +0 -34
  326. package/dist/src/modules/mcp/handler.d.ts +0 -22
  327. package/dist/src/modules/mcp/helpers/agentPrompt.d.ts +0 -4
  328. package/dist/src/modules/mcp/helpers/computeVersion.d.ts +0 -1
  329. package/dist/src/modules/mcp/helpers/guide.d.ts +0 -4
  330. package/dist/src/modules/mcp/helpers/index.d.ts +0 -8
  331. package/dist/src/modules/mcp/helpers/interactions.d.ts +0 -30
  332. package/dist/src/modules/mcp/helpers/log.d.ts +0 -8
  333. package/dist/src/modules/mcp/helpers/opResult.d.ts +0 -13
  334. package/dist/src/modules/mcp/helpers/space.d.ts +0 -115
  335. package/dist/src/modules/mcp/helpers/uris.d.ts +0 -28
  336. package/dist/src/modules/mcp/index.d.ts +0 -13
  337. package/dist/src/modules/mcp/previewClient.d.ts +0 -13
  338. package/dist/src/modules/mcp/proxy/config.d.ts +0 -19
  339. package/dist/src/modules/mcp/proxy/fetch.d.ts +0 -18
  340. package/dist/src/modules/mcp/proxy/grant.d.ts +0 -25
  341. package/dist/src/modules/mcp/proxy/guard.d.ts +0 -6
  342. package/dist/src/modules/mcp/proxy/handler.d.ts +0 -8
  343. package/dist/src/modules/mcp/proxy/index.d.ts +0 -8
  344. package/dist/src/modules/mcp/proxy/payload.d.ts +0 -8
  345. package/dist/src/modules/mcp/proxy/rewrite.d.ts +0 -18
  346. package/dist/src/modules/mcp/proxy/sign.d.ts +0 -6
  347. package/dist/src/modules/mcp/proxy/types.d.ts +0 -45
  348. package/dist/src/modules/mcp/resources/canonical.d.ts +0 -6
  349. package/dist/src/modules/mcp/resources/core.d.ts +0 -5
  350. package/dist/src/modules/mcp/resources/envelope.d.ts +0 -10
  351. package/dist/src/modules/mcp/resources/index.d.ts +0 -8
  352. package/dist/src/modules/mcp/resources/primer.d.ts +0 -7
  353. package/dist/src/modules/mcp/resources/register.d.ts +0 -10
  354. package/dist/src/modules/mcp/resources/renderGuide.d.ts +0 -10
  355. package/dist/src/modules/mcp/resources/router.d.ts +0 -10
  356. package/dist/src/modules/mcp/resources/schema.d.ts +0 -5
  357. package/dist/src/modules/mcp/resources/style.d.ts +0 -5
  358. package/dist/src/modules/mcp/screenshotClient.d.ts +0 -13
  359. package/dist/src/modules/mcp/server.d.ts +0 -31
  360. package/dist/src/modules/mcp/tests/helpers.d.ts +0 -13
  361. package/dist/src/modules/mcp/tools/apply/dispatch.d.ts +0 -6
  362. package/dist/src/modules/mcp/tools/apply/index.d.ts +0 -470
  363. package/dist/src/modules/mcp/tools/apply/writeResult.d.ts +0 -8
  364. package/dist/src/modules/mcp/tools/index.d.ts +0 -18
  365. package/dist/src/modules/mcp/tools/operations/index.d.ts +0 -928
  366. package/dist/src/modules/mcp/tools/operations/schema/bindings/deleteBinding.d.ts +0 -17
  367. package/dist/src/modules/mcp/tools/operations/schema/bindings/patchBinding.d.ts +0 -25
  368. package/dist/src/modules/mcp/tools/operations/schema/bindings/upsertBinding.d.ts +0 -27
  369. package/dist/src/modules/mcp/tools/operations/schema/elements/deleteElement.d.ts +0 -10
  370. package/dist/src/modules/mcp/tools/operations/schema/elements/moveElement.d.ts +0 -16
  371. package/dist/src/modules/mcp/tools/operations/schema/elements/patchElement.d.ts +0 -22
  372. package/dist/src/modules/mcp/tools/operations/schema/elements/repeatElement.d.ts +0 -55
  373. package/dist/src/modules/mcp/tools/operations/schema/elements/upsertElement.d.ts +0 -16
  374. package/dist/src/modules/mcp/tools/operations/schema/folders/deleteFolder.d.ts +0 -9
  375. package/dist/src/modules/mcp/tools/operations/schema/folders/upsertFolder.d.ts +0 -12
  376. package/dist/src/modules/mcp/tools/operations/schema/index.d.ts +0 -21
  377. package/dist/src/modules/mcp/tools/operations/schema/interactions/deleteInteraction.d.ts +0 -12
  378. package/dist/src/modules/mcp/tools/operations/schema/interactions/patchInteractionNode.d.ts +0 -18
  379. package/dist/src/modules/mcp/tools/operations/schema/interactions/upsertInteractionFlow.d.ts +0 -27
  380. package/dist/src/modules/mcp/tools/operations/schema/operations.d.ts +0 -229
  381. package/dist/src/modules/mcp/tools/operations/schema/pages/deletePage.d.ts +0 -9
  382. package/dist/src/modules/mcp/tools/operations/schema/pages/upsertPage.d.ts +0 -14
  383. package/dist/src/modules/mcp/tools/operations/schema/settings/patchSettings.d.ts +0 -34
  384. package/dist/src/modules/mcp/tools/operations/schema/shared.d.ts +0 -92
  385. package/dist/src/modules/mcp/tools/operations/schema/translator.d.ts +0 -12
  386. package/dist/src/modules/mcp/tools/operations/schema/variables/deleteVariable.d.ts +0 -9
  387. package/dist/src/modules/mcp/tools/operations/schema/variables/upsertVariable.d.ts +0 -16
  388. package/dist/src/modules/mcp/tools/operations/schema/write.d.ts +0 -42
  389. package/dist/src/modules/mcp/tools/operations/schemaIds.d.ts +0 -6
  390. package/dist/src/modules/mcp/tools/operations/style/definitions/deleteDefinition.d.ts +0 -9
  391. package/dist/src/modules/mcp/tools/operations/style/definitions/patchDefinition.d.ts +0 -37
  392. package/dist/src/modules/mcp/tools/operations/style/definitions/upsertDefinition.d.ts +0 -37
  393. package/dist/src/modules/mcp/tools/operations/style/definitions/upsertDefinitions.d.ts +0 -41
  394. package/dist/src/modules/mcp/tools/operations/style/globalStyles/deleteGlobalStyle.d.ts +0 -9
  395. package/dist/src/modules/mcp/tools/operations/style/globalStyles/patchGlobalStyle.d.ts +0 -37
  396. package/dist/src/modules/mcp/tools/operations/style/globalStyles/upsertGlobalStyle.d.ts +0 -37
  397. package/dist/src/modules/mcp/tools/operations/style/idStyles/deleteIdStyle.d.ts +0 -9
  398. package/dist/src/modules/mcp/tools/operations/style/idStyles/patchIdStyle.d.ts +0 -37
  399. package/dist/src/modules/mcp/tools/operations/style/idStyles/upsertIdStyle.d.ts +0 -37
  400. package/dist/src/modules/mcp/tools/operations/style/index.d.ts +0 -15
  401. package/dist/src/modules/mcp/tools/operations/style/operations.d.ts +0 -264
  402. package/dist/src/modules/mcp/tools/operations/style/shared.d.ts +0 -116
  403. package/dist/src/modules/mcp/tools/operations/style/translator.d.ts +0 -12
  404. package/dist/src/modules/mcp/tools/operations/style/variables/deleteStyleVariable.d.ts +0 -15
  405. package/dist/src/modules/mcp/tools/operations/style/variables/upsertStyleVariable.d.ts +0 -20
  406. package/dist/src/modules/mcp/tools/operations/style/write.d.ts +0 -12
  407. package/dist/src/modules/mcp/tools/preview.d.ts +0 -465
  408. package/dist/src/modules/mcp/tools/read.d.ts +0 -9
  409. package/dist/src/modules/mcp/tools/render.d.ts +0 -499
  410. package/dist/src/modules/mcp/tools/render.test.d.ts +0 -1
  411. package/dist/src/modules/mcp/tools/screenshot.d.ts +0 -470
  412. package/dist/src/modules/mcp/tools/search.d.ts +0 -15
  413. package/dist/src/modules/mcp/tools/shared/expandOperations.d.ts +0 -13
  414. package/dist/src/modules/mcp/tools/shared/tool.d.ts +0 -72
  415. package/dist/src/modules/mcp/tools/shared/validator/audit.d.ts +0 -4
  416. package/dist/src/modules/mcp/tools/shared/validator/batch.d.ts +0 -5
  417. package/dist/src/modules/mcp/tools/shared/validator/bindings.d.ts +0 -6
  418. package/dist/src/modules/mcp/tools/shared/validator/context.d.ts +0 -38
  419. package/dist/src/modules/mcp/tools/shared/validator/css.d.ts +0 -4
  420. package/dist/src/modules/mcp/tools/shared/validator/elements.d.ts +0 -7
  421. package/dist/src/modules/mcp/tools/shared/validator/index.d.ts +0 -8
  422. package/dist/src/modules/mcp/tools/shared/validator/interactions.d.ts +0 -3
  423. package/dist/src/modules/mcp/tools/shared/validator/refs.d.ts +0 -4
  424. package/dist/src/modules/mcp/tools/validate.d.ts +0 -467
  425. package/dist/src/modules/mcp/types/aiSchema.d.ts +0 -218
  426. package/dist/src/modules/mcp/types/appTypes.d.ts +0 -26
  427. package/dist/src/modules/mcp/types/index.d.ts +0 -5
  428. package/dist/src/modules/mcp/types/previewTypes.d.ts +0 -25
  429. package/dist/src/modules/mcp/types/screenshotTypes.d.ts +0 -29
  430. package/dist/src/modules/mcp/types/toolTypes.d.ts +0 -138
  431. package/dist/src/modules/oauth/authorize.d.ts +0 -7
  432. package/dist/src/modules/oauth/challenge.d.ts +0 -11
  433. package/dist/src/modules/oauth/consentPage.d.ts +0 -7
  434. package/dist/src/modules/oauth/metadata.d.ts +0 -40
  435. package/dist/src/modules/oauth/params.d.ts +0 -5
  436. package/dist/src/modules/oauth/pkce.d.ts +0 -6
  437. package/dist/src/modules/oauth/records.d.ts +0 -71
  438. package/dist/src/modules/oauth/register.d.ts +0 -5
  439. package/dist/src/modules/oauth/respond.d.ts +0 -13
  440. package/dist/src/modules/oauth/token.d.ts +0 -5
  441. package/dist/src/modules/ssr/buildBody.d.ts +0 -9
  442. package/dist/src/modules/ssr/handler.d.ts +0 -4
  443. package/dist/src/modules/ssr/preview.d.ts +0 -16
  444. package/dist/src/modules/ssr/streamBody.d.ts +0 -5
  445. package/dist/src/modules/ssr/template.d.ts +0 -6
  446. package/dist/src/standalone/alias-loader.d.mts +0 -2
  447. package/dist/src/standalone/plugins/ClientInfo.d.ts +0 -2
  448. package/dist/src/standalone/plugins/ServerInfo.d.ts +0 -2
  449. package/dist/src/standalone/plugins/SharedInfo.d.ts +0 -2
  450. package/dist/src/standalone/plugins/styles.d.ts +0 -5
  451. package/dist/src/standalone/register-alias.d.mts +0 -1
  452. package/dist/src/standalone/server.d.ts +0 -1
  453. package/dist/src/standalone/stubs/react-syntax-highlighter.d.mts +0 -31
  454. package/skills/plitzi-render/SKILL.md +0 -174
  455. /package/dist/{src/core/http/dispatcher.test.d.ts → core/auth/api.test.d.ts} +0 -0
  456. /package/dist/{src/core/server/mcpServer.test.d.ts → core/auth/authorize.test.d.ts} +0 -0
  457. /package/dist/{src/modules/ai/toolkit.test.d.ts → core/auth/createAuth.test.d.ts} +0 -0
  458. /package/dist/{src/modules/mcp/apps/apps.test.d.ts → core/auth/domains.test.d.ts} +0 -0
  459. /package/dist/{src/modules/mcp/apps/render/styles.test.d.ts → core/auth/identity.test.d.ts} +0 -0
  460. /package/dist/{src/modules → core/auth}/oauth/oauth.test.d.ts +0 -0
  461. /package/dist/{src/modules/mcp/catalogs/builtinTransformers.test.d.ts → core/auth/routes.test.d.ts} +0 -0
  462. /package/dist/{src/modules/mcp/catalogs/cssCatalog/cssCatalog.test.d.ts → core/auth/session.test.d.ts} +0 -0
  463. /package/dist/{src/modules/mcp/e2e/connector.test.d.ts → core/auth/spaceTokens.test.d.ts} +0 -0
  464. /package/dist/{src/modules/mcp/e2e/host.test.d.ts → core/auth/tokens.test.d.ts} +0 -0
  465. /package/dist/{src/modules/mcp/e2e/oauthConnector.test.d.ts → core/createServer.test.d.ts} +0 -0
  466. /package/dist/{src/modules/mcp/helpers/log.test.d.ts → core/handlers/handlers.test.d.ts} +0 -0
  467. /package/dist/{src/core → core}/health.d.ts +0 -0
  468. /package/dist/{src/modules/mcp/mcp.bench.d.ts → core/http/dispatcher.test.d.ts} +0 -0
  469. /package/dist/{src/core → core}/http/securityHeaders.d.ts +0 -0
  470. /package/dist/{src/core → core}/http/stages/authRoutes.d.ts +0 -0
  471. /package/dist/{src/core → core}/http/stages/pluginAssets.d.ts +0 -0
  472. /package/dist/{src/core → core}/mimeTypes.d.ts +0 -0
  473. /package/dist/{src/modules/mcp/constants.d.ts → core/previewToken.d.ts} +0 -0
  474. /package/dist/{src/core → core}/requestParser.d.ts +0 -0
  475. /package/dist/{src/core → core}/server/baseServer.d.ts +0 -0
  476. /package/dist/{src/modules/mcp/proxy/endpoint.test.d.ts → core/server/baseServer.test.d.ts} +0 -0
  477. /package/dist/{src/modules/mcp/proxy/proxy.test.d.ts → core/services/resolve.test.d.ts} +0 -0
  478. /package/dist/{src/core → core}/services/rsc.d.ts +0 -0
  479. /package/dist/{src/core → core}/services/ssr.d.ts +0 -0
  480. /package/dist/{src/core → core}/staticFiles.d.ts +0 -0
  481. /package/dist/{src/modules/mcp/proxy/wiring.test.d.ts → helpers/buildResponseHelpers.test.d.ts} +0 -0
  482. /package/dist/{src/helpers → helpers}/cache/TtlCache.d.ts +0 -0
  483. /package/dist/{src/helpers → helpers}/cache/cacheManager.d.ts +0 -0
  484. /package/dist/{src/helpers → helpers}/cache/defaults.d.ts +0 -0
  485. /package/dist/{src/helpers → helpers}/cache/index.d.ts +0 -0
  486. /package/dist/{src/modules/mcp/tests/apply.test.d.ts → helpers/cache/keys.test.d.ts} +0 -0
  487. /package/dist/{src/helpers → helpers}/cache/serverCaches.d.ts +0 -0
  488. /package/dist/{src/modules/mcp/tests/bindings.test.d.ts → helpers/compress.test.d.ts} +0 -0
  489. /package/dist/{src/helpers → helpers}/escapeJson.d.ts +0 -0
  490. /package/dist/{src/helpers → helpers}/metrics.d.ts +0 -0
  491. /package/dist/{src/helpers → helpers}/normalizePlugins.d.ts +0 -0
  492. /package/dist/{src/modules/mcp/tests/css.test.d.ts → helpers/offlineDataLoader.test.d.ts} +0 -0
  493. /package/dist/{src/helpers → helpers}/readCookie.d.ts +0 -0
  494. /package/dist/{src/modules/mcp/tests/interactions.test.d.ts → helpers/resolveDebugMode.test.d.ts} +0 -0
  495. /package/dist/{src/helpers → helpers}/runMiddlewares.d.ts +0 -0
  496. /package/dist/{src/helpers → helpers}/serverLog.d.ts +0 -0
  497. /package/dist/{src/middlewares → middlewares}/auth.d.ts +0 -0
  498. /package/dist/{src/middlewares → middlewares}/basicAuth.d.ts +0 -0
  499. /package/dist/{src/modules/mcp/tests/pages.test.d.ts → middlewares/spaceDeployment.test.d.ts} +0 -0
  500. /package/dist/{src/modules/mcp/tests/reads.test.d.ts → modules/actions/handler.test.d.ts} +0 -0
  501. /package/dist/{src/modules/mcp/tests/schemaIds.test.d.ts → modules/connectors/engine.test.d.ts} +0 -0
  502. /package/dist/{src/modules/mcp/tests/search.test.d.ts → modules/connectors/projection.test.d.ts} +0 -0
  503. /package/dist/{src/modules/mcp/tests/skill.test.d.ts → modules/connectors/resolver.test.d.ts} +0 -0
  504. /package/dist/{src/modules/mcp/tests/styles.test.d.ts → modules/rsc/resolveRscData.test.d.ts} +0 -0
  505. /package/dist/{src/modules → modules}/ssr/applySSRResult.d.ts +0 -0
  506. /package/dist/{src/modules/mcp/tests/tools.test.d.ts → modules/ssr/loadPluginComponents.test.d.ts} +0 -0
  507. /package/dist/{src/modules/mcp/tests/validation.test.d.ts → modules/ssr/metering.test.d.ts} +0 -0
  508. /package/dist/{src/modules → modules}/ssr/registerExternalPlugins.d.ts +0 -0
  509. /package/dist/{src/plugins → plugins}/compile.d.ts +0 -0
  510. /package/dist/{src/plugins → plugins}/copy.d.ts +0 -0
  511. /package/dist/{src/plugins → plugins}/detect.d.ts +0 -0
  512. /package/dist/{src/plugins → plugins}/manager.d.ts +0 -0
  513. /package/dist/{src/plugins → plugins}/validate.d.ts +0 -0
  514. /package/dist/{src/plugins → plugins}/validate.test.d.ts +0 -0
@@ -1,33 +0,0 @@
1
- import { z } from "zod";
2
- //#region src/modules/mcp/tools/shared/tool.ts
3
- /** Build the MCP CallToolResult for an image-returning tool: a text meta block followed by one image block per
4
- * PNG, so a vision-capable agent (or MCP client) sees the render directly. */
5
- var imageResult = (images, meta) => ({ content: [{
6
- type: "text",
7
- text: JSON.stringify(meta)
8
- }, ...images.map((img) => ({
9
- type: "image",
10
- data: img.data,
11
- mimeType: img.mimeType
12
- }))] });
13
- /** Author a tool: give it its metadata, its input shape and a typed `run`. The returned descriptor parses the
14
- * raw args against the shape before handing them to `run`, so `run` is fully typed and no cast is needed.
15
- * Adding a tool is: call defineTool in its own file and append it to the `tools` registry. */
16
- var defineTool = (spec) => {
17
- const { runPublic } = spec;
18
- const parse = (args) => z.object(spec.inputShape).parse(args);
19
- return {
20
- name: spec.name,
21
- title: spec.title,
22
- description: spec.description,
23
- inputShape: spec.inputShape,
24
- access: spec.access,
25
- requires: spec.requires,
26
- spaceless: spec.spaceless,
27
- ui: spec.ui,
28
- execute: (args, ctx) => spec.run(parse(args), ctx),
29
- ...runPublic ? { executePublic: (args, env) => runPublic(parse(args), env) } : {}
30
- };
31
- };
32
- //#endregion
33
- export { defineTool, imageResult };
@@ -1,124 +0,0 @@
1
- import { elementRefOf, findElementByRef } from "../../../helpers/space.js";
2
- import { definitionToAI, globalStyleToAI, idStyleToAI } from "../../operations/style/translator.js";
3
- import { checkBindingSourceScope, checkBindingTarget, checkBindingTransformers } from "./bindings.js";
4
- import { checkSlotCss } from "./css.js";
5
- import { checkVariantApplication } from "./elements.js";
6
- import { checkInteractionNode } from "./interactions.js";
7
- import { buildValidationCtx } from "./index.js";
8
- //#region src/modules/mcp/tools/shared/validator/audit.ts
9
- var harvest = (ctx, into, label, run) => {
10
- const sub = {
11
- ...ctx,
12
- errors: [],
13
- warnings: [],
14
- warned: /* @__PURE__ */ new Set()
15
- };
16
- run(sub);
17
- for (const e of sub.errors) into.errors.push({
18
- path: e.path,
19
- message: `Pre-existing malformation in ${label}: ${e.message}`,
20
- hint: `${e.hint ? `${e.hint} ` : ""}This issue already exists in the space (NOT caused by your change), but the save is blocked until you fix it too, in this same batch.`,
21
- ...e.validValues ? { validValues: e.validValues } : {}
22
- });
23
- for (const w of sub.warnings) {
24
- const message = `Pre-existing issue in ${label} (not caused by your change, but worth fixing too): ${w}`;
25
- if (!into.warnings.includes(message)) into.warnings.push(message);
26
- }
27
- };
28
- var toNode = (id, node) => ({
29
- id,
30
- title: node.title,
31
- nodeType: node.type,
32
- action: node.action,
33
- params: node.params,
34
- enabled: node.enabled,
35
- when: node.when,
36
- elementId: node.elementId ?? void 0,
37
- preview: node.preview
38
- });
39
- var auditElement = (space, sub, el) => {
40
- const hostRef = elementRefOf(el);
41
- const base = `element "${hostRef}"`;
42
- for (const [category, list] of Object.entries(el.definition.bindings ?? {})) for (const binding of list) {
43
- const path = `${base}.bindings.${category}[to=${binding.to}]`;
44
- checkBindingTransformers(binding.transformers, `${path}.transformers`, sub);
45
- checkBindingSourceScope(space, sub, hostRef, binding.source, `${path}.source`);
46
- checkBindingTarget(hostRef, category, binding.to, path, sub);
47
- }
48
- for (const [id, node] of Object.entries(el.definition.interactions ?? {})) checkInteractionNode(toNode(id, node), `${base}.interactions.${id}`, sub, hostRef);
49
- checkVariantApplication(el.definition.initialState, `${base}.initialState`, sub);
50
- };
51
- var auditDefinitionCss = (sub, label, def) => {
52
- const { ref: _ref, slots, ...slot } = def;
53
- checkSlotCss(slot, label, sub);
54
- for (const [name, slotDef] of Object.entries(slots ?? {})) checkSlotCss(slotDef, `${label}.slots.${name}`, sub);
55
- };
56
- var collectTouched = (ops) => {
57
- const touched = {
58
- elementRefs: /* @__PURE__ */ new Set(),
59
- definitions: /* @__PURE__ */ new Set(),
60
- globalStyles: /* @__PURE__ */ new Set(),
61
- idStyles: /* @__PURE__ */ new Set()
62
- };
63
- for (const op of ops) switch (op.type) {
64
- case "upsertElement":
65
- touched.elementRefs.add(op.element.ref);
66
- break;
67
- case "patchElement":
68
- case "moveElement":
69
- case "upsertBinding":
70
- case "patchBinding":
71
- case "deleteBinding":
72
- case "upsertInteractionFlow":
73
- case "patchInteractionNode":
74
- case "deleteInteraction":
75
- touched.elementRefs.add(op.ref);
76
- break;
77
- case "upsertDefinition":
78
- case "patchDefinition":
79
- touched.definitions.add(op.ref);
80
- break;
81
- case "upsertDefinitions":
82
- for (const ref of Object.keys(op.definitions)) touched.definitions.add(ref);
83
- break;
84
- case "upsertGlobalStyle":
85
- case "patchGlobalStyle":
86
- touched.globalStyles.add(op.componentType);
87
- break;
88
- case "upsertIdStyle":
89
- case "patchIdStyle": touched.idStyles.add(op.targetId);
90
- }
91
- return touched;
92
- };
93
- var auditResources = (space, ops) => {
94
- const ctx = buildValidationCtx(space, ops);
95
- const result = {
96
- valid: true,
97
- errors: [],
98
- warnings: []
99
- };
100
- const touched = collectTouched(ops);
101
- const seenElements = /* @__PURE__ */ new Set();
102
- for (const ref of touched.elementRefs) {
103
- const el = findElementByRef(space.schema, ref);
104
- if (!el || seenElements.has(el.id)) continue;
105
- seenElements.add(el.id);
106
- harvest(ctx, result, `element "${elementRefOf(el)}"`, (sub) => auditElement(space, sub, el));
107
- }
108
- for (const ref of touched.definitions) {
109
- const def = definitionToAI(space.style, ref);
110
- if (def) harvest(ctx, result, `definition "${ref}"`, (sub) => auditDefinitionCss(sub, `definition "${ref}"`, def));
111
- }
112
- for (const componentType of touched.globalStyles) {
113
- const def = globalStyleToAI(space.style, componentType);
114
- if (def) harvest(ctx, result, `global style "${componentType}"`, (sub) => auditDefinitionCss(sub, `global style "${componentType}"`, def));
115
- }
116
- for (const targetId of touched.idStyles) {
117
- const def = idStyleToAI(space.style, targetId);
118
- if (def) harvest(ctx, result, `id style "#${targetId}"`, (sub) => auditDefinitionCss(sub, `id style "#${targetId}"`, def));
119
- }
120
- result.valid = result.errors.length === 0;
121
- return result;
122
- };
123
- //#endregion
124
- export { auditResources };
@@ -1,39 +0,0 @@
1
- import { slugRouteParams } from "../../../helpers/space.js";
2
- //#region src/modules/mcp/tools/shared/validator/batch.ts
3
- var batchDeclaredVars = (ops) => {
4
- const names = [];
5
- for (const op of ops) if (op.type === "upsertVariable") names.push(op.name);
6
- else if (op.type === "upsertPage" && typeof op.slug === "string") names.push(...slugRouteParams(op.slug));
7
- return names;
8
- };
9
- var batchDeclaredPages = (ops) => {
10
- const refs = /* @__PURE__ */ new Set();
11
- for (const op of ops) if (op.type === "upsertPage") refs.add(op.ref);
12
- return refs;
13
- };
14
- var batchDeclaredFolders = (ops) => {
15
- const refs = /* @__PURE__ */ new Set();
16
- for (const op of ops) if (op.type === "upsertFolder") refs.add(op.ref);
17
- return refs;
18
- };
19
- var variantNamesOf = (source) => {
20
- const names = new Set(Object.keys(source.variants ?? {}));
21
- for (const slot of Object.values(source.slots ?? {})) for (const name of Object.keys(slot.variants ?? {})) names.add(name);
22
- return names;
23
- };
24
- var batchDeclaredVariants = (ops) => {
25
- const map = /* @__PURE__ */ new Map();
26
- const record = (ref, names) => {
27
- if (names.size > 0) map.set(ref, /* @__PURE__ */ new Set([...map.get(ref) ?? [], ...names]));
28
- };
29
- for (const op of ops) {
30
- if (op.type === "upsertDefinitions") {
31
- for (const [ref, definition] of Object.entries(op.definitions)) record(ref, variantNamesOf(definition));
32
- continue;
33
- }
34
- if (op.type === "upsertDefinition" || op.type === "patchDefinition") record(op.ref, variantNamesOf(op));
35
- }
36
- return map;
37
- };
38
- //#endregion
39
- export { batchDeclaredFolders, batchDeclaredPages, batchDeclaredVariants, batchDeclaredVars };
@@ -1,70 +0,0 @@
1
- import { getTransformer, suggestTransformer } from "../../../catalogs/builtinTransformers.js";
2
- import { descendantIds, elementRefOf, findElementByRef } from "../../../helpers/space.js";
3
- import { warnOnce } from "./context.js";
4
- import getSourceName from "@plitzi/sdk-shared/dataSource/helpers/getSourceName";
5
- //#region src/modules/mcp/tools/shared/validator/bindings.ts
6
- var providerOfSource = (space, source) => {
7
- const head = source.split(".")[0];
8
- const sep = head.indexOf("_");
9
- if (sep < 0) return;
10
- const idRef = head.slice(sep + 1);
11
- const el = findElementByRef(space.schema, idRef);
12
- if (!el || getSourceName(el.definition.type, el) !== head) return;
13
- return {
14
- ref: elementRefOf(el),
15
- id: el.id
16
- };
17
- };
18
- var checkBindingTarget = (ref, category, to, path, ctx) => {
19
- if (category !== "attributes" && category !== "initialState") return;
20
- const type = ctx.elementType(ref);
21
- const targets = type ? ctx.typeMeta.get(type)?.bindingTargets?.[category] : void 0;
22
- if (!targets || targets.size === 0 || targets.has(to)) return;
23
- warnOnce(ctx, `Binding target "${to}" at ${path} is not among the "${category}" targets the type "${type}" declares (${[...targets].sort().join(", ")}). Verify against plitzi://data-sources; it may still be valid.`);
24
- };
25
- var checkBindingSourceScope = (space, ctx, elementRef, source, path) => {
26
- const provider = providerOfSource(space, source);
27
- if (!provider) return;
28
- const bound = findElementByRef(space.schema, elementRef);
29
- if (!bound) return;
30
- if (bound.id !== provider.id && descendantIds(space.schema, provider.id).includes(bound.id)) return;
31
- ctx.errors.push({
32
- path,
33
- message: `Binding source "${source}" is provided by element "${provider.ref}", but "${elementRef}" is not inside its subtree`,
34
- hint: `An element source is scoped to its DESCENDANTS only, so this binding resolves to nothing at runtime (the source is not available outside "${provider.ref}"). Move "${elementRef}" under "${provider.ref}", or bind to a source that is in scope (e.g. a global module source like state/space/navigation).`
35
- });
36
- };
37
- var checkBindingTransformers = (transformers, path, ctx) => {
38
- transformers?.forEach((transformer, i) => {
39
- if (transformer.enabled === false) return;
40
- const base = `${path}[${i}]`;
41
- const spec = getTransformer(transformer.action);
42
- if (!spec) {
43
- const suggestion = suggestTransformer(transformer.action);
44
- ctx.errors.push({
45
- path: `${base}.action`,
46
- message: `Unknown transformer action "${transformer.action}"`,
47
- hint: `The runtime skips an unknown transformer and passes the value through unchanged.${suggestion ? ` Did you mean "${suggestion}"?` : ""} See the transformers list in plitzi://data-sources.`
48
- });
49
- return;
50
- }
51
- const params = transformer.params;
52
- const unknown = Object.keys(params).filter((key) => !(key in spec.params));
53
- if (spec.strictParams && unknown.length > 0) warnOnce(ctx, `Transformer "${transformer.action}" at ${base} got unknown param(s) ${unknown.map((k) => `"${k}"`).join(", ")} — the runtime ignores them. Valid params: ${Object.keys(spec.params).join(", ") || "(none)"}.`);
54
- for (const [key, param] of Object.entries(spec.params)) {
55
- if (param.required && !(key in params)) ctx.errors.push({
56
- path: `${base}.params.${key}`,
57
- message: `Transformer "${transformer.action}" is missing required param "${key}"`,
58
- hint: param.description
59
- });
60
- if (param.type === "select" && param.options && key in params && !param.options.includes(params[key])) ctx.errors.push({
61
- path: `${base}.params.${key}`,
62
- message: `Transformer "${transformer.action}" param "${key}" is "${params[key]}", not one of its options`,
63
- hint: `Use one of: ${param.options.join(", ")}.`,
64
- validValues: param.options
65
- });
66
- }
67
- });
68
- };
69
- //#endregion
70
- export { checkBindingSourceScope, checkBindingTarget, checkBindingTransformers };
@@ -1,35 +0,0 @@
1
- //#region src/modules/mcp/tools/shared/validator/context.ts
2
- var VAR_REF = /\{\{\s*([A-Za-z_][\w.-]*)\s*\}\}/g;
3
- var CSS_VAR = /var\(\s*--([A-Za-z_][\w-]*)\s*\)/g;
4
- var RAW_CODE_TYPES = /* @__PURE__ */ new Set([
5
- "blockJsx",
6
- "blockHtml",
7
- "custom"
8
- ]);
9
- var warnOnce = (ctx, message) => {
10
- if (!ctx.warned.has(message)) {
11
- ctx.warned.add(message);
12
- ctx.warnings.push(message);
13
- }
14
- };
15
- var checkVarRefs = (text, path, ctx) => {
16
- for (const match of text.matchAll(VAR_REF)) {
17
- const name = match[1];
18
- if (!ctx.schemaVars.has(name)) warnOnce(ctx, `Unknown variable {{${name}}} at ${path}: not a space schema variable or a page route param. Read plitzi://schema-variables, or use a route param from the page skeleton (routeParams).`);
19
- }
20
- };
21
- var checkStyleVarRefs = (text, path, ctx) => {
22
- for (const match of text.matchAll(CSS_VAR)) {
23
- const name = match[1];
24
- if (!ctx.styleVars.has(name)) {
25
- const tokens = [...ctx.styleVars];
26
- warnOnce(ctx, `Unknown style variable var(--${name}) at ${path}: not a design token in this space. ${tokens.length > 0 ? `Available tokens: ${tokens.slice(0, 30).join(", ")}${tokens.length > 30 ? ", …" : ""}.` : "Read plitzi://style-variables for the valid token names."}`);
27
- }
28
- }
29
- };
30
- var checkObservedName = (value, observed, kind, resource, path, ctx) => {
31
- if (!value || observed.size === 0 || observed.has(value)) return;
32
- warnOnce(ctx, `${kind} "${value}" at ${path} was not seen in this space. Verify against ${resource}; it may still be valid.`);
33
- };
34
- //#endregion
35
- export { RAW_CODE_TYPES, checkObservedName, checkStyleVarRefs, checkVarRefs, warnOnce };
@@ -1,39 +0,0 @@
1
- import { expandShorthand, isCssProperty, suggestCssProperty } from "../../../catalogs/cssCatalog/index.js";
2
- import { checkStyleVarRefs, checkVarRefs } from "./context.js";
3
- //#region src/modules/mcp/tools/shared/validator/css.ts
4
- var checkCss = (css, path, ctx) => {
5
- if (!css) return;
6
- const declared = {};
7
- for (const [key, value] of Object.entries(css)) if (value !== null) declared[key] = value;
8
- for (const [key, value] of Object.entries(expandShorthand(declared))) {
9
- if (!isCssProperty(key)) {
10
- const suggestion = suggestCssProperty(key);
11
- ctx.errors.push({
12
- path: `${path}.${key}`,
13
- message: `Unknown CSS property "${key}"`,
14
- hint: suggestion ? `Use the kebab-case key "${suggestion}"` : "Read plitzi://css-properties for the valid property keys"
15
- });
16
- }
17
- if (typeof value === "string") {
18
- checkStyleVarRefs(value, `${path}.${key}`, ctx);
19
- checkVarRefs(value, `${path}.${key}`, ctx);
20
- }
21
- }
22
- };
23
- var checkSlotCss = (slot, path, ctx) => {
24
- checkCss(slot.desktop, `${path}.desktop`, ctx);
25
- checkCss(slot.tablet, `${path}.tablet`, ctx);
26
- checkCss(slot.mobile, `${path}.mobile`, ctx);
27
- for (const [state, dm] of Object.entries(slot.states ?? {})) {
28
- checkCss(dm.desktop, `${path}.states.${state}.desktop`, ctx);
29
- checkCss(dm.tablet, `${path}.states.${state}.tablet`, ctx);
30
- checkCss(dm.mobile, `${path}.states.${state}.mobile`, ctx);
31
- }
32
- for (const [name, dm] of Object.entries(slot.variants ?? {})) {
33
- checkCss(dm.desktop, `${path}.variants.${name}.desktop`, ctx);
34
- checkCss(dm.tablet, `${path}.variants.${name}.tablet`, ctx);
35
- checkCss(dm.mobile, `${path}.variants.${name}.mobile`, ctx);
36
- }
37
- };
38
- //#endregion
39
- export { checkCss, checkSlotCss };
@@ -1,68 +0,0 @@
1
- import { definitionVariantNames } from "../../operations/style/translator.js";
2
- import { RAW_CODE_TYPES, checkVarRefs, warnOnce } from "./context.js";
3
- import { checkIdRef } from "./refs.js";
4
- //#region src/modules/mcp/tools/shared/validator/elements.ts
5
- var checkTypeProps = (type, props, path, ctx) => {
6
- if (!props || RAW_CODE_TYPES.has(type)) return;
7
- const meta = ctx.typeMeta.get(type);
8
- const known = meta && meta.attributes.size > 0 ? meta.attributes : ctx.typeProps.get(type);
9
- if (!known || known.size === 0) return;
10
- const strict = meta?.custom === false;
11
- for (const key of Object.keys(props)) {
12
- if (key === "subType" || known.has(key)) continue;
13
- if (strict) ctx.errors.push({
14
- path,
15
- message: `Type "${type}" has no attribute "${key}"`,
16
- hint: `Valid attributes: ${[...known].sort().join(", ")}`,
17
- validValues: [...known].sort()
18
- });
19
- else warnOnce(ctx, `Type "${type}" has no observed prop "${key}" at ${path} (known: ${[...known].sort().join(", ")}). It may still be valid — verify against plitzi://types.`);
20
- }
21
- };
22
- var checkVariantApplication = (initialState, path, ctx) => {
23
- for (const [cls, selectors] of Object.entries(initialState?.styleVariant ?? {})) {
24
- const declared = definitionVariantNames(ctx.style, cls);
25
- const batch = ctx.batchVariants.get(cls);
26
- for (const [selector, variant] of Object.entries(selectors)) {
27
- const names = Array.isArray(variant) ? variant : [variant];
28
- for (const name of names) if (!((declared?.[selector]?.includes(name) ?? false) || (batch?.has(name) ?? false))) {
29
- const avail = declared ? ` (declares: ${Object.entries(declared).map(([s, v]) => `${s}:${v.join("/")}`).join(", ")})` : "";
30
- warnOnce(ctx, `Element applies variant "${name}" on class "${cls}" (${selector}) at ${path}, but that class defines no such variant${avail}. Create it via upsertDefinition/patchDefinition "variants", or fix the name.`);
31
- }
32
- }
33
- }
34
- };
35
- var EXECUTABLE_MARKUP = /<script\b|\son[a-z]+\s*=|javascript:/i;
36
- var checkRawMarkup = (type, props, path, ctx) => {
37
- if (ctx.mode !== "widget" || !props || !RAW_CODE_TYPES.has(type)) return;
38
- for (const [key, value] of Object.entries(props)) if (typeof value === "string" && EXECUTABLE_MARKUP.test(value)) ctx.errors.push({
39
- path: `${path}.props.${key}`,
40
- message: `Executable markup in a "${type}" prop is not allowed in a widget`,
41
- hint: "A widget renders inside the host UI, so <script>, javascript: URLs and inline on* handlers are rejected. Keep the markup inert (an inline <svg> is what this type is for) and wire behaviour with upsertInteractionFlow."
42
- });
43
- };
44
- var checkElementProps = (element, path, ctx) => {
45
- checkRawMarkup(element.type, element.props, path, ctx);
46
- if (!element.props || RAW_CODE_TYPES.has(element.type)) return;
47
- for (const [key, value] of Object.entries(element.props)) if (typeof value === "string") checkVarRefs(value, `${path}.props.${key}`, ctx);
48
- checkTypeProps(element.type, element.props, path, ctx);
49
- };
50
- var checkElementInput = (element, path, ctx, seen) => {
51
- checkIdRef(element.ref, `${path}.ref`, ctx);
52
- if (seen.has(element.ref)) ctx.errors.push({
53
- path: `${path}.ref`,
54
- message: `Duplicate ref "${element.ref}" in this batch`,
55
- hint: "Use a unique ref"
56
- });
57
- seen.add(element.ref);
58
- if (!element.type) ctx.errors.push({
59
- path: `${path}.type`,
60
- message: "Element type is required",
61
- hint: "Read plitzi://types for known types"
62
- });
63
- else if (!ctx.knownTypes.has(element.type)) ctx.warnings.push(`Type "${element.type}" was not seen in this space; ensure a plugin provides it (${path}.type).`);
64
- checkElementProps(element, path, ctx);
65
- element.children?.forEach((child, i) => checkElementInput(child, `${path}.children[${i}]`, ctx, seen));
66
- };
67
- //#endregion
68
- export { checkElementInput, checkRawMarkup, checkTypeProps, checkVariantApplication };
@@ -1,246 +0,0 @@
1
- import { BUILTIN_COMPONENTS } from "../../../catalogs/builtinComponents.js";
2
- import { observedDataSources, observedInteractionActions } from "../../../catalogs/observed.js";
3
- import { buildTypeRegistry } from "../../../catalogs/registry.js";
4
- import { findElementByRef, findFolderByRef, findPageByRef, folderAncestorIds, getPageElements, pageFoldersOf, pageRefOf, resolveRef, routeParamNames } from "../../../helpers/space.js";
5
- import { MAX_OPS } from "../../operations/index.js";
6
- import { batchDeclaredFolders, batchDeclaredPages, batchDeclaredVariants, batchDeclaredVars } from "./batch.js";
7
- import { checkObservedName, checkVarRefs, warnOnce } from "./context.js";
8
- import { checkBindingSourceScope, checkBindingTarget, checkBindingTransformers } from "./bindings.js";
9
- import { checkSlotCss } from "./css.js";
10
- import { checkRef } from "./refs.js";
11
- import { checkElementInput, checkRawMarkup, checkTypeProps, checkVariantApplication } from "./elements.js";
12
- import { checkInteractionNode } from "./interactions.js";
13
- //#region src/modules/mcp/tools/shared/validator/index.ts
14
- var STYLE_CATEGORIES = [
15
- "color",
16
- "spacing",
17
- "shadow",
18
- "custom"
19
- ];
20
- var buildTypeMeta = (catalog) => {
21
- const meta = /* @__PURE__ */ new Map();
22
- for (const [type, entry] of Object.entries(catalog ?? {})) {
23
- const bindingsAllowed = entry.bindingsAllowed;
24
- meta.set(type, {
25
- attributes: new Set(entry.attributes ?? []),
26
- styleSelectors: new Set(entry.styleSelectors ?? []),
27
- custom: entry.custom ?? false,
28
- ...bindingsAllowed ? { bindingTargets: {
29
- attributes: new Set(bindingsAllowed.attributes ?? []),
30
- initialState: new Set(bindingsAllowed.initialState ?? [])
31
- } } : {}
32
- });
33
- }
34
- return meta;
35
- };
36
- /** The shared validation context, derived from a space (+ the batch's ops, for batch-declared names). Extracted so
37
- * the post-apply resource audit (auditResources) can run the same checks against the resulting draft. */
38
- var buildValidationCtx = (space, ops, mode = "space") => {
39
- const registry = buildTypeRegistry(space.schema, space.catalog);
40
- return {
41
- mode,
42
- errors: [],
43
- warnings: [],
44
- warned: /* @__PURE__ */ new Set(),
45
- knownTypes: /* @__PURE__ */ new Set([...Object.keys(registry.types), ...Object.keys(BUILTIN_COMPONENTS)]),
46
- typeProps: new Map(Object.entries(registry.types).map(([type, info]) => [type, new Set(Object.keys(info.props))])),
47
- typeMeta: buildTypeMeta(space.catalog),
48
- elementType: (ref) => (findElementByRef(space.schema, ref) ?? findPageByRef(space.schema, ref))?.definition.type,
49
- schemaVars: /* @__PURE__ */ new Set([
50
- ...space.schema.variables.map((v) => v.name),
51
- ...routeParamNames(space.schema),
52
- ...batchDeclaredVars(ops)
53
- ]),
54
- styleVars: new Set(Object.values(space.style.variables).flatMap((group) => Object.keys(group))),
55
- style: space.style,
56
- batchVariants: batchDeclaredVariants(ops),
57
- observedActions: observedInteractionActions(space.schema),
58
- observedSources: observedDataSources(space.schema)
59
- };
60
- };
61
- var validateOperations = (space, ops, mode = "space") => {
62
- const batchPages = batchDeclaredPages(ops);
63
- const batchFolders = batchDeclaredFolders(ops);
64
- const folderRefs = () => pageFoldersOf(space.schema).map((f) => f.id);
65
- const ctx = buildValidationCtx(space, ops, mode);
66
- if (ops.length > 1e3) ctx.errors.push({
67
- path: "operations",
68
- message: `Batch has ${ops.length} operations (max ${MAX_OPS})`,
69
- hint: `Split into batches of at most ${MAX_OPS}`
70
- });
71
- ops.forEach((op, i) => {
72
- const base = `operations[${i}]`;
73
- if ((op.type === "upsertElement" || op.type === "patchElement" || op.type === "deleteElement" || op.type === "moveElement" || op.type === "upsertBinding" || op.type === "patchBinding" || op.type === "deleteBinding" || op.type === "upsertInteractionFlow" || op.type === "patchInteractionNode" || op.type === "deleteInteraction") && op.pageRef) {
74
- if (!findPageByRef(space.schema, op.pageRef) && !batchPages.has(op.pageRef)) {
75
- const validRefs = getPageElements(space.schema).map(pageRefOf);
76
- ctx.errors.push({
77
- path: `${base}.pageRef`,
78
- message: `Page "${op.pageRef}" does not exist`,
79
- hint: "Use an existing page ref, or create it with upsertPage earlier in the same batch",
80
- validValues: validRefs
81
- });
82
- }
83
- }
84
- switch (op.type) {
85
- case "upsertElement":
86
- checkElementInput(op.element, `${base}.element`, ctx, /* @__PURE__ */ new Set());
87
- checkVariantApplication(op.element.initialState, `${base}.element.initialState`, ctx);
88
- break;
89
- case "patchElement": {
90
- checkRef(op.ref, `${base}.ref`, ctx);
91
- const page = findPageByRef(space.schema, op.pageRef);
92
- const target = page ? resolveRef(space.schema, page, op.ref) : void 0;
93
- if (op.props) {
94
- for (const [key, value] of Object.entries(op.props)) if (typeof value === "string") checkVarRefs(value, `${base}.props.${key}`, ctx);
95
- if (target && target.id !== page?.id) {
96
- checkRawMarkup(target.definition.type, op.props, base, ctx);
97
- checkTypeProps(target.definition.type, op.props, base, ctx);
98
- }
99
- }
100
- checkVariantApplication(op.initialState, `${base}.initialState`, ctx);
101
- break;
102
- }
103
- case "upsertDefinitions": {
104
- const entries = Object.entries(op.definitions);
105
- if (entries.length === 0) ctx.errors.push({
106
- path: `${base}.definitions`,
107
- message: "This operation declares no classes",
108
- hint: "Key each class by its name: { \"definitions\": { \"card\": { \"desktop\": { … } } } }"
109
- });
110
- for (const [ref, { slots, ...slot }] of entries) {
111
- const entry = `${base}.definitions.${ref}`;
112
- checkRef(ref, entry, ctx);
113
- checkSlotCss(slot, entry, ctx);
114
- for (const [slotName, slotDef] of Object.entries(slots ?? {})) checkSlotCss(slotDef, `${entry}.slots.${slotName}`, ctx);
115
- }
116
- break;
117
- }
118
- case "upsertDefinition":
119
- case "patchDefinition": {
120
- const { type, ref, slots, ...slot } = op;
121
- checkRef(ref, `${base}.ref`, ctx);
122
- checkSlotCss(slot, base, ctx);
123
- for (const [slotName, slotDef] of Object.entries(slots ?? {})) checkSlotCss(slotDef, `${base}.slots.${slotName}`, ctx);
124
- break;
125
- }
126
- case "upsertGlobalStyle":
127
- case "patchGlobalStyle": {
128
- const { type, componentType, slots, ...slot } = op;
129
- checkRef(componentType, `${base}.componentType`, ctx);
130
- checkSlotCss(slot, base, ctx);
131
- for (const [slotName, slotDef] of Object.entries(slots ?? {})) checkSlotCss(slotDef, `${base}.slots.${slotName}`, ctx);
132
- break;
133
- }
134
- case "deleteGlobalStyle":
135
- checkRef(op.componentType, `${base}.componentType`, ctx);
136
- break;
137
- case "upsertPage":
138
- checkRef(op.ref, `${base}.ref`, ctx);
139
- if (op.slug === void 0 && !findPageByRef(space.schema, op.ref)) warnOnce(ctx, `Page "${op.ref}" is being created without a slug. Set a slug for a clean, stable URL (good practice); the page ref is used as a fallback.`);
140
- if (typeof op.folder === "string" && op.folder !== "") {
141
- if (!findFolderByRef(space.schema, op.folder) && !batchFolders.has(op.folder)) ctx.errors.push({
142
- path: `${base}.folder`,
143
- message: `Folder "${op.folder}" does not exist`,
144
- hint: "Create it with upsertFolder earlier in the same batch, or read plitzi://folders for valid refs",
145
- validValues: folderRefs()
146
- });
147
- }
148
- break;
149
- case "upsertFolder":
150
- checkRef(op.ref, `${base}.ref`, ctx);
151
- if (typeof op.parentId === "string") {
152
- checkRef(op.parentId, `${base}.parentId`, ctx);
153
- const parent = findFolderByRef(space.schema, op.parentId);
154
- if (!parent && !batchFolders.has(op.parentId)) ctx.errors.push({
155
- path: `${base}.parentId`,
156
- message: `Parent folder "${op.parentId}" does not exist`,
157
- hint: "Create the parent with upsertFolder first, or read plitzi://folders for valid refs",
158
- validValues: folderRefs()
159
- });
160
- const selfId = findFolderByRef(space.schema, op.ref)?.id ?? op.ref;
161
- if ((parent?.id ?? op.parentId) === selfId || parent && folderAncestorIds(pageFoldersOf(space.schema), parent.id).includes(selfId)) ctx.errors.push({
162
- path: `${base}.parentId`,
163
- message: `Folder "${op.ref}" cannot be nested under itself or one of its descendants`,
164
- hint: "Choose a parent that is not this folder or below it"
165
- });
166
- }
167
- break;
168
- case "deleteDefinition":
169
- case "deleteFolder":
170
- case "deletePage":
171
- case "upsertVariable":
172
- case "deleteVariable":
173
- checkRef("ref" in op ? op.ref : op.name, `${base}.${"ref" in op ? "ref" : "name"}`, ctx);
174
- break;
175
- case "upsertStyleVariable":
176
- case "deleteStyleVariable":
177
- if (!STYLE_CATEGORIES.includes(op.category)) ctx.errors.push({
178
- path: `${base}.category`,
179
- message: `Unknown style-variable category "${op.category}"`,
180
- hint: "Use one of the valid categories",
181
- validValues: STYLE_CATEGORIES
182
- });
183
- break;
184
- case "upsertBinding":
185
- checkRef(op.ref, `${base}.ref`, ctx);
186
- checkObservedName(op.binding.source, ctx.observedSources, "Data source", "plitzi://data-sources", `${base}.binding.source`, ctx);
187
- checkBindingTarget(op.ref, op.category, op.binding.to, `${base}.binding.to`, ctx);
188
- checkBindingSourceScope(space, ctx, op.ref, op.binding.source, `${base}.binding.source`);
189
- checkBindingTransformers(op.binding.transformers, `${base}.binding.transformers`, ctx);
190
- break;
191
- case "patchBinding":
192
- checkRef(op.ref, `${base}.ref`, ctx);
193
- checkObservedName(op.source, ctx.observedSources, "Data source", "plitzi://data-sources", `${base}.source`, ctx);
194
- checkBindingTarget(op.ref, op.category, op.to, `${base}.to`, ctx);
195
- if (op.source !== void 0) checkBindingSourceScope(space, ctx, op.ref, op.source, `${base}.source`);
196
- checkBindingTransformers(op.transformers, `${base}.transformers`, ctx);
197
- break;
198
- case "deleteBinding":
199
- checkRef(op.ref, `${base}.ref`, ctx);
200
- break;
201
- case "upsertInteractionFlow":
202
- checkRef(op.ref, `${base}.ref`, ctx);
203
- if (op.nodes[0] && op.nodes[0].nodeType !== "trigger") ctx.errors.push({
204
- path: `${base}.nodes[0].nodeType`,
205
- message: "The first node of a flow must be a trigger",
206
- hint: "Put the trigger first; the callbacks/utilities that run after it follow in order"
207
- });
208
- op.nodes.forEach((node, n) => checkInteractionNode(node, `${base}.nodes[${n}]`, ctx, op.ref));
209
- break;
210
- case "patchInteractionNode": {
211
- checkRef(op.ref, `${base}.ref`, ctx);
212
- const existing = findElementByRef(space.schema, op.ref)?.definition.interactions?.[op.nodeId];
213
- if (existing) {
214
- const merged = {
215
- id: existing.id,
216
- title: op.title ?? existing.title,
217
- nodeType: existing.type,
218
- action: op.action ?? existing.action,
219
- params: {
220
- ...existing.params,
221
- ...op.params ?? {}
222
- },
223
- enabled: op.enabled ?? existing.enabled,
224
- elementId: op.elementId ?? existing.elementId ?? void 0
225
- };
226
- checkInteractionNode(merged, base, ctx, op.ref);
227
- } else checkObservedName(op.action, ctx.observedActions, "Interaction action", "plitzi://interactions", `${base}.action`, ctx);
228
- break;
229
- }
230
- case "deleteInteraction":
231
- checkRef(op.ref, `${base}.ref`, ctx);
232
- if (Boolean(op.flowId) === Boolean(op.nodeId)) ctx.errors.push({
233
- path: `${base}.nodeId`,
234
- message: "Provide exactly one of flowId or nodeId",
235
- hint: "flowId removes a whole flow; nodeId removes a single step"
236
- });
237
- }
238
- });
239
- return {
240
- valid: ctx.errors.length === 0,
241
- errors: ctx.errors,
242
- warnings: ctx.warnings
243
- };
244
- };
245
- //#endregion
246
- export { buildValidationCtx, validateOperations };