@pwfabric/runtime 0.0.0-stage → 1.0.0-rc.1

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 (447) hide show
  1. package/LICENSE +90 -0
  2. package/README.md +43 -2
  3. package/dist/a11y/announcer.d.ts +65 -0
  4. package/dist/a11y/announcer.js +140 -0
  5. package/dist/a11y/announcer.js.map +1 -0
  6. package/dist/a11y/contrast.d.ts +54 -0
  7. package/dist/a11y/contrast.js +93 -0
  8. package/dist/a11y/contrast.js.map +1 -0
  9. package/dist/a11y/focus.d.ts +123 -0
  10. package/dist/a11y/focus.js +282 -0
  11. package/dist/a11y/focus.js.map +1 -0
  12. package/dist/a11y/index.d.ts +21 -0
  13. package/dist/a11y/index.js +18 -0
  14. package/dist/a11y/index.js.map +1 -0
  15. package/dist/a11y/keyboard.d.ts +144 -0
  16. package/dist/a11y/keyboard.js +317 -0
  17. package/dist/a11y/keyboard.js.map +1 -0
  18. package/dist/adapters/default-image.d.ts +25 -0
  19. package/dist/adapters/default-image.js +37 -0
  20. package/dist/adapters/default-image.js.map +1 -0
  21. package/dist/adapters/index.d.ts +27 -0
  22. package/dist/adapters/index.js +28 -0
  23. package/dist/adapters/index.js.map +1 -0
  24. package/dist/adapters/next-image.d.ts +38 -0
  25. package/dist/adapters/next-image.js +124 -0
  26. package/dist/adapters/next-image.js.map +1 -0
  27. package/dist/adapters/types.d.ts +61 -0
  28. package/dist/adapters/types.js +11 -0
  29. package/dist/adapters/types.js.map +1 -0
  30. package/dist/analytics/index.d.ts +14 -0
  31. package/dist/analytics/index.js +15 -0
  32. package/dist/analytics/index.js.map +1 -0
  33. package/dist/analytics/tracker.d.ts +65 -0
  34. package/dist/analytics/tracker.js +251 -0
  35. package/dist/analytics/tracker.js.map +1 -0
  36. package/dist/analytics/types.d.ts +130 -0
  37. package/dist/analytics/types.js +11 -0
  38. package/dist/analytics/types.js.map +1 -0
  39. package/dist/auth/index.d.ts +15 -0
  40. package/dist/auth/index.js +14 -0
  41. package/dist/auth/index.js.map +1 -0
  42. package/dist/auth/provider.d.ts +132 -0
  43. package/dist/auth/provider.js +473 -0
  44. package/dist/auth/provider.js.map +1 -0
  45. package/dist/auth/types.d.ts +117 -0
  46. package/dist/auth/types.js +9 -0
  47. package/dist/auth/types.js.map +1 -0
  48. package/dist/binding/collection.d.ts +190 -0
  49. package/dist/binding/collection.js +358 -0
  50. package/dist/binding/collection.js.map +1 -0
  51. package/dist/binding/datasource.d.ts +319 -0
  52. package/dist/binding/datasource.js +556 -0
  53. package/dist/binding/datasource.js.map +1 -0
  54. package/dist/binding/engine.d.ts +65 -0
  55. package/dist/binding/engine.js +268 -0
  56. package/dist/binding/engine.js.map +1 -0
  57. package/dist/binding/expression.d.ts +150 -0
  58. package/dist/binding/expression.js +787 -0
  59. package/dist/binding/expression.js.map +1 -0
  60. package/dist/binding/index.d.ts +19 -0
  61. package/dist/binding/index.js +14 -0
  62. package/dist/binding/index.js.map +1 -0
  63. package/dist/binding/two-way.d.ts +149 -0
  64. package/dist/binding/two-way.js +462 -0
  65. package/dist/binding/two-way.js.map +1 -0
  66. package/dist/binding/types.d.ts +119 -0
  67. package/dist/binding/types.js +9 -0
  68. package/dist/binding/types.js.map +1 -0
  69. package/dist/blocks/component-types.d.ts +81 -0
  70. package/dist/blocks/component-types.js +11 -0
  71. package/dist/blocks/component-types.js.map +1 -0
  72. package/dist/blocks/composition-rules.d.ts +168 -0
  73. package/dist/blocks/composition-rules.js +391 -0
  74. package/dist/blocks/composition-rules.js.map +1 -0
  75. package/dist/blocks/hooks.d.ts +31 -0
  76. package/dist/blocks/hooks.js +42 -0
  77. package/dist/blocks/hooks.js.map +1 -0
  78. package/dist/blocks/index.d.ts +14 -0
  79. package/dist/blocks/index.js +23 -0
  80. package/dist/blocks/index.js.map +1 -0
  81. package/dist/blocks/registry.d.ts +84 -0
  82. package/dist/blocks/registry.js +136 -0
  83. package/dist/blocks/registry.js.map +1 -0
  84. package/dist/blocks/rule-engine.d.ts +131 -0
  85. package/dist/blocks/rule-engine.js +321 -0
  86. package/dist/blocks/rule-engine.js.map +1 -0
  87. package/dist/blocks/surface-event-context.d.ts +13 -0
  88. package/dist/blocks/surface-event-context.js +14 -0
  89. package/dist/blocks/surface-event-context.js.map +1 -0
  90. package/dist/blocks/surface-id-context.d.ts +13 -0
  91. package/dist/blocks/surface-id-context.js +15 -0
  92. package/dist/blocks/surface-id-context.js.map +1 -0
  93. package/dist/bus.d.ts +41 -0
  94. package/dist/bus.js +158 -0
  95. package/dist/bus.js.map +1 -0
  96. package/dist/cache/index.d.ts +9 -0
  97. package/dist/cache/index.js +10 -0
  98. package/dist/cache/index.js.map +1 -0
  99. package/dist/cache/memory.d.ts +32 -0
  100. package/dist/cache/memory.js +138 -0
  101. package/dist/cache/memory.js.map +1 -0
  102. package/dist/cache/types.d.ts +62 -0
  103. package/dist/cache/types.js +9 -0
  104. package/dist/cache/types.js.map +1 -0
  105. package/dist/capability/index.d.ts +72 -0
  106. package/dist/capability/index.js +87 -0
  107. package/dist/capability/index.js.map +1 -0
  108. package/dist/capability/kernel-capabilities.d.ts +31 -0
  109. package/dist/capability/kernel-capabilities.js +36 -0
  110. package/dist/capability/kernel-capabilities.js.map +1 -0
  111. package/dist/capability/platform-capabilities.d.ts +71 -0
  112. package/dist/capability/platform-capabilities.js +267 -0
  113. package/dist/capability/platform-capabilities.js.map +1 -0
  114. package/dist/capability/type-mapping.d.ts +70 -0
  115. package/dist/capability/type-mapping.js +107 -0
  116. package/dist/capability/type-mapping.js.map +1 -0
  117. package/dist/capability/validation.d.ts +46 -0
  118. package/dist/capability/validation.js +54 -0
  119. package/dist/capability/validation.js.map +1 -0
  120. package/dist/connectors/declared-connector.d.ts +48 -0
  121. package/dist/connectors/declared-connector.js +333 -0
  122. package/dist/connectors/declared-connector.js.map +1 -0
  123. package/dist/connectors/engine-registry.d.ts +50 -0
  124. package/dist/connectors/engine-registry.js +135 -0
  125. package/dist/connectors/engine-registry.js.map +1 -0
  126. package/dist/connectors/index.d.ts +14 -0
  127. package/dist/connectors/index.js +14 -0
  128. package/dist/connectors/index.js.map +1 -0
  129. package/dist/connectors/module-loader.d.ts +70 -0
  130. package/dist/connectors/module-loader.js +143 -0
  131. package/dist/connectors/module-loader.js.map +1 -0
  132. package/dist/connectors/types.d.ts +174 -0
  133. package/dist/connectors/types.js +23 -0
  134. package/dist/connectors/types.js.map +1 -0
  135. package/dist/context.d.ts +27 -0
  136. package/dist/context.js +38 -0
  137. package/dist/context.js.map +1 -0
  138. package/dist/data/DataCapabilityProvider.d.ts +39 -0
  139. package/dist/data/DataCapabilityProvider.js +58 -0
  140. package/dist/data/DataCapabilityProvider.js.map +1 -0
  141. package/dist/data/index.d.ts +17 -0
  142. package/dist/data/index.js +18 -0
  143. package/dist/data/index.js.map +1 -0
  144. package/dist/data/manager.d.ts +40 -0
  145. package/dist/data/manager.js +442 -0
  146. package/dist/data/manager.js.map +1 -0
  147. package/dist/data/types.d.ts +218 -0
  148. package/dist/data/types.js +2 -0
  149. package/dist/data/types.js.map +1 -0
  150. package/dist/entity/aggregate.d.ts +8 -0
  151. package/dist/entity/aggregate.js +24 -0
  152. package/dist/entity/aggregate.js.map +1 -0
  153. package/dist/entity/apply-query.d.ts +58 -0
  154. package/dist/entity/apply-query.js +264 -0
  155. package/dist/entity/apply-query.js.map +1 -0
  156. package/dist/entity/behavior.d.ts +94 -0
  157. package/dist/entity/behavior.js +78 -0
  158. package/dist/entity/behavior.js.map +1 -0
  159. package/dist/entity/connector.d.ts +141 -0
  160. package/dist/entity/connector.js +89 -0
  161. package/dist/entity/connector.js.map +1 -0
  162. package/dist/entity/connectors/index.d.ts +12 -0
  163. package/dist/entity/connectors/index.js +11 -0
  164. package/dist/entity/connectors/index.js.map +1 -0
  165. package/dist/entity/connectors/static.d.ts +51 -0
  166. package/dist/entity/connectors/static.js +245 -0
  167. package/dist/entity/connectors/static.js.map +1 -0
  168. package/dist/entity/entity-datasource.d.ts +50 -0
  169. package/dist/entity/entity-datasource.js +33 -0
  170. package/dist/entity/entity-datasource.js.map +1 -0
  171. package/dist/entity/facade.d.ts +70 -0
  172. package/dist/entity/facade.js +70 -0
  173. package/dist/entity/facade.js.map +1 -0
  174. package/dist/entity/http-connector.d.ts +123 -0
  175. package/dist/entity/http-connector.js +295 -0
  176. package/dist/entity/http-connector.js.map +1 -0
  177. package/dist/entity/index.d.ts +38 -0
  178. package/dist/entity/index.js +31 -0
  179. package/dist/entity/index.js.map +1 -0
  180. package/dist/entity/postgres-connector.d.ts +64 -0
  181. package/dist/entity/postgres-connector.js +239 -0
  182. package/dist/entity/postgres-connector.js.map +1 -0
  183. package/dist/entity/registry.d.ts +59 -0
  184. package/dist/entity/registry.js +90 -0
  185. package/dist/entity/registry.js.map +1 -0
  186. package/dist/entity/store.d.ts +66 -0
  187. package/dist/entity/store.js +349 -0
  188. package/dist/entity/store.js.map +1 -0
  189. package/dist/entity/types.d.ts +180 -0
  190. package/dist/entity/types.js +10 -0
  191. package/dist/entity/types.js.map +1 -0
  192. package/dist/execution-context.d.ts +88 -0
  193. package/dist/execution-context.js +146 -0
  194. package/dist/execution-context.js.map +1 -0
  195. package/dist/executor.d.ts +27 -0
  196. package/dist/executor.js +33 -0
  197. package/dist/executor.js.map +1 -0
  198. package/dist/forms/form-entity-bridge.d.ts +94 -0
  199. package/dist/forms/form-entity-bridge.js +96 -0
  200. package/dist/forms/form-entity-bridge.js.map +1 -0
  201. package/dist/forms/form-write-target.d.ts +34 -0
  202. package/dist/forms/form-write-target.js +81 -0
  203. package/dist/forms/form-write-target.js.map +1 -0
  204. package/dist/forms/index.d.ts +22 -0
  205. package/dist/forms/index.js +25 -0
  206. package/dist/forms/index.js.map +1 -0
  207. package/dist/forms/named-control-values.d.ts +27 -0
  208. package/dist/forms/named-control-values.js +42 -0
  209. package/dist/forms/named-control-values.js.map +1 -0
  210. package/dist/forms/processor.d.ts +55 -0
  211. package/dist/forms/processor.js +154 -0
  212. package/dist/forms/processor.js.map +1 -0
  213. package/dist/forms/types.d.ts +174 -0
  214. package/dist/forms/types.js +33 -0
  215. package/dist/forms/types.js.map +1 -0
  216. package/dist/forms/validator.d.ts +61 -0
  217. package/dist/forms/validator.js +218 -0
  218. package/dist/forms/validator.js.map +1 -0
  219. package/dist/graph/index.d.ts +10 -0
  220. package/dist/graph/index.js +9 -0
  221. package/dist/graph/index.js.map +1 -0
  222. package/dist/graph/resolver.d.ts +66 -0
  223. package/dist/graph/resolver.js +243 -0
  224. package/dist/graph/resolver.js.map +1 -0
  225. package/dist/graph/types.d.ts +125 -0
  226. package/dist/graph/types.js +9 -0
  227. package/dist/graph/types.js.map +1 -0
  228. package/dist/hooks/useInstalledAtoms.d.ts +96 -0
  229. package/dist/hooks/useInstalledAtoms.js +92 -0
  230. package/dist/hooks/useInstalledAtoms.js.map +1 -0
  231. package/dist/i18n/index.d.ts +15 -0
  232. package/dist/i18n/index.js +14 -0
  233. package/dist/i18n/index.js.map +1 -0
  234. package/dist/i18n/translator.d.ts +76 -0
  235. package/dist/i18n/translator.js +357 -0
  236. package/dist/i18n/translator.js.map +1 -0
  237. package/dist/i18n/types.d.ts +93 -0
  238. package/dist/i18n/types.js +9 -0
  239. package/dist/i18n/types.js.map +1 -0
  240. package/dist/index.d.ts +64 -0
  241. package/dist/index.js +95 -0
  242. package/dist/index.js.map +1 -0
  243. package/dist/kernel.d.ts +47 -0
  244. package/dist/kernel.js +258 -0
  245. package/dist/kernel.js.map +1 -0
  246. package/dist/perf/budget.d.ts +92 -0
  247. package/dist/perf/budget.js +122 -0
  248. package/dist/perf/budget.js.map +1 -0
  249. package/dist/perf/index.d.ts +16 -0
  250. package/dist/perf/index.js +13 -0
  251. package/dist/perf/index.js.map +1 -0
  252. package/dist/perf/render-timer.d.ts +90 -0
  253. package/dist/perf/render-timer.js +136 -0
  254. package/dist/perf/render-timer.js.map +1 -0
  255. package/dist/perf/reporter.d.ts +126 -0
  256. package/dist/perf/reporter.js +241 -0
  257. package/dist/perf/reporter.js.map +1 -0
  258. package/dist/perf/web-vitals.d.ts +111 -0
  259. package/dist/perf/web-vitals.js +268 -0
  260. package/dist/perf/web-vitals.js.map +1 -0
  261. package/dist/registry.d.ts +63 -0
  262. package/dist/registry.js +126 -0
  263. package/dist/registry.js.map +1 -0
  264. package/dist/render/BehaviorSurfaceProvider.d.ts +65 -0
  265. package/dist/render/BehaviorSurfaceProvider.js +185 -0
  266. package/dist/render/BehaviorSurfaceProvider.js.map +1 -0
  267. package/dist/render/BlockErrorBoundary.d.ts +26 -0
  268. package/dist/render/BlockErrorBoundary.js +41 -0
  269. package/dist/render/BlockErrorBoundary.js.map +1 -0
  270. package/dist/render/DataBoundSurfaceRenderer.d.ts +78 -0
  271. package/dist/render/DataBoundSurfaceRenderer.js +998 -0
  272. package/dist/render/DataBoundSurfaceRenderer.js.map +1 -0
  273. package/dist/render/DynamicBlockWrapper.d.ts +23 -0
  274. package/dist/render/DynamicBlockWrapper.js +117 -0
  275. package/dist/render/DynamicBlockWrapper.js.map +1 -0
  276. package/dist/render/appearance-resolver.d.ts +50 -0
  277. package/dist/render/appearance-resolver.js +78 -0
  278. package/dist/render/appearance-resolver.js.map +1 -0
  279. package/dist/render/capability-gate.d.ts +69 -0
  280. package/dist/render/capability-gate.js +94 -0
  281. package/dist/render/capability-gate.js.map +1 -0
  282. package/dist/render/conditional-states-css.d.ts +41 -0
  283. package/dist/render/conditional-states-css.js +82 -0
  284. package/dist/render/conditional-states-css.js.map +1 -0
  285. package/dist/render/connections-context.d.ts +31 -0
  286. package/dist/render/connections-context.js +34 -0
  287. package/dist/render/connections-context.js.map +1 -0
  288. package/dist/render/dark-theme-css.d.ts +36 -0
  289. package/dist/render/dark-theme-css.js +67 -0
  290. package/dist/render/dark-theme-css.js.map +1 -0
  291. package/dist/render/data-binding-types.d.ts +191 -0
  292. package/dist/render/data-binding-types.js +11 -0
  293. package/dist/render/data-binding-types.js.map +1 -0
  294. package/dist/render/data-cache.d.ts +30 -0
  295. package/dist/render/data-cache.js +37 -0
  296. package/dist/render/data-cache.js.map +1 -0
  297. package/dist/render/derive-dark-theme.d.ts +17 -0
  298. package/dist/render/derive-dark-theme.js +18 -0
  299. package/dist/render/derive-dark-theme.js.map +1 -0
  300. package/dist/render/dynamic-artifact-context.d.ts +77 -0
  301. package/dist/render/dynamic-artifact-context.js +89 -0
  302. package/dist/render/dynamic-artifact-context.js.map +1 -0
  303. package/dist/render/dynamic-block-loader.d.ts +80 -0
  304. package/dist/render/dynamic-block-loader.js +197 -0
  305. package/dist/render/dynamic-block-loader.js.map +1 -0
  306. package/dist/render/endpoint.d.ts +18 -0
  307. package/dist/render/endpoint.js +109 -0
  308. package/dist/render/endpoint.js.map +1 -0
  309. package/dist/render/entity-facade-context.d.ts +34 -0
  310. package/dist/render/entity-facade-context.js +37 -0
  311. package/dist/render/entity-facade-context.js.map +1 -0
  312. package/dist/render/group-states-css.d.ts +41 -0
  313. package/dist/render/group-states-css.js +73 -0
  314. package/dist/render/group-states-css.js.map +1 -0
  315. package/dist/render/hooks/useSurfaceEvents.d.ts +8 -0
  316. package/dist/render/hooks/useSurfaceEvents.js +9 -0
  317. package/dist/render/hooks/useSurfaceEvents.js.map +1 -0
  318. package/dist/render/hooks/useSurfaceId.d.ts +8 -0
  319. package/dist/render/hooks/useSurfaceId.js +9 -0
  320. package/dist/render/hooks/useSurfaceId.js.map +1 -0
  321. package/dist/render/index.d.ts +48 -0
  322. package/dist/render/index.js +61 -0
  323. package/dist/render/index.js.map +1 -0
  324. package/dist/render/interaction-rule-engine.d.ts +12 -0
  325. package/dist/render/interaction-rule-engine.js +47 -0
  326. package/dist/render/interaction-rule-engine.js.map +1 -0
  327. package/dist/render/keyframes-css.d.ts +31 -0
  328. package/dist/render/keyframes-css.js +44 -0
  329. package/dist/render/keyframes-css.js.map +1 -0
  330. package/dist/render/query-state.d.ts +3 -0
  331. package/dist/render/query-state.js +70 -0
  332. package/dist/render/query-state.js.map +1 -0
  333. package/dist/render/renderer.d.ts +44 -0
  334. package/dist/render/renderer.js +937 -0
  335. package/dist/render/renderer.js.map +1 -0
  336. package/dist/render/resolve-expressions.d.ts +37 -0
  337. package/dist/render/resolve-expressions.js +309 -0
  338. package/dist/render/resolve-expressions.js.map +1 -0
  339. package/dist/render/responsive-style-css.d.ts +42 -0
  340. package/dist/render/responsive-style-css.js +123 -0
  341. package/dist/render/responsive-style-css.js.map +1 -0
  342. package/dist/render/responsive.d.ts +49 -0
  343. package/dist/render/responsive.js +99 -0
  344. package/dist/render/responsive.js.map +1 -0
  345. package/dist/render/scoped-css.d.ts +71 -0
  346. package/dist/render/scoped-css.js +102 -0
  347. package/dist/render/scoped-css.js.map +1 -0
  348. package/dist/render/shell-selection.d.ts +69 -0
  349. package/dist/render/shell-selection.js +117 -0
  350. package/dist/render/shell-selection.js.map +1 -0
  351. package/dist/render/states-css.d.ts +32 -0
  352. package/dist/render/states-css.js +63 -0
  353. package/dist/render/states-css.js.map +1 -0
  354. package/dist/render/surface-data-context.d.ts +18 -0
  355. package/dist/render/surface-data-context.js +21 -0
  356. package/dist/render/surface-data-context.js.map +1 -0
  357. package/dist/render/surface-event-bus.d.ts +19 -0
  358. package/dist/render/surface-event-bus.js +68 -0
  359. package/dist/render/surface-event-bus.js.map +1 -0
  360. package/dist/render/surface-event-context.d.ts +11 -0
  361. package/dist/render/surface-event-context.js +12 -0
  362. package/dist/render/surface-event-context.js.map +1 -0
  363. package/dist/render/surface-id-context.d.ts +8 -0
  364. package/dist/render/surface-id-context.js +9 -0
  365. package/dist/render/surface-id-context.js.map +1 -0
  366. package/dist/render/theme-utils.d.ts +14 -0
  367. package/dist/render/theme-utils.js +15 -0
  368. package/dist/render/theme-utils.js.map +1 -0
  369. package/dist/render/types.d.ts +282 -0
  370. package/dist/render/types.js +9 -0
  371. package/dist/render/types.js.map +1 -0
  372. package/dist/render/visibility-css.d.ts +42 -0
  373. package/dist/render/visibility-css.js +119 -0
  374. package/dist/render/visibility-css.js.map +1 -0
  375. package/dist/render/width-scope.d.ts +34 -0
  376. package/dist/render/width-scope.js +44 -0
  377. package/dist/render/width-scope.js.map +1 -0
  378. package/dist/render/write-only-sources.d.ts +33 -0
  379. package/dist/render/write-only-sources.js +99 -0
  380. package/dist/render/write-only-sources.js.map +1 -0
  381. package/dist/routing/index.d.ts +14 -0
  382. package/dist/routing/index.js +15 -0
  383. package/dist/routing/index.js.map +1 -0
  384. package/dist/routing/router.d.ts +42 -0
  385. package/dist/routing/router.js +218 -0
  386. package/dist/routing/router.js.map +1 -0
  387. package/dist/routing/types.d.ts +124 -0
  388. package/dist/routing/types.js +9 -0
  389. package/dist/routing/types.js.map +1 -0
  390. package/dist/seo/generator.d.ts +39 -0
  391. package/dist/seo/generator.js +236 -0
  392. package/dist/seo/generator.js.map +1 -0
  393. package/dist/seo/index.d.ts +14 -0
  394. package/dist/seo/index.js +15 -0
  395. package/dist/seo/index.js.map +1 -0
  396. package/dist/seo/types.d.ts +181 -0
  397. package/dist/seo/types.js +9 -0
  398. package/dist/seo/types.js.map +1 -0
  399. package/dist/state/index.d.ts +15 -0
  400. package/dist/state/index.js +16 -0
  401. package/dist/state/index.js.map +1 -0
  402. package/dist/state/manager.d.ts +33 -0
  403. package/dist/state/manager.js +81 -0
  404. package/dist/state/manager.js.map +1 -0
  405. package/dist/state/store.d.ts +40 -0
  406. package/dist/state/store.js +145 -0
  407. package/dist/state/store.js.map +1 -0
  408. package/dist/state/types.d.ts +107 -0
  409. package/dist/state/types.js +9 -0
  410. package/dist/state/types.js.map +1 -0
  411. package/dist/surface/expression.d.ts +65 -0
  412. package/dist/surface/expression.js +179 -0
  413. package/dist/surface/expression.js.map +1 -0
  414. package/dist/surface/index.d.ts +32 -0
  415. package/dist/surface/index.js +25 -0
  416. package/dist/surface/index.js.map +1 -0
  417. package/dist/surface/interpreter.d.ts +96 -0
  418. package/dist/surface/interpreter.js +231 -0
  419. package/dist/surface/interpreter.js.map +1 -0
  420. package/dist/surface/layout.d.ts +54 -0
  421. package/dist/surface/layout.js +288 -0
  422. package/dist/surface/layout.js.map +1 -0
  423. package/dist/surface/output.d.ts +90 -0
  424. package/dist/surface/output.js +104 -0
  425. package/dist/surface/output.js.map +1 -0
  426. package/dist/surface/primitives.d.ts +180 -0
  427. package/dist/surface/primitives.js +339 -0
  428. package/dist/surface/primitives.js.map +1 -0
  429. package/dist/surface/renderer.d.ts +96 -0
  430. package/dist/surface/renderer.js +190 -0
  431. package/dist/surface/renderer.js.map +1 -0
  432. package/dist/surface/schemas.d.ts +181 -0
  433. package/dist/surface/schemas.js +142 -0
  434. package/dist/surface/schemas.js.map +1 -0
  435. package/dist/surface/transforms.d.ts +144 -0
  436. package/dist/surface/transforms.js +120 -0
  437. package/dist/surface/transforms.js.map +1 -0
  438. package/dist/surface/types.d.ts +160 -0
  439. package/dist/surface/types.js +51 -0
  440. package/dist/surface/types.js.map +1 -0
  441. package/dist/surface/validation.d.ts +123 -0
  442. package/dist/surface/validation.js +147 -0
  443. package/dist/surface/validation.js.map +1 -0
  444. package/dist/validator.d.ts +55 -0
  445. package/dist/validator.js +100 -0
  446. package/dist/validator.js.map +1 -0
  447. package/package.json +106 -3
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Surface Rendering Module
3
+ *
4
+ * Surface JSON interpreter, renderer, layout system, and primitives
5
+ *
6
+ * This module provides the complete surface rendering pipeline:
7
+ * - JSON interpretation and validation
8
+ * - Layout resolution (slots, conditionals, loops)
9
+ * - Deterministic rendering
10
+ * - Built-in primitives
11
+ *
12
+ * @module @pwfabric/runtime/surface
13
+ */
14
+ export { createNode, createRenderContext, createChildContext, renderSuccess, renderError, } from './types.js';
15
+ export { evaluate, interpolate, resolvePath, createExpressionContext, DEFAULT_HELPERS, } from './expression.js';
16
+ export { resolveLayout, createSlotMap, extractSlots, composeLayouts, wrapInContainer, validateLayout, } from './layout.js';
17
+ export { PRIMITIVE_DEFINITIONS, text, container, button, heading, spacer, divider, isPrimitive, getPrimitiveDefinition, } from './primitives.js';
18
+ // Schemas
19
+ export { surfaceJsonSchema, layoutJsonSchema, bindingJsonSchema, environmentSchema, isSurfaceJSON, isLayoutJSON, isBindingJSON, } from './schemas.js';
20
+ export { interpretSurface, parseSurfaceJSON, SurfaceBuilder, surface, createSurfaceContext, } from './interpreter.js';
21
+ export { DeterministicRenderer, createRenderer, renderSurface, isRenderSuccess, isRenderError, serializeNode, serializeOutput, hashNode, verifyDeterminism, } from './renderer.js';
22
+ export { validateBlockProps, validateLayoutProps, blockManifestPropFindings, manifestPropFindings, } from './validation.js';
23
+ export { mapTransformConfigSchema, filterTransformConfigSchema, pickTransformConfigSchema, omitTransformConfigSchema, customTransformConfigSchema, validateTransformConfig, narrowTransformDescriptor, createMapTransform, createFilterTransform, createPickTransform, createOmitTransform, createCustomTransform, } from './transforms.js';
24
+ export { createWebOutput, createApiOutput, createCliOutput } from './output.js';
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/surface/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAiBH,OAAO,EACL,UAAU,EACV,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,WAAW,GACZ,MAAM,YAAY,CAAA;AAInB,OAAO,EACL,QAAQ,EACR,WAAW,EACX,WAAW,EACX,uBAAuB,EACvB,eAAe,GAChB,MAAM,iBAAiB,CAAA;AAIxB,OAAO,EACL,aAAa,EACb,aAAa,EACb,YAAY,EACZ,cAAc,EACd,eAAe,EACf,cAAc,GACf,MAAM,aAAa,CAAA;AAqBpB,OAAO,EACL,qBAAqB,EACrB,IAAI,EACJ,SAAS,EACT,MAAM,EACN,OAAO,EACP,MAAM,EACN,OAAO,EACP,WAAW,EACX,sBAAsB,GACvB,MAAM,iBAAiB,CAAA;AAExB,UAAU;AACV,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,aAAa,GACd,MAAM,cAAc,CAAA;AAQrB,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,OAAO,EACP,oBAAoB,GACrB,MAAM,kBAAkB,CAAA;AAIzB,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,aAAa,EACb,eAAe,EACf,aAAa,EACb,aAAa,EACb,eAAe,EACf,QAAQ,EACR,iBAAiB,GAClB,MAAM,eAAe,CAAA;AAYtB,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,yBAAyB,EACzB,oBAAoB,GACrB,MAAM,iBAAiB,CAAA;AAYxB,OAAO,EACL,wBAAwB,EACxB,2BAA2B,EAC3B,yBAAyB,EACzB,yBAAyB,EACzB,2BAA2B,EAC3B,uBAAuB,EACvB,yBAAyB,EACzB,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,iBAAiB,CAAA;AASxB,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA","sourcesContent":["/**\n * Surface Rendering Module\n *\n * Surface JSON interpreter, renderer, layout system, and primitives\n *\n * This module provides the complete surface rendering pipeline:\n * - JSON interpretation and validation\n * - Layout resolution (slots, conditionals, loops)\n * - Deterministic rendering\n * - Built-in primitives\n *\n * @module @pwfabric/runtime/surface\n */\n\n// Types\nexport type {\n PrimitiveType,\n BaseNodeProps,\n RenderNode,\n SurfaceJSON,\n BindingJSON,\n LayoutJSON,\n RenderContext,\n RenderResult,\n RenderOutput,\n RenderError,\n RenderErrorCode,\n} from './types.js'\n\nexport {\n createNode,\n createRenderContext,\n createChildContext,\n renderSuccess,\n renderError,\n} from './types.js'\n\n// Expression evaluation\nexport type { ExpressionResult, ExpressionContext } from './expression.js'\nexport {\n evaluate,\n interpolate,\n resolvePath,\n createExpressionContext,\n DEFAULT_HELPERS,\n} from './expression.js'\n\n// Layout system\nexport type { LayoutResult } from './layout.js'\nexport {\n resolveLayout,\n createSlotMap,\n extractSlots,\n composeLayouts,\n wrapInContainer,\n validateLayout,\n} from './layout.js'\n\n// Primitives\nexport type {\n TextProps,\n ContainerProps,\n ButtonProps,\n InputProps,\n ImageProps,\n LinkProps,\n ListProps,\n HeadingProps,\n SpacerProps,\n DividerProps,\n SlotProps,\n ConditionalProps,\n LoopProps,\n PrimitiveDefinition,\n PropDefinition,\n} from './primitives.js'\n\nexport {\n PRIMITIVE_DEFINITIONS,\n text,\n container,\n button,\n heading,\n spacer,\n divider,\n isPrimitive,\n getPrimitiveDefinition,\n} from './primitives.js'\n\n// Schemas\nexport {\n surfaceJsonSchema,\n layoutJsonSchema,\n bindingJsonSchema,\n environmentSchema,\n isSurfaceJSON,\n isLayoutJSON,\n isBindingJSON,\n} from './schemas.js'\n\n// Interpreter\nexport type {\n InterpretedSurface,\n InterpretationResult,\n InterpretSurfaceOptions,\n} from './interpreter.js'\nexport {\n interpretSurface,\n parseSurfaceJSON,\n SurfaceBuilder,\n surface,\n createSurfaceContext,\n} from './interpreter.js'\n\n// Renderer\nexport type { RenderOptions, SurfaceRenderer } from './renderer.js'\nexport {\n DeterministicRenderer,\n createRenderer,\n renderSurface,\n isRenderSuccess,\n isRenderError,\n serializeNode,\n serializeOutput,\n hashNode,\n verifyDeterminism,\n} from './renderer.js'\n\n// Block Props Validation\nexport type {\n BlockPropsValidationResult,\n BlockPropsValidationOptions,\n LayoutPropsIssue,\n ManifestPropSpec,\n BlockManifestPropsMap,\n ManifestPropFinding,\n ManifestPropFindingCode,\n} from './validation.js'\nexport {\n validateBlockProps,\n validateLayoutProps,\n blockManifestPropFindings,\n manifestPropFindings,\n} from './validation.js'\n\n// Typed Transform Wrappers\nexport type {\n MapTransformConfig,\n FilterTransformConfig,\n PickTransformConfig,\n OmitTransformConfig,\n CustomTransformConfig,\n TypedTransformConfig,\n TransformValidationResult,\n} from './transforms.js'\nexport {\n mapTransformConfigSchema,\n filterTransformConfigSchema,\n pickTransformConfigSchema,\n omitTransformConfigSchema,\n customTransformConfigSchema,\n validateTransformConfig,\n narrowTransformDescriptor,\n createMapTransform,\n createFilterTransform,\n createPickTransform,\n createOmitTransform,\n createCustomTransform,\n} from './transforms.js'\n\n// Typed Output Factories\nexport type {\n TypedWebOutput,\n TypedApiOutput,\n TypedCliOutput,\n OutputFactoryResult,\n} from './output.js'\nexport { createWebOutput, createApiOutput, createCliOutput } from './output.js'\n"]}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Surface JSON Interpreter
3
+ *
4
+ * Parse and validate Surface JSON definitions
5
+ *
6
+ * The interpreter converts Surface JSON into a validated Surface object
7
+ * that can be rendered by the renderer.
8
+ *
9
+ * @module @pwfabric/runtime/surface/interpreter
10
+ */
11
+ import type { SurfaceId, CapabilityId } from '@pwfabric/contracts';
12
+ import type { SurfaceJSON, LayoutJSON, RenderContext } from './types.js';
13
+ import { type BlockPropsValidationOptions, type ManifestPropFinding } from './validation.js';
14
+ import type { EnvironmentType } from '@pwfabric/contracts';
15
+ /**
16
+ * Interpreted surface
17
+ */
18
+ export interface InterpretedSurface {
19
+ readonly id: SurfaceId;
20
+ readonly version: string;
21
+ readonly environment: EnvironmentType;
22
+ readonly metadata: {
23
+ readonly name: string;
24
+ readonly description?: string;
25
+ readonly tags?: readonly string[];
26
+ };
27
+ readonly bindings: Map<string, CapabilityId>;
28
+ readonly layout: LayoutJSON;
29
+ }
30
+ /**
31
+ * Interpretation result
32
+ */
33
+ export type InterpretationResult = {
34
+ readonly success: true;
35
+ readonly surface: InterpretedSurface;
36
+ /**
37
+ * Manifest findings when `validation.manifests` was supplied.
38
+ * Warnings only: the surface is interpreted all the same.
39
+ */
40
+ readonly warnings?: readonly ManifestPropFinding[];
41
+ } | {
42
+ readonly success: false;
43
+ readonly errors: readonly string[];
44
+ };
45
+ /**
46
+ * Options for surface interpretation
47
+ */
48
+ export interface InterpretSurfaceOptions {
49
+ /**
50
+ * Block props validation options.
51
+ * Set to false to disable prop validation entirely.
52
+ */
53
+ readonly validation?: BlockPropsValidationOptions | false;
54
+ }
55
+ /**
56
+ * Interpret a Surface JSON definition
57
+ */
58
+ export declare function interpretSurface(json: SurfaceJSON, options?: InterpretSurfaceOptions): InterpretationResult;
59
+ /**
60
+ * Parse Surface JSON from a string
61
+ */
62
+ export declare function parseSurfaceJSON(jsonString: string): InterpretationResult;
63
+ /**
64
+ * Surface builder for programmatic construction
65
+ */
66
+ export declare class SurfaceBuilder {
67
+ private _id;
68
+ private _version;
69
+ private _environment;
70
+ private _metadata;
71
+ private _bindings;
72
+ private _layout;
73
+ private _validationOptions;
74
+ constructor(id: string);
75
+ version(v: string): this;
76
+ environment(env: EnvironmentType): this;
77
+ name(n: string): this;
78
+ description(d: string): this;
79
+ tags(...t: string[]): this;
80
+ bind(capability: string, alias?: string): this;
81
+ layout(l: LayoutJSON): this;
82
+ /**
83
+ * Configure block props validation.
84
+ * Pass false to disable validation entirely.
85
+ */
86
+ validation(options: BlockPropsValidationOptions | false): this;
87
+ build(): InterpretationResult;
88
+ }
89
+ /**
90
+ * Create a surface builder
91
+ */
92
+ export declare function surface(id: string): SurfaceBuilder;
93
+ /**
94
+ * Create a render context for an interpreted surface
95
+ */
96
+ export declare function createSurfaceContext(surface: InterpretedSurface, data?: Record<string, unknown>): RenderContext;
@@ -0,0 +1,231 @@
1
+ /**
2
+ * Surface JSON Interpreter
3
+ *
4
+ * Parse and validate Surface JSON definitions
5
+ *
6
+ * The interpreter converts Surface JSON into a validated Surface object
7
+ * that can be rendered by the renderer.
8
+ *
9
+ * @module @pwfabric/runtime/surface/interpreter
10
+ */
11
+ import { surfaceId, capabilityId, parseVersion } from '@pwfabric/contracts';
12
+ import { createRenderContext } from './types.js';
13
+ import { validateLayout } from './layout.js';
14
+ import { manifestPropFindings, validateLayoutProps, } from './validation.js';
15
+ // ============================================================
16
+ // SCHEMA VALIDATION
17
+ // ============================================================
18
+ /**
19
+ * Validate Surface JSON structure
20
+ */
21
+ function validateSurfaceJSON(json) {
22
+ const errors = [];
23
+ if (!json || typeof json !== 'object') {
24
+ return { valid: false, errors: ['Surface JSON must be an object'] };
25
+ }
26
+ const obj = json;
27
+ // Required fields
28
+ if (typeof obj.id !== 'string' || !obj.id) {
29
+ errors.push('Surface must have a string id');
30
+ }
31
+ if (typeof obj.version !== 'string' || !obj.version) {
32
+ errors.push('Surface must have a string version');
33
+ }
34
+ if (typeof obj.environment !== 'string' || !obj.environment) {
35
+ errors.push('Surface must have a string environment');
36
+ }
37
+ // Validate environment
38
+ const validEnvironments = ['web', 'api', 'cli', 'worker', 'edge', 'node', 'native', 'test'];
39
+ if (obj.environment && !validEnvironments.includes(obj.environment)) {
40
+ errors.push(`Invalid environment: ${obj.environment}. Must be one of: ${validEnvironments.join(', ')}`);
41
+ }
42
+ // Validate layout
43
+ if (!obj.layout || typeof obj.layout !== 'object') {
44
+ errors.push('Surface must have a layout object');
45
+ }
46
+ else {
47
+ const layoutResult = validateLayout(obj.layout);
48
+ if (!layoutResult.valid) {
49
+ errors.push(...layoutResult.errors.map((e) => `layout: ${e}`));
50
+ }
51
+ }
52
+ // Validate bindings if present
53
+ if (obj.bindings !== undefined) {
54
+ if (!Array.isArray(obj.bindings)) {
55
+ errors.push('bindings must be an array');
56
+ }
57
+ else {
58
+ for (let i = 0; i < obj.bindings.length; i++) {
59
+ const binding = obj.bindings[i];
60
+ if (typeof binding.capability !== 'string') {
61
+ errors.push(`bindings[${i}]: capability must be a string`);
62
+ }
63
+ }
64
+ }
65
+ }
66
+ // Validate metadata if present
67
+ if (obj.metadata !== undefined && typeof obj.metadata !== 'object') {
68
+ errors.push('metadata must be an object');
69
+ }
70
+ return { valid: errors.length === 0, errors };
71
+ }
72
+ /**
73
+ * Interpret a Surface JSON definition
74
+ */
75
+ export function interpretSurface(json, options = {}) {
76
+ // Validate structure
77
+ const validation = validateSurfaceJSON(json);
78
+ if (!validation.valid) {
79
+ return { success: false, errors: validation.errors };
80
+ }
81
+ // Parse version
82
+ const version = parseVersion(json.version);
83
+ if (!version) {
84
+ return { success: false, errors: [`Invalid version format: ${json.version}`] };
85
+ }
86
+ // Validate block props if not disabled
87
+ if (options.validation !== false) {
88
+ const propIssues = validateLayoutProps(json.layout, options.validation ?? {});
89
+ if (propIssues.length > 0) {
90
+ const propErrors = propIssues.flatMap((issue) => issue.errors.map((e) => `${issue.path} (${issue.type}): ${e}`));
91
+ return { success: false, errors: propErrors };
92
+ }
93
+ }
94
+ // Build bindings map
95
+ const bindings = new Map();
96
+ if (json.bindings) {
97
+ for (const binding of json.bindings) {
98
+ const alias = binding.alias ?? binding.capability;
99
+ bindings.set(alias, capabilityId(binding.capability));
100
+ }
101
+ }
102
+ // Build metadata with only defined properties
103
+ const metadata = {
104
+ name: json.metadata?.name ?? json.id,
105
+ };
106
+ if (json.metadata?.description !== undefined) {
107
+ ;
108
+ metadata.description = json.metadata.description;
109
+ }
110
+ if (json.metadata?.tags !== undefined) {
111
+ ;
112
+ metadata.tags = json.metadata.tags;
113
+ }
114
+ // Build interpreted surface
115
+ const surface = {
116
+ id: surfaceId(json.id),
117
+ version: json.version,
118
+ environment: json.environment,
119
+ metadata,
120
+ bindings,
121
+ layout: json.layout,
122
+ };
123
+ const manifests = options.validation !== false ? options.validation?.manifests : undefined;
124
+ if (manifests) {
125
+ const warnings = manifestPropFindings(json.layout, manifests);
126
+ if (warnings.length > 0)
127
+ return { success: true, surface, warnings };
128
+ }
129
+ return { success: true, surface };
130
+ }
131
+ /**
132
+ * Parse Surface JSON from a string
133
+ */
134
+ export function parseSurfaceJSON(jsonString) {
135
+ try {
136
+ const json = JSON.parse(jsonString);
137
+ return interpretSurface(json);
138
+ }
139
+ catch (e) {
140
+ return { success: false, errors: [`Invalid JSON: ${e}`] };
141
+ }
142
+ }
143
+ // ============================================================
144
+ // SURFACE BUILDER
145
+ // ============================================================
146
+ /**
147
+ * Surface builder for programmatic construction
148
+ */
149
+ export class SurfaceBuilder {
150
+ _id;
151
+ _version = '1.0.0';
152
+ _environment = 'web';
153
+ _metadata = {};
154
+ _bindings = [];
155
+ _layout = null;
156
+ _validationOptions = {};
157
+ constructor(id) {
158
+ this._id = id;
159
+ }
160
+ version(v) {
161
+ this._version = v;
162
+ return this;
163
+ }
164
+ environment(env) {
165
+ this._environment = env;
166
+ return this;
167
+ }
168
+ name(n) {
169
+ this._metadata.name = n;
170
+ return this;
171
+ }
172
+ description(d) {
173
+ this._metadata.description = d;
174
+ return this;
175
+ }
176
+ tags(...t) {
177
+ this._metadata.tags = t;
178
+ return this;
179
+ }
180
+ bind(capability, alias) {
181
+ const binding = alias ? { capability, alias } : { capability };
182
+ this._bindings.push(binding);
183
+ return this;
184
+ }
185
+ layout(l) {
186
+ this._layout = l;
187
+ return this;
188
+ }
189
+ /**
190
+ * Configure block props validation.
191
+ * Pass false to disable validation entirely.
192
+ */
193
+ validation(options) {
194
+ this._validationOptions = options;
195
+ return this;
196
+ }
197
+ build() {
198
+ if (!this._layout) {
199
+ return { success: false, errors: ['Surface must have a layout'] };
200
+ }
201
+ const json = {
202
+ id: this._id,
203
+ version: this._version,
204
+ environment: this._environment,
205
+ metadata: this._metadata,
206
+ bindings: this._bindings,
207
+ layout: this._layout,
208
+ };
209
+ return interpretSurface(json, { validation: this._validationOptions });
210
+ }
211
+ }
212
+ /**
213
+ * Create a surface builder
214
+ */
215
+ export function surface(id) {
216
+ return new SurfaceBuilder(id);
217
+ }
218
+ // ============================================================
219
+ // RENDER CONTEXT CREATION
220
+ // ============================================================
221
+ /**
222
+ * Create a render context for an interpreted surface
223
+ */
224
+ export function createSurfaceContext(surface, data) {
225
+ return createRenderContext({
226
+ surfaceId: surface.id,
227
+ bindings: surface.bindings,
228
+ data: data ?? {},
229
+ });
230
+ }
231
+ //# sourceMappingURL=interpreter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interpreter.js","sourceRoot":"","sources":["../../src/surface/interpreter.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Surface JSON Interpreter\n *\n * Parse and validate Surface JSON definitions\n *\n * The interpreter converts Surface JSON into a validated Surface object\n * that can be rendered by the renderer.\n *\n * @module @pwfabric/runtime/surface/interpreter\n */\n\nimport type { SurfaceId, CapabilityId } from '@pwfabric/contracts'\nimport { surfaceId, capabilityId, parseVersion } from '@pwfabric/contracts'\nimport type { SurfaceJSON, LayoutJSON, BindingJSON, RenderContext } from './types.js'\nimport { createRenderContext } from './types.js'\nimport { validateLayout } from './layout.js'\nimport {\n manifestPropFindings,\n validateLayoutProps,\n type BlockPropsValidationOptions,\n type ManifestPropFinding,\n} from './validation.js'\nimport type { EnvironmentType } from '@pwfabric/contracts'\n\n// ============================================================\n// INTERPRETATION TYPES\n// ============================================================\n\n/**\n * Interpreted surface\n */\nexport interface InterpretedSurface {\n readonly id: SurfaceId\n readonly version: string\n readonly environment: EnvironmentType\n readonly metadata: {\n readonly name: string\n readonly description?: string\n readonly tags?: readonly string[]\n }\n readonly bindings: Map<string, CapabilityId>\n readonly layout: LayoutJSON\n}\n\n/**\n * Interpretation result\n */\nexport type InterpretationResult =\n | {\n readonly success: true\n readonly surface: InterpretedSurface\n /**\n * Manifest findings when `validation.manifests` was supplied.\n * Warnings only: the surface is interpreted all the same.\n */\n readonly warnings?: readonly ManifestPropFinding[]\n }\n | { readonly success: false; readonly errors: readonly string[] }\n\n// ============================================================\n// SCHEMA VALIDATION\n// ============================================================\n\n/**\n * Validate Surface JSON structure\n */\nfunction validateSurfaceJSON(json: unknown): { valid: boolean; errors: string[] } {\n const errors: string[] = []\n\n if (!json || typeof json !== 'object') {\n return { valid: false, errors: ['Surface JSON must be an object'] }\n }\n\n const obj = json as Record<string, unknown>\n\n // Required fields\n if (typeof obj.id !== 'string' || !obj.id) {\n errors.push('Surface must have a string id')\n }\n\n if (typeof obj.version !== 'string' || !obj.version) {\n errors.push('Surface must have a string version')\n }\n\n if (typeof obj.environment !== 'string' || !obj.environment) {\n errors.push('Surface must have a string environment')\n }\n\n // Validate environment\n const validEnvironments = ['web', 'api', 'cli', 'worker', 'edge', 'node', 'native', 'test']\n if (obj.environment && !validEnvironments.includes(obj.environment as string)) {\n errors.push(\n `Invalid environment: ${obj.environment}. Must be one of: ${validEnvironments.join(', ')}`\n )\n }\n\n // Validate layout\n if (!obj.layout || typeof obj.layout !== 'object') {\n errors.push('Surface must have a layout object')\n } else {\n const layoutResult = validateLayout(obj.layout as LayoutJSON)\n if (!layoutResult.valid) {\n errors.push(...layoutResult.errors.map((e) => `layout: ${e}`))\n }\n }\n\n // Validate bindings if present\n if (obj.bindings !== undefined) {\n if (!Array.isArray(obj.bindings)) {\n errors.push('bindings must be an array')\n } else {\n for (let i = 0; i < obj.bindings.length; i++) {\n const binding = obj.bindings[i] as Record<string, unknown>\n if (typeof binding.capability !== 'string') {\n errors.push(`bindings[${i}]: capability must be a string`)\n }\n }\n }\n }\n\n // Validate metadata if present\n if (obj.metadata !== undefined && typeof obj.metadata !== 'object') {\n errors.push('metadata must be an object')\n }\n\n return { valid: errors.length === 0, errors }\n}\n\n// ============================================================\n// INTERPRETER\n// ============================================================\n\n/**\n * Options for surface interpretation\n */\nexport interface InterpretSurfaceOptions {\n /**\n * Block props validation options.\n * Set to false to disable prop validation entirely.\n */\n readonly validation?: BlockPropsValidationOptions | false\n}\n\n/**\n * Interpret a Surface JSON definition\n */\nexport function interpretSurface(\n json: SurfaceJSON,\n options: InterpretSurfaceOptions = {}\n): InterpretationResult {\n // Validate structure\n const validation = validateSurfaceJSON(json)\n if (!validation.valid) {\n return { success: false, errors: validation.errors }\n }\n\n // Parse version\n const version = parseVersion(json.version)\n if (!version) {\n return { success: false, errors: [`Invalid version format: ${json.version}`] }\n }\n\n // Validate block props if not disabled\n if (options.validation !== false) {\n const propIssues = validateLayoutProps(json.layout, options.validation ?? {})\n if (propIssues.length > 0) {\n const propErrors = propIssues.flatMap((issue) =>\n issue.errors.map((e) => `${issue.path} (${issue.type}): ${e}`)\n )\n return { success: false, errors: propErrors }\n }\n }\n\n // Build bindings map\n const bindings = new Map<string, CapabilityId>()\n if (json.bindings) {\n for (const binding of json.bindings) {\n const alias = binding.alias ?? binding.capability\n bindings.set(alias, capabilityId(binding.capability))\n }\n }\n\n // Build metadata with only defined properties\n const metadata: InterpretedSurface['metadata'] = {\n name: json.metadata?.name ?? json.id,\n }\n if (json.metadata?.description !== undefined) {\n ;(metadata as { description?: string }).description = json.metadata.description\n }\n if (json.metadata?.tags !== undefined) {\n ;(metadata as { tags?: readonly string[] }).tags = json.metadata.tags\n }\n\n // Build interpreted surface\n const surface: InterpretedSurface = {\n id: surfaceId(json.id),\n version: json.version,\n environment: json.environment as EnvironmentType,\n metadata,\n bindings,\n layout: json.layout,\n }\n\n const manifests = options.validation !== false ? options.validation?.manifests : undefined\n if (manifests) {\n const warnings = manifestPropFindings(json.layout, manifests)\n if (warnings.length > 0) return { success: true, surface, warnings }\n }\n return { success: true, surface }\n}\n\n/**\n * Parse Surface JSON from a string\n */\nexport function parseSurfaceJSON(jsonString: string): InterpretationResult {\n try {\n const json = JSON.parse(jsonString) as SurfaceJSON\n return interpretSurface(json)\n } catch (e) {\n return { success: false, errors: [`Invalid JSON: ${e}`] }\n }\n}\n\n// ============================================================\n// SURFACE BUILDER\n// ============================================================\n\n/**\n * Surface builder for programmatic construction\n */\nexport class SurfaceBuilder {\n private _id: string\n private _version = '1.0.0'\n private _environment: EnvironmentType = 'web'\n private _metadata: { name?: string; description?: string; tags?: string[] } = {}\n private _bindings: BindingJSON[] = []\n private _layout: LayoutJSON | null = null\n private _validationOptions: BlockPropsValidationOptions | false = {}\n\n constructor(id: string) {\n this._id = id\n }\n\n version(v: string): this {\n this._version = v\n return this\n }\n\n environment(env: EnvironmentType): this {\n this._environment = env\n return this\n }\n\n name(n: string): this {\n this._metadata.name = n\n return this\n }\n\n description(d: string): this {\n this._metadata.description = d\n return this\n }\n\n tags(...t: string[]): this {\n this._metadata.tags = t\n return this\n }\n\n bind(capability: string, alias?: string): this {\n const binding: BindingJSON = alias ? { capability, alias } : { capability }\n this._bindings.push(binding)\n return this\n }\n\n layout(l: LayoutJSON): this {\n this._layout = l\n return this\n }\n\n /**\n * Configure block props validation.\n * Pass false to disable validation entirely.\n */\n validation(options: BlockPropsValidationOptions | false): this {\n this._validationOptions = options\n return this\n }\n\n build(): InterpretationResult {\n if (!this._layout) {\n return { success: false, errors: ['Surface must have a layout'] }\n }\n\n const json: SurfaceJSON = {\n id: this._id,\n version: this._version,\n environment: this._environment,\n metadata: this._metadata,\n bindings: this._bindings,\n layout: this._layout,\n }\n\n return interpretSurface(json, { validation: this._validationOptions })\n }\n}\n\n/**\n * Create a surface builder\n */\nexport function surface(id: string): SurfaceBuilder {\n return new SurfaceBuilder(id)\n}\n\n// ============================================================\n// RENDER CONTEXT CREATION\n// ============================================================\n\n/**\n * Create a render context for an interpreted surface\n */\nexport function createSurfaceContext(\n surface: InterpretedSurface,\n data?: Record<string, unknown>\n): RenderContext {\n return createRenderContext({\n surfaceId: surface.id,\n bindings: surface.bindings,\n data: data ?? {},\n })\n}\n"]}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Layout System
3
+ *
4
+ * Slot and layout resolution for surfaces
5
+ *
6
+ * The layout system handles:
7
+ * - Slot resolution (named slots with fallback content)
8
+ * - Layout composition (nesting surfaces)
9
+ * - Conditional rendering
10
+ * - Loop expansion
11
+ *
12
+ * @module @pwfabric/runtime/surface/layout
13
+ */
14
+ import type { RenderNode, RenderContext, LayoutJSON } from './types.js';
15
+ /**
16
+ * Layout resolution result
17
+ */
18
+ export type LayoutResult = {
19
+ readonly success: true;
20
+ readonly nodes: readonly RenderNode[];
21
+ } | {
22
+ readonly success: false;
23
+ readonly error: string;
24
+ };
25
+ /**
26
+ * Resolve a layout definition into render nodes
27
+ */
28
+ export declare function resolveLayout(layout: LayoutJSON, context: RenderContext): LayoutResult;
29
+ /**
30
+ * Create a slot map from slot content
31
+ */
32
+ export declare function createSlotMap(slots: Record<string, readonly RenderNode[]>): Map<string, readonly RenderNode[]>;
33
+ /**
34
+ * Extract slots from children based on slot attribute
35
+ */
36
+ export declare function extractSlots(children: readonly RenderNode[]): {
37
+ default: readonly RenderNode[];
38
+ named: Map<string, readonly RenderNode[]>;
39
+ };
40
+ /**
41
+ * Compose multiple layouts into one
42
+ */
43
+ export declare function composeLayouts(layouts: readonly LayoutJSON[], context: RenderContext): LayoutResult;
44
+ /**
45
+ * Wrap nodes in a container
46
+ */
47
+ export declare function wrapInContainer(nodes: readonly RenderNode[], props?: Record<string, unknown>): RenderNode;
48
+ /**
49
+ * Validate a layout definition
50
+ */
51
+ export declare function validateLayout(layout: LayoutJSON): {
52
+ valid: boolean;
53
+ errors: string[];
54
+ };