@pwfabric/runtime 0.0.0-stage → 1.0.0-rc.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 (603) hide show
  1. package/LICENSE +90 -0
  2. package/README.md +13 -2
  3. package/dist/__tests__/dom-test-setup.d.ts +21 -0
  4. package/dist/__tests__/dom-test-setup.d.ts.map +1 -0
  5. package/dist/__tests__/dom-test-setup.js +36 -0
  6. package/dist/__tests__/dom-test-setup.js.map +1 -0
  7. package/dist/a11y/announcer.d.ts +66 -0
  8. package/dist/a11y/announcer.d.ts.map +1 -0
  9. package/dist/a11y/announcer.js +140 -0
  10. package/dist/a11y/announcer.js.map +1 -0
  11. package/dist/a11y/contrast.d.ts +55 -0
  12. package/dist/a11y/contrast.d.ts.map +1 -0
  13. package/dist/a11y/contrast.js +93 -0
  14. package/dist/a11y/contrast.js.map +1 -0
  15. package/dist/a11y/focus.d.ts +124 -0
  16. package/dist/a11y/focus.d.ts.map +1 -0
  17. package/dist/a11y/focus.js +282 -0
  18. package/dist/a11y/focus.js.map +1 -0
  19. package/dist/a11y/index.d.ts +22 -0
  20. package/dist/a11y/index.d.ts.map +1 -0
  21. package/dist/a11y/index.js +18 -0
  22. package/dist/a11y/index.js.map +1 -0
  23. package/dist/a11y/keyboard.d.ts +145 -0
  24. package/dist/a11y/keyboard.d.ts.map +1 -0
  25. package/dist/a11y/keyboard.js +317 -0
  26. package/dist/a11y/keyboard.js.map +1 -0
  27. package/dist/adapters/default-image.d.ts +26 -0
  28. package/dist/adapters/default-image.d.ts.map +1 -0
  29. package/dist/adapters/default-image.js +37 -0
  30. package/dist/adapters/default-image.js.map +1 -0
  31. package/dist/adapters/index.d.ts +28 -0
  32. package/dist/adapters/index.d.ts.map +1 -0
  33. package/dist/adapters/index.js +28 -0
  34. package/dist/adapters/index.js.map +1 -0
  35. package/dist/adapters/next-image.d.ts +39 -0
  36. package/dist/adapters/next-image.d.ts.map +1 -0
  37. package/dist/adapters/next-image.js +124 -0
  38. package/dist/adapters/next-image.js.map +1 -0
  39. package/dist/adapters/types.d.ts +62 -0
  40. package/dist/adapters/types.d.ts.map +1 -0
  41. package/dist/adapters/types.js +11 -0
  42. package/dist/adapters/types.js.map +1 -0
  43. package/dist/analytics/index.d.ts +15 -0
  44. package/dist/analytics/index.d.ts.map +1 -0
  45. package/dist/analytics/index.js +15 -0
  46. package/dist/analytics/index.js.map +1 -0
  47. package/dist/analytics/tracker.d.ts +66 -0
  48. package/dist/analytics/tracker.d.ts.map +1 -0
  49. package/dist/analytics/tracker.js +251 -0
  50. package/dist/analytics/tracker.js.map +1 -0
  51. package/dist/analytics/types.d.ts +131 -0
  52. package/dist/analytics/types.d.ts.map +1 -0
  53. package/dist/analytics/types.js +11 -0
  54. package/dist/analytics/types.js.map +1 -0
  55. package/dist/auth/index.d.ts +16 -0
  56. package/dist/auth/index.d.ts.map +1 -0
  57. package/dist/auth/index.js +14 -0
  58. package/dist/auth/index.js.map +1 -0
  59. package/dist/auth/provider.d.ts +133 -0
  60. package/dist/auth/provider.d.ts.map +1 -0
  61. package/dist/auth/provider.js +473 -0
  62. package/dist/auth/provider.js.map +1 -0
  63. package/dist/auth/types.d.ts +118 -0
  64. package/dist/auth/types.d.ts.map +1 -0
  65. package/dist/auth/types.js +9 -0
  66. package/dist/auth/types.js.map +1 -0
  67. package/dist/binding/collection.d.ts +191 -0
  68. package/dist/binding/collection.d.ts.map +1 -0
  69. package/dist/binding/collection.js +358 -0
  70. package/dist/binding/collection.js.map +1 -0
  71. package/dist/binding/datasource.d.ts +320 -0
  72. package/dist/binding/datasource.d.ts.map +1 -0
  73. package/dist/binding/datasource.js +556 -0
  74. package/dist/binding/datasource.js.map +1 -0
  75. package/dist/binding/engine.d.ts +66 -0
  76. package/dist/binding/engine.d.ts.map +1 -0
  77. package/dist/binding/engine.js +268 -0
  78. package/dist/binding/engine.js.map +1 -0
  79. package/dist/binding/expression.d.ts +151 -0
  80. package/dist/binding/expression.d.ts.map +1 -0
  81. package/dist/binding/expression.js +787 -0
  82. package/dist/binding/expression.js.map +1 -0
  83. package/dist/binding/index.d.ts +20 -0
  84. package/dist/binding/index.d.ts.map +1 -0
  85. package/dist/binding/index.js +14 -0
  86. package/dist/binding/index.js.map +1 -0
  87. package/dist/binding/two-way.d.ts +150 -0
  88. package/dist/binding/two-way.d.ts.map +1 -0
  89. package/dist/binding/two-way.js +462 -0
  90. package/dist/binding/two-way.js.map +1 -0
  91. package/dist/binding/types.d.ts +120 -0
  92. package/dist/binding/types.d.ts.map +1 -0
  93. package/dist/binding/types.js +9 -0
  94. package/dist/binding/types.js.map +1 -0
  95. package/dist/blocks/__test-fixtures__/block-fixtures.d.ts +40 -0
  96. package/dist/blocks/__test-fixtures__/block-fixtures.d.ts.map +1 -0
  97. package/dist/blocks/__test-fixtures__/block-fixtures.js +506 -0
  98. package/dist/blocks/__test-fixtures__/block-fixtures.js.map +1 -0
  99. package/dist/blocks/component-types.d.ts +82 -0
  100. package/dist/blocks/component-types.d.ts.map +1 -0
  101. package/dist/blocks/component-types.js +11 -0
  102. package/dist/blocks/component-types.js.map +1 -0
  103. package/dist/blocks/composition-rules.d.ts +169 -0
  104. package/dist/blocks/composition-rules.d.ts.map +1 -0
  105. package/dist/blocks/composition-rules.js +391 -0
  106. package/dist/blocks/composition-rules.js.map +1 -0
  107. package/dist/blocks/hooks.d.ts +32 -0
  108. package/dist/blocks/hooks.d.ts.map +1 -0
  109. package/dist/blocks/hooks.js +42 -0
  110. package/dist/blocks/hooks.js.map +1 -0
  111. package/dist/blocks/index.d.ts +16 -0
  112. package/dist/blocks/index.d.ts.map +1 -0
  113. package/dist/blocks/index.js +24 -0
  114. package/dist/blocks/index.js.map +1 -0
  115. package/dist/blocks/registry.d.ts +85 -0
  116. package/dist/blocks/registry.d.ts.map +1 -0
  117. package/dist/blocks/registry.js +136 -0
  118. package/dist/blocks/registry.js.map +1 -0
  119. package/dist/blocks/rule-engine.d.ts +132 -0
  120. package/dist/blocks/rule-engine.d.ts.map +1 -0
  121. package/dist/blocks/rule-engine.js +321 -0
  122. package/dist/blocks/rule-engine.js.map +1 -0
  123. package/dist/blocks/surface-event-context.d.ts +14 -0
  124. package/dist/blocks/surface-event-context.d.ts.map +1 -0
  125. package/dist/blocks/surface-event-context.js +14 -0
  126. package/dist/blocks/surface-event-context.js.map +1 -0
  127. package/dist/blocks/surface-id-context.d.ts +14 -0
  128. package/dist/blocks/surface-id-context.d.ts.map +1 -0
  129. package/dist/blocks/surface-id-context.js +15 -0
  130. package/dist/blocks/surface-id-context.js.map +1 -0
  131. package/dist/bus.d.ts +42 -0
  132. package/dist/bus.d.ts.map +1 -0
  133. package/dist/bus.js +158 -0
  134. package/dist/bus.js.map +1 -0
  135. package/dist/cache/index.d.ts +10 -0
  136. package/dist/cache/index.d.ts.map +1 -0
  137. package/dist/cache/index.js +10 -0
  138. package/dist/cache/index.js.map +1 -0
  139. package/dist/cache/memory.d.ts +33 -0
  140. package/dist/cache/memory.d.ts.map +1 -0
  141. package/dist/cache/memory.js +138 -0
  142. package/dist/cache/memory.js.map +1 -0
  143. package/dist/cache/types.d.ts +63 -0
  144. package/dist/cache/types.d.ts.map +1 -0
  145. package/dist/cache/types.js +9 -0
  146. package/dist/cache/types.js.map +1 -0
  147. package/dist/capability/index.d.ts +73 -0
  148. package/dist/capability/index.d.ts.map +1 -0
  149. package/dist/capability/index.js +87 -0
  150. package/dist/capability/index.js.map +1 -0
  151. package/dist/capability/kernel-capabilities.d.ts +32 -0
  152. package/dist/capability/kernel-capabilities.d.ts.map +1 -0
  153. package/dist/capability/kernel-capabilities.js +36 -0
  154. package/dist/capability/kernel-capabilities.js.map +1 -0
  155. package/dist/capability/platform-capabilities.d.ts +72 -0
  156. package/dist/capability/platform-capabilities.d.ts.map +1 -0
  157. package/dist/capability/platform-capabilities.js +267 -0
  158. package/dist/capability/platform-capabilities.js.map +1 -0
  159. package/dist/capability/type-mapping.d.ts +71 -0
  160. package/dist/capability/type-mapping.d.ts.map +1 -0
  161. package/dist/capability/type-mapping.js +107 -0
  162. package/dist/capability/type-mapping.js.map +1 -0
  163. package/dist/capability/validation.d.ts +47 -0
  164. package/dist/capability/validation.d.ts.map +1 -0
  165. package/dist/capability/validation.js +54 -0
  166. package/dist/capability/validation.js.map +1 -0
  167. package/dist/connectors/declared-connector.d.ts +49 -0
  168. package/dist/connectors/declared-connector.d.ts.map +1 -0
  169. package/dist/connectors/declared-connector.js +333 -0
  170. package/dist/connectors/declared-connector.js.map +1 -0
  171. package/dist/connectors/engine-registry.d.ts +51 -0
  172. package/dist/connectors/engine-registry.d.ts.map +1 -0
  173. package/dist/connectors/engine-registry.js +135 -0
  174. package/dist/connectors/engine-registry.js.map +1 -0
  175. package/dist/connectors/index.d.ts +15 -0
  176. package/dist/connectors/index.d.ts.map +1 -0
  177. package/dist/connectors/index.js +14 -0
  178. package/dist/connectors/index.js.map +1 -0
  179. package/dist/connectors/module-loader.d.ts +71 -0
  180. package/dist/connectors/module-loader.d.ts.map +1 -0
  181. package/dist/connectors/module-loader.js +143 -0
  182. package/dist/connectors/module-loader.js.map +1 -0
  183. package/dist/connectors/types.d.ts +175 -0
  184. package/dist/connectors/types.d.ts.map +1 -0
  185. package/dist/connectors/types.js +23 -0
  186. package/dist/connectors/types.js.map +1 -0
  187. package/dist/context.d.ts +28 -0
  188. package/dist/context.d.ts.map +1 -0
  189. package/dist/context.js +38 -0
  190. package/dist/context.js.map +1 -0
  191. package/dist/data/DataCapabilityProvider.d.ts +40 -0
  192. package/dist/data/DataCapabilityProvider.d.ts.map +1 -0
  193. package/dist/data/DataCapabilityProvider.js +58 -0
  194. package/dist/data/DataCapabilityProvider.js.map +1 -0
  195. package/dist/data/index.d.ts +18 -0
  196. package/dist/data/index.d.ts.map +1 -0
  197. package/dist/data/index.js +18 -0
  198. package/dist/data/index.js.map +1 -0
  199. package/dist/data/manager.d.ts +41 -0
  200. package/dist/data/manager.d.ts.map +1 -0
  201. package/dist/data/manager.js +442 -0
  202. package/dist/data/manager.js.map +1 -0
  203. package/dist/data/types.d.ts +219 -0
  204. package/dist/data/types.d.ts.map +1 -0
  205. package/dist/data/types.js +2 -0
  206. package/dist/data/types.js.map +1 -0
  207. package/dist/entity/aggregate.d.ts +9 -0
  208. package/dist/entity/aggregate.d.ts.map +1 -0
  209. package/dist/entity/aggregate.js +24 -0
  210. package/dist/entity/aggregate.js.map +1 -0
  211. package/dist/entity/apply-query.d.ts +59 -0
  212. package/dist/entity/apply-query.d.ts.map +1 -0
  213. package/dist/entity/apply-query.js +264 -0
  214. package/dist/entity/apply-query.js.map +1 -0
  215. package/dist/entity/behavior.d.ts +95 -0
  216. package/dist/entity/behavior.d.ts.map +1 -0
  217. package/dist/entity/behavior.js +78 -0
  218. package/dist/entity/behavior.js.map +1 -0
  219. package/dist/entity/connector.d.ts +142 -0
  220. package/dist/entity/connector.d.ts.map +1 -0
  221. package/dist/entity/connector.js +89 -0
  222. package/dist/entity/connector.js.map +1 -0
  223. package/dist/entity/connectors/index.d.ts +13 -0
  224. package/dist/entity/connectors/index.d.ts.map +1 -0
  225. package/dist/entity/connectors/index.js +11 -0
  226. package/dist/entity/connectors/index.js.map +1 -0
  227. package/dist/entity/connectors/static.d.ts +52 -0
  228. package/dist/entity/connectors/static.d.ts.map +1 -0
  229. package/dist/entity/connectors/static.js +245 -0
  230. package/dist/entity/connectors/static.js.map +1 -0
  231. package/dist/entity/entity-datasource.d.ts +51 -0
  232. package/dist/entity/entity-datasource.d.ts.map +1 -0
  233. package/dist/entity/entity-datasource.js +33 -0
  234. package/dist/entity/entity-datasource.js.map +1 -0
  235. package/dist/entity/facade.d.ts +71 -0
  236. package/dist/entity/facade.d.ts.map +1 -0
  237. package/dist/entity/facade.js +70 -0
  238. package/dist/entity/facade.js.map +1 -0
  239. package/dist/entity/http-connector.d.ts +124 -0
  240. package/dist/entity/http-connector.d.ts.map +1 -0
  241. package/dist/entity/http-connector.js +295 -0
  242. package/dist/entity/http-connector.js.map +1 -0
  243. package/dist/entity/index.d.ts +39 -0
  244. package/dist/entity/index.d.ts.map +1 -0
  245. package/dist/entity/index.js +31 -0
  246. package/dist/entity/index.js.map +1 -0
  247. package/dist/entity/postgres-connector.d.ts +65 -0
  248. package/dist/entity/postgres-connector.d.ts.map +1 -0
  249. package/dist/entity/postgres-connector.js +239 -0
  250. package/dist/entity/postgres-connector.js.map +1 -0
  251. package/dist/entity/registry.d.ts +60 -0
  252. package/dist/entity/registry.d.ts.map +1 -0
  253. package/dist/entity/registry.js +90 -0
  254. package/dist/entity/registry.js.map +1 -0
  255. package/dist/entity/store.d.ts +67 -0
  256. package/dist/entity/store.d.ts.map +1 -0
  257. package/dist/entity/store.js +349 -0
  258. package/dist/entity/store.js.map +1 -0
  259. package/dist/entity/types.d.ts +181 -0
  260. package/dist/entity/types.d.ts.map +1 -0
  261. package/dist/entity/types.js +10 -0
  262. package/dist/entity/types.js.map +1 -0
  263. package/dist/execution-context.d.ts +89 -0
  264. package/dist/execution-context.d.ts.map +1 -0
  265. package/dist/execution-context.js +146 -0
  266. package/dist/execution-context.js.map +1 -0
  267. package/dist/executor.d.ts +28 -0
  268. package/dist/executor.d.ts.map +1 -0
  269. package/dist/executor.js +33 -0
  270. package/dist/executor.js.map +1 -0
  271. package/dist/forms/form-entity-bridge.d.ts +95 -0
  272. package/dist/forms/form-entity-bridge.d.ts.map +1 -0
  273. package/dist/forms/form-entity-bridge.js +96 -0
  274. package/dist/forms/form-entity-bridge.js.map +1 -0
  275. package/dist/forms/form-write-target.d.ts +35 -0
  276. package/dist/forms/form-write-target.d.ts.map +1 -0
  277. package/dist/forms/form-write-target.js +81 -0
  278. package/dist/forms/form-write-target.js.map +1 -0
  279. package/dist/forms/index.d.ts +23 -0
  280. package/dist/forms/index.d.ts.map +1 -0
  281. package/dist/forms/index.js +25 -0
  282. package/dist/forms/index.js.map +1 -0
  283. package/dist/forms/named-control-values.d.ts +28 -0
  284. package/dist/forms/named-control-values.d.ts.map +1 -0
  285. package/dist/forms/named-control-values.js +42 -0
  286. package/dist/forms/named-control-values.js.map +1 -0
  287. package/dist/forms/processor.d.ts +56 -0
  288. package/dist/forms/processor.d.ts.map +1 -0
  289. package/dist/forms/processor.js +154 -0
  290. package/dist/forms/processor.js.map +1 -0
  291. package/dist/forms/types.d.ts +175 -0
  292. package/dist/forms/types.d.ts.map +1 -0
  293. package/dist/forms/types.js +33 -0
  294. package/dist/forms/types.js.map +1 -0
  295. package/dist/forms/validator.d.ts +62 -0
  296. package/dist/forms/validator.d.ts.map +1 -0
  297. package/dist/forms/validator.js +218 -0
  298. package/dist/forms/validator.js.map +1 -0
  299. package/dist/graph/index.d.ts +11 -0
  300. package/dist/graph/index.d.ts.map +1 -0
  301. package/dist/graph/index.js +9 -0
  302. package/dist/graph/index.js.map +1 -0
  303. package/dist/graph/resolver.d.ts +67 -0
  304. package/dist/graph/resolver.d.ts.map +1 -0
  305. package/dist/graph/resolver.js +243 -0
  306. package/dist/graph/resolver.js.map +1 -0
  307. package/dist/graph/types.d.ts +126 -0
  308. package/dist/graph/types.d.ts.map +1 -0
  309. package/dist/graph/types.js +9 -0
  310. package/dist/graph/types.js.map +1 -0
  311. package/dist/hooks/useInstalledAtoms.d.ts +97 -0
  312. package/dist/hooks/useInstalledAtoms.d.ts.map +1 -0
  313. package/dist/hooks/useInstalledAtoms.js +92 -0
  314. package/dist/hooks/useInstalledAtoms.js.map +1 -0
  315. package/dist/i18n/index.d.ts +16 -0
  316. package/dist/i18n/index.d.ts.map +1 -0
  317. package/dist/i18n/index.js +14 -0
  318. package/dist/i18n/index.js.map +1 -0
  319. package/dist/i18n/translator.d.ts +77 -0
  320. package/dist/i18n/translator.d.ts.map +1 -0
  321. package/dist/i18n/translator.js +357 -0
  322. package/dist/i18n/translator.js.map +1 -0
  323. package/dist/i18n/types.d.ts +94 -0
  324. package/dist/i18n/types.d.ts.map +1 -0
  325. package/dist/i18n/types.js +9 -0
  326. package/dist/i18n/types.js.map +1 -0
  327. package/dist/index.d.ts +65 -0
  328. package/dist/index.d.ts.map +1 -0
  329. package/dist/index.js +95 -0
  330. package/dist/index.js.map +1 -0
  331. package/dist/kernel.d.ts +48 -0
  332. package/dist/kernel.d.ts.map +1 -0
  333. package/dist/kernel.js +258 -0
  334. package/dist/kernel.js.map +1 -0
  335. package/dist/perf/budget.d.ts +93 -0
  336. package/dist/perf/budget.d.ts.map +1 -0
  337. package/dist/perf/budget.js +122 -0
  338. package/dist/perf/budget.js.map +1 -0
  339. package/dist/perf/index.d.ts +17 -0
  340. package/dist/perf/index.d.ts.map +1 -0
  341. package/dist/perf/index.js +13 -0
  342. package/dist/perf/index.js.map +1 -0
  343. package/dist/perf/render-timer.d.ts +91 -0
  344. package/dist/perf/render-timer.d.ts.map +1 -0
  345. package/dist/perf/render-timer.js +136 -0
  346. package/dist/perf/render-timer.js.map +1 -0
  347. package/dist/perf/reporter.d.ts +127 -0
  348. package/dist/perf/reporter.d.ts.map +1 -0
  349. package/dist/perf/reporter.js +241 -0
  350. package/dist/perf/reporter.js.map +1 -0
  351. package/dist/perf/web-vitals.d.ts +112 -0
  352. package/dist/perf/web-vitals.d.ts.map +1 -0
  353. package/dist/perf/web-vitals.js +268 -0
  354. package/dist/perf/web-vitals.js.map +1 -0
  355. package/dist/registry.d.ts +64 -0
  356. package/dist/registry.d.ts.map +1 -0
  357. package/dist/registry.js +126 -0
  358. package/dist/registry.js.map +1 -0
  359. package/dist/render/BehaviorSurfaceProvider.d.ts +66 -0
  360. package/dist/render/BehaviorSurfaceProvider.d.ts.map +1 -0
  361. package/dist/render/BehaviorSurfaceProvider.js +185 -0
  362. package/dist/render/BehaviorSurfaceProvider.js.map +1 -0
  363. package/dist/render/BlockErrorBoundary.d.ts +27 -0
  364. package/dist/render/BlockErrorBoundary.d.ts.map +1 -0
  365. package/dist/render/BlockErrorBoundary.js +41 -0
  366. package/dist/render/BlockErrorBoundary.js.map +1 -0
  367. package/dist/render/DataBoundSurfaceRenderer.d.ts +79 -0
  368. package/dist/render/DataBoundSurfaceRenderer.d.ts.map +1 -0
  369. package/dist/render/DataBoundSurfaceRenderer.js +998 -0
  370. package/dist/render/DataBoundSurfaceRenderer.js.map +1 -0
  371. package/dist/render/DynamicBlockWrapper.d.ts +24 -0
  372. package/dist/render/DynamicBlockWrapper.d.ts.map +1 -0
  373. package/dist/render/DynamicBlockWrapper.js +117 -0
  374. package/dist/render/DynamicBlockWrapper.js.map +1 -0
  375. package/dist/render/appearance-resolver.d.ts +51 -0
  376. package/dist/render/appearance-resolver.d.ts.map +1 -0
  377. package/dist/render/appearance-resolver.js +78 -0
  378. package/dist/render/appearance-resolver.js.map +1 -0
  379. package/dist/render/capability-gate.d.ts +70 -0
  380. package/dist/render/capability-gate.d.ts.map +1 -0
  381. package/dist/render/capability-gate.js +94 -0
  382. package/dist/render/capability-gate.js.map +1 -0
  383. package/dist/render/conditional-states-css.d.ts +42 -0
  384. package/dist/render/conditional-states-css.d.ts.map +1 -0
  385. package/dist/render/conditional-states-css.js +82 -0
  386. package/dist/render/conditional-states-css.js.map +1 -0
  387. package/dist/render/connections-context.d.ts +32 -0
  388. package/dist/render/connections-context.d.ts.map +1 -0
  389. package/dist/render/connections-context.js +34 -0
  390. package/dist/render/connections-context.js.map +1 -0
  391. package/dist/render/dark-theme-css.d.ts +37 -0
  392. package/dist/render/dark-theme-css.d.ts.map +1 -0
  393. package/dist/render/dark-theme-css.js +67 -0
  394. package/dist/render/dark-theme-css.js.map +1 -0
  395. package/dist/render/data-binding-types.d.ts +192 -0
  396. package/dist/render/data-binding-types.d.ts.map +1 -0
  397. package/dist/render/data-binding-types.js +11 -0
  398. package/dist/render/data-binding-types.js.map +1 -0
  399. package/dist/render/data-cache.d.ts +31 -0
  400. package/dist/render/data-cache.d.ts.map +1 -0
  401. package/dist/render/data-cache.js +37 -0
  402. package/dist/render/data-cache.js.map +1 -0
  403. package/dist/render/derive-dark-theme.d.ts +18 -0
  404. package/dist/render/derive-dark-theme.d.ts.map +1 -0
  405. package/dist/render/derive-dark-theme.js +18 -0
  406. package/dist/render/derive-dark-theme.js.map +1 -0
  407. package/dist/render/dynamic-artifact-context.d.ts +78 -0
  408. package/dist/render/dynamic-artifact-context.d.ts.map +1 -0
  409. package/dist/render/dynamic-artifact-context.js +89 -0
  410. package/dist/render/dynamic-artifact-context.js.map +1 -0
  411. package/dist/render/dynamic-block-loader.d.ts +81 -0
  412. package/dist/render/dynamic-block-loader.d.ts.map +1 -0
  413. package/dist/render/dynamic-block-loader.js +197 -0
  414. package/dist/render/dynamic-block-loader.js.map +1 -0
  415. package/dist/render/endpoint.d.ts +19 -0
  416. package/dist/render/endpoint.d.ts.map +1 -0
  417. package/dist/render/endpoint.js +109 -0
  418. package/dist/render/endpoint.js.map +1 -0
  419. package/dist/render/entity-facade-context.d.ts +35 -0
  420. package/dist/render/entity-facade-context.d.ts.map +1 -0
  421. package/dist/render/entity-facade-context.js +37 -0
  422. package/dist/render/entity-facade-context.js.map +1 -0
  423. package/dist/render/group-states-css.d.ts +42 -0
  424. package/dist/render/group-states-css.d.ts.map +1 -0
  425. package/dist/render/group-states-css.js +73 -0
  426. package/dist/render/group-states-css.js.map +1 -0
  427. package/dist/render/hooks/useSurfaceEvents.d.ts +9 -0
  428. package/dist/render/hooks/useSurfaceEvents.d.ts.map +1 -0
  429. package/dist/render/hooks/useSurfaceEvents.js +9 -0
  430. package/dist/render/hooks/useSurfaceEvents.js.map +1 -0
  431. package/dist/render/hooks/useSurfaceId.d.ts +9 -0
  432. package/dist/render/hooks/useSurfaceId.d.ts.map +1 -0
  433. package/dist/render/hooks/useSurfaceId.js +9 -0
  434. package/dist/render/hooks/useSurfaceId.js.map +1 -0
  435. package/dist/render/index.d.ts +49 -0
  436. package/dist/render/index.d.ts.map +1 -0
  437. package/dist/render/index.js +61 -0
  438. package/dist/render/index.js.map +1 -0
  439. package/dist/render/interaction-rule-engine.d.ts +13 -0
  440. package/dist/render/interaction-rule-engine.d.ts.map +1 -0
  441. package/dist/render/interaction-rule-engine.js +47 -0
  442. package/dist/render/interaction-rule-engine.js.map +1 -0
  443. package/dist/render/keyframes-css.d.ts +32 -0
  444. package/dist/render/keyframes-css.d.ts.map +1 -0
  445. package/dist/render/keyframes-css.js +44 -0
  446. package/dist/render/keyframes-css.js.map +1 -0
  447. package/dist/render/query-state.d.ts +4 -0
  448. package/dist/render/query-state.d.ts.map +1 -0
  449. package/dist/render/query-state.js +70 -0
  450. package/dist/render/query-state.js.map +1 -0
  451. package/dist/render/renderer.d.ts +45 -0
  452. package/dist/render/renderer.d.ts.map +1 -0
  453. package/dist/render/renderer.js +937 -0
  454. package/dist/render/renderer.js.map +1 -0
  455. package/dist/render/resolve-expressions.d.ts +38 -0
  456. package/dist/render/resolve-expressions.d.ts.map +1 -0
  457. package/dist/render/resolve-expressions.js +309 -0
  458. package/dist/render/resolve-expressions.js.map +1 -0
  459. package/dist/render/responsive-style-css.d.ts +43 -0
  460. package/dist/render/responsive-style-css.d.ts.map +1 -0
  461. package/dist/render/responsive-style-css.js +123 -0
  462. package/dist/render/responsive-style-css.js.map +1 -0
  463. package/dist/render/responsive.d.ts +50 -0
  464. package/dist/render/responsive.d.ts.map +1 -0
  465. package/dist/render/responsive.js +99 -0
  466. package/dist/render/responsive.js.map +1 -0
  467. package/dist/render/scoped-css.d.ts +72 -0
  468. package/dist/render/scoped-css.d.ts.map +1 -0
  469. package/dist/render/scoped-css.js +102 -0
  470. package/dist/render/scoped-css.js.map +1 -0
  471. package/dist/render/shell-selection.d.ts +70 -0
  472. package/dist/render/shell-selection.d.ts.map +1 -0
  473. package/dist/render/shell-selection.js +117 -0
  474. package/dist/render/shell-selection.js.map +1 -0
  475. package/dist/render/states-css.d.ts +33 -0
  476. package/dist/render/states-css.d.ts.map +1 -0
  477. package/dist/render/states-css.js +63 -0
  478. package/dist/render/states-css.js.map +1 -0
  479. package/dist/render/surface-data-context.d.ts +19 -0
  480. package/dist/render/surface-data-context.d.ts.map +1 -0
  481. package/dist/render/surface-data-context.js +21 -0
  482. package/dist/render/surface-data-context.js.map +1 -0
  483. package/dist/render/surface-event-bus.d.ts +20 -0
  484. package/dist/render/surface-event-bus.d.ts.map +1 -0
  485. package/dist/render/surface-event-bus.js +68 -0
  486. package/dist/render/surface-event-bus.js.map +1 -0
  487. package/dist/render/surface-event-context.d.ts +12 -0
  488. package/dist/render/surface-event-context.d.ts.map +1 -0
  489. package/dist/render/surface-event-context.js +12 -0
  490. package/dist/render/surface-event-context.js.map +1 -0
  491. package/dist/render/surface-id-context.d.ts +9 -0
  492. package/dist/render/surface-id-context.d.ts.map +1 -0
  493. package/dist/render/surface-id-context.js +9 -0
  494. package/dist/render/surface-id-context.js.map +1 -0
  495. package/dist/render/theme-utils.d.ts +15 -0
  496. package/dist/render/theme-utils.d.ts.map +1 -0
  497. package/dist/render/theme-utils.js +15 -0
  498. package/dist/render/theme-utils.js.map +1 -0
  499. package/dist/render/types.d.ts +283 -0
  500. package/dist/render/types.d.ts.map +1 -0
  501. package/dist/render/types.js +9 -0
  502. package/dist/render/types.js.map +1 -0
  503. package/dist/render/visibility-css.d.ts +43 -0
  504. package/dist/render/visibility-css.d.ts.map +1 -0
  505. package/dist/render/visibility-css.js +119 -0
  506. package/dist/render/visibility-css.js.map +1 -0
  507. package/dist/render/width-scope.d.ts +35 -0
  508. package/dist/render/width-scope.d.ts.map +1 -0
  509. package/dist/render/width-scope.js +44 -0
  510. package/dist/render/width-scope.js.map +1 -0
  511. package/dist/render/write-only-sources.d.ts +34 -0
  512. package/dist/render/write-only-sources.d.ts.map +1 -0
  513. package/dist/render/write-only-sources.js +99 -0
  514. package/dist/render/write-only-sources.js.map +1 -0
  515. package/dist/routing/index.d.ts +15 -0
  516. package/dist/routing/index.d.ts.map +1 -0
  517. package/dist/routing/index.js +15 -0
  518. package/dist/routing/index.js.map +1 -0
  519. package/dist/routing/router.d.ts +43 -0
  520. package/dist/routing/router.d.ts.map +1 -0
  521. package/dist/routing/router.js +218 -0
  522. package/dist/routing/router.js.map +1 -0
  523. package/dist/routing/types.d.ts +125 -0
  524. package/dist/routing/types.d.ts.map +1 -0
  525. package/dist/routing/types.js +9 -0
  526. package/dist/routing/types.js.map +1 -0
  527. package/dist/seo/generator.d.ts +40 -0
  528. package/dist/seo/generator.d.ts.map +1 -0
  529. package/dist/seo/generator.js +236 -0
  530. package/dist/seo/generator.js.map +1 -0
  531. package/dist/seo/index.d.ts +15 -0
  532. package/dist/seo/index.d.ts.map +1 -0
  533. package/dist/seo/index.js +15 -0
  534. package/dist/seo/index.js.map +1 -0
  535. package/dist/seo/types.d.ts +182 -0
  536. package/dist/seo/types.d.ts.map +1 -0
  537. package/dist/seo/types.js +9 -0
  538. package/dist/seo/types.js.map +1 -0
  539. package/dist/state/index.d.ts +16 -0
  540. package/dist/state/index.d.ts.map +1 -0
  541. package/dist/state/index.js +16 -0
  542. package/dist/state/index.js.map +1 -0
  543. package/dist/state/manager.d.ts +34 -0
  544. package/dist/state/manager.d.ts.map +1 -0
  545. package/dist/state/manager.js +81 -0
  546. package/dist/state/manager.js.map +1 -0
  547. package/dist/state/store.d.ts +41 -0
  548. package/dist/state/store.d.ts.map +1 -0
  549. package/dist/state/store.js +145 -0
  550. package/dist/state/store.js.map +1 -0
  551. package/dist/state/types.d.ts +108 -0
  552. package/dist/state/types.d.ts.map +1 -0
  553. package/dist/state/types.js +9 -0
  554. package/dist/state/types.js.map +1 -0
  555. package/dist/surface/expression.d.ts +66 -0
  556. package/dist/surface/expression.d.ts.map +1 -0
  557. package/dist/surface/expression.js +179 -0
  558. package/dist/surface/expression.js.map +1 -0
  559. package/dist/surface/index.d.ts +33 -0
  560. package/dist/surface/index.d.ts.map +1 -0
  561. package/dist/surface/index.js +25 -0
  562. package/dist/surface/index.js.map +1 -0
  563. package/dist/surface/interpreter.d.ts +97 -0
  564. package/dist/surface/interpreter.d.ts.map +1 -0
  565. package/dist/surface/interpreter.js +231 -0
  566. package/dist/surface/interpreter.js.map +1 -0
  567. package/dist/surface/layout.d.ts +55 -0
  568. package/dist/surface/layout.d.ts.map +1 -0
  569. package/dist/surface/layout.js +288 -0
  570. package/dist/surface/layout.js.map +1 -0
  571. package/dist/surface/output.d.ts +91 -0
  572. package/dist/surface/output.d.ts.map +1 -0
  573. package/dist/surface/output.js +104 -0
  574. package/dist/surface/output.js.map +1 -0
  575. package/dist/surface/primitives.d.ts +181 -0
  576. package/dist/surface/primitives.d.ts.map +1 -0
  577. package/dist/surface/primitives.js +339 -0
  578. package/dist/surface/primitives.js.map +1 -0
  579. package/dist/surface/renderer.d.ts +97 -0
  580. package/dist/surface/renderer.d.ts.map +1 -0
  581. package/dist/surface/renderer.js +190 -0
  582. package/dist/surface/renderer.js.map +1 -0
  583. package/dist/surface/schemas.d.ts +182 -0
  584. package/dist/surface/schemas.d.ts.map +1 -0
  585. package/dist/surface/schemas.js +142 -0
  586. package/dist/surface/schemas.js.map +1 -0
  587. package/dist/surface/transforms.d.ts +145 -0
  588. package/dist/surface/transforms.d.ts.map +1 -0
  589. package/dist/surface/transforms.js +120 -0
  590. package/dist/surface/transforms.js.map +1 -0
  591. package/dist/surface/types.d.ts +161 -0
  592. package/dist/surface/types.d.ts.map +1 -0
  593. package/dist/surface/types.js +51 -0
  594. package/dist/surface/types.js.map +1 -0
  595. package/dist/surface/validation.d.ts +124 -0
  596. package/dist/surface/validation.d.ts.map +1 -0
  597. package/dist/surface/validation.js +147 -0
  598. package/dist/surface/validation.js.map +1 -0
  599. package/dist/validator.d.ts +56 -0
  600. package/dist/validator.d.ts.map +1 -0
  601. package/dist/validator.js +100 -0
  602. package/dist/validator.js.map +1 -0
  603. package/package.json +105 -3
@@ -0,0 +1,219 @@
1
+ import type { EntityQuery } from '../entity/types.js';
2
+ /**
3
+ * Data Capability Types
4
+ *
5
+ * Data source resolution, fetch integration, and data binding for surfaces
6
+ *
7
+ * @module @pwfabric/runtime/data/types
8
+ */
9
+ /**
10
+ * Supported data source kinds
11
+ */
12
+ export type DataSourceKind = 'rest' | 'graphql' | 'static' | 'state' | 'computed';
13
+ /**
14
+ * Data source definition for capability resolution
15
+ */
16
+ export interface DataSourceDefinition<T = unknown> {
17
+ readonly id: string;
18
+ readonly kind: DataSourceKind;
19
+ readonly name?: string;
20
+ readonly endpoint?: string;
21
+ readonly method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
22
+ readonly headers?: Readonly<Record<string, string>>;
23
+ readonly staticData?: T;
24
+ readonly stateKey?: string;
25
+ readonly compute?: (context: DataResolveContext) => T | Promise<T>;
26
+ readonly transform?: (raw: unknown) => T;
27
+ readonly cache?: DataCacheConfig;
28
+ readonly retry?: DataRetryConfig;
29
+ /**
30
+ * the identity this source is called WITH, by name.
31
+ *
32
+ * Without it a `rest` source cannot read authenticated data at all — 403
33
+ * anonymous, 401 without a bearer, CORS-blocked with cookies — so the only
34
+ * answer to "read this API as me" would be to write an engine. Named here,
35
+ * the data path attaches that identity's LIVE token at call time.
36
+ *
37
+ * A NAME, NEVER A VALUE. The ref is resolved per call against the running
38
+ * app's auth bridge; no token is stored on the source and none is serialised
39
+ * into a published bundle.
40
+ */
41
+ readonly authProviderRef?: string;
42
+ /**
43
+ * The response property holding the list — `data`, `products`, or absent
44
+ * when the body IS the array. Dotted paths allowed for a nested one.
45
+ */
46
+ readonly returns?: string;
47
+ /**
48
+ * The source's own filter / sort / pagination, applied to the rows AFTER the
49
+ * fetch. A REST endpoint does not speak the platform's query language — a
50
+ * declared engine's foreign API answers 400 to `filter=` — so the query is
51
+ * never sent; it is applied here, once, the same way for every kind.
52
+ */
53
+ readonly query?: EntityQuery;
54
+ }
55
+ /**
56
+ * Cache configuration for data sources
57
+ */
58
+ export interface DataCacheConfig {
59
+ readonly enabled: boolean;
60
+ readonly ttl?: number;
61
+ readonly key?: string;
62
+ }
63
+ /**
64
+ * Retry configuration for data sources
65
+ */
66
+ export interface DataRetryConfig {
67
+ readonly maxAttempts: number;
68
+ readonly baseDelay: number;
69
+ readonly exponentialBackoff?: boolean;
70
+ }
71
+ /**
72
+ * Context provided during data resolution
73
+ */
74
+ export interface DataResolveContext {
75
+ readonly params: Readonly<Record<string, unknown>>;
76
+ readonly signal?: AbortSignal;
77
+ readonly getState?: (key: string) => unknown;
78
+ }
79
+ /**
80
+ * Options for fetching data
81
+ */
82
+ export interface DataFetchOptions {
83
+ readonly params?: Readonly<Record<string, unknown>>;
84
+ readonly headers?: Readonly<Record<string, string>>;
85
+ readonly body?: unknown;
86
+ /**
87
+ * Overrides the source's own method for this call — a form writing to a
88
+ * source it also reads from. The source declares how it is READ; a write is
89
+ * a different verb against the same address.
90
+ */
91
+ readonly method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
92
+ /**
93
+ * Address ONE record of the collection the source reads: the request goes
94
+ * to `<endpoint>/<recordId>`. A form updating the row it loaded needs this;
95
+ * a PATCH to the collection path is a request nobody answers.
96
+ */
97
+ readonly recordId?: string;
98
+ readonly signal?: AbortSignal;
99
+ readonly skipCache?: boolean;
100
+ readonly timeout?: number;
101
+ }
102
+ /**
103
+ * Result of a data fetch operation
104
+ */
105
+ export type DataFetchResult<T> = {
106
+ readonly success: true;
107
+ readonly data: T;
108
+ readonly metadata: DataFetchMetadata;
109
+ } | {
110
+ readonly success: false;
111
+ readonly error: DataFetchError;
112
+ };
113
+ /**
114
+ * Metadata about a successful data fetch
115
+ */
116
+ export interface DataFetchMetadata {
117
+ readonly duration: number;
118
+ readonly fromCache: boolean;
119
+ /** HTTP status of a `rest` / `graphql` answer. */
120
+ readonly status?: number;
121
+ readonly timestamp: number;
122
+ /**
123
+ * The rest of the response body when `returns` plucked the list out of it —
124
+ * DummyJSON's `{ products, total, skip, limit }` gives
125
+ * `{ total, skip, limit }`. Without it a paginated list could not know how
126
+ * many rows exist. Absent when there is no `returns` or the body is not an
127
+ * object.
128
+ */
129
+ readonly envelope?: Readonly<Record<string, unknown>>;
130
+ }
131
+ /**
132
+ * Error from a data fetch operation
133
+ */
134
+ export interface DataFetchError {
135
+ readonly type: 'network' | 'timeout' | 'validation' | 'transform' | 'not_found' | 'unknown';
136
+ /**
137
+ * The server's own message when its refusal carried one
138
+ * (`{ error: { code, message } }`), else the HTTP status line.
139
+ */
140
+ readonly message: string;
141
+ readonly status?: number;
142
+ /** The server's error code (`NOT_FOUND`, `VALIDATION_FAILED`, …) when it sent one. */
143
+ readonly code?: string;
144
+ readonly cause?: unknown;
145
+ }
146
+ /**
147
+ * Binding between a data source and a surface element
148
+ */
149
+ export interface DataBinding<T = unknown> {
150
+ readonly id: string;
151
+ readonly sourceId: string;
152
+ readonly targetPath: string;
153
+ readonly transform?: (data: T) => unknown;
154
+ readonly autoRefresh?: boolean;
155
+ }
156
+ /**
157
+ * Data binding state
158
+ */
159
+ export type DataBindingState = 'idle' | 'loading' | 'loaded' | 'error' | 'stale';
160
+ /**
161
+ * Live data binding with current state and subscription
162
+ */
163
+ export interface LiveDataBinding<T = unknown> {
164
+ readonly binding: DataBinding<T>;
165
+ readonly state: DataBindingState;
166
+ readonly data: T | undefined;
167
+ readonly error: DataFetchError | undefined;
168
+ refresh(): Promise<DataFetchResult<T>>;
169
+ subscribe(listener: DataBindingListener<T>): () => void;
170
+ }
171
+ /**
172
+ * Listener for data binding changes
173
+ */
174
+ export type DataBindingListener<T> = (data: T | undefined, state: DataBindingState) => void;
175
+ /**
176
+ * Configuration for DataService instances.
177
+ * Can be provided by the capability registry or directly.
178
+ */
179
+ export interface DataServiceConfig {
180
+ readonly defaultCacheTtl?: number;
181
+ readonly maxRetries?: number;
182
+ readonly timeout?: number;
183
+ /**
184
+ * resolves the live token for a source's
185
+ * `authProviderRef`. Supplied by the host (the runner hands over the same
186
+ * PKCE bridge the engine registry is constructed with). Absent, every
187
+ * request goes out unauthenticated, exactly as before.
188
+ */
189
+ readonly getAccessToken?: (ref?: string) => Promise<string | null>;
190
+ /**
191
+ * The platform's own API origin — and ONLY requests to it carry credentials.
192
+ *
193
+ * The platform store is a REST resource like any other, so it goes through
194
+ * the same engine; the one thing that differs is that it authenticates by
195
+ * cookie. `credentials` is therefore decided by origin, never by default:
196
+ * `'same-origin'` is what fetch does on its own, and a published app served
197
+ * at `<slug>.apps.example.com` calling `api.example.com` is cross-origin, so
198
+ * the default would silently drop the cookie. Absent, nothing is ever sent
199
+ * anywhere — a cookie must never leak to a third party's endpoint.
200
+ */
201
+ readonly platformApiOrigin?: string;
202
+ }
203
+ /**
204
+ * Service interface for managing data sources and bindings.
205
+ *
206
+ * Renamed from DataCapability to avoid overloading "capability" —
207
+ * this is a service, not a registry capability declaration.
208
+ */
209
+ export interface DataServiceInterface {
210
+ registerSource<T>(definition: DataSourceDefinition<T>): void;
211
+ resolveDataSource(sourceId: string): DataSourceDefinition | undefined;
212
+ hasSource(sourceId: string): boolean;
213
+ fetchData<T>(sourceId: string, options?: DataFetchOptions): Promise<DataFetchResult<T>>;
214
+ bindData<T>(binding: DataBinding<T>): LiveDataBinding<T>;
215
+ unregisterSource(sourceId: string): boolean;
216
+ getSourceIds(): readonly string[];
217
+ clear(): void;
218
+ }
219
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/data/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/data/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ import type { ConnectorAggregateResult, ConnectorQueryResult } from './connector.js';
2
+ import type { EntityAggregate, EntityQuery, EntityTypeId } from './types.js';
3
+ /** The least a source needs: `query`, and `aggregate` when it has one. */
4
+ export interface AggregateSource {
5
+ query(entityType: EntityTypeId, query: EntityQuery): Promise<ConnectorQueryResult>;
6
+ aggregate?(entityType: EntityTypeId, aggregate: EntityAggregate): Promise<ConnectorAggregateResult>;
7
+ }
8
+ export declare function aggregateThrough(source: AggregateSource, entityType: EntityTypeId, aggregate: EntityAggregate): Promise<ConnectorAggregateResult>;
9
+ //# sourceMappingURL=aggregate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregate.d.ts","sourceRoot":"","sources":["../../src/entity/aggregate.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACpF,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE5E,0EAA0E;AAC1E,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,UAAU,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAA;IAClF,SAAS,CAAC,CAAC,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,eAAe,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAA;CACpG;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,eAAe,EACvB,UAAU,EAAE,YAAY,EACxB,SAAS,EAAE,eAAe,GACzB,OAAO,CAAC,wBAAwB,CAAC,CAKnC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * aggregateThrough — one number from whatever can answer.
3
+ *
4
+ * The platform connector asks the server (`HttpEntityConnector.aggregate`).
5
+ * Everything else — the static connector, a declared engine, a host facade
6
+ * that predates `resolveAggregate` — only lists. Rather than make every one
7
+ * of them grow an aggregate, the store and the renderer go through here: a
8
+ * source with `aggregate` is asked, a source without is queried with the
9
+ * aggregate's filter and reduced in memory (`aggregateEntities`). The
10
+ * fallback reduces the rows the query RETURNS — a paginated list connector
11
+ * counts its first page — which is why the platform path is server-side.
12
+ *
13
+ * @module @pwfabric/runtime/entity/aggregate
14
+ */
15
+ import { aggregateEntities } from './apply-query.js';
16
+ export async function aggregateThrough(source, entityType, aggregate) {
17
+ if (typeof source.aggregate === 'function')
18
+ return source.aggregate(entityType, aggregate);
19
+ const res = await source.query(entityType, aggregate.filter ? { filter: aggregate.filter } : {});
20
+ if (!res.success)
21
+ return res;
22
+ return { success: true, result: aggregateEntities(res.result.items, aggregate) };
23
+ }
24
+ //# sourceMappingURL=aggregate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregate.js","sourceRoot":"","sources":["../../src/entity/aggregate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAUpD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAuB,EACvB,UAAwB,EACxB,SAA0B;IAE1B,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,UAAU;QAAE,OAAO,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;IAC1F,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IAChG,IAAI,CAAC,GAAG,CAAC,OAAO;QAAE,OAAO,GAAG,CAAA;IAC5B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAA;AAClF,CAAC"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * applyEntityQuery — the ONE place an `EntityQuery` is actually applied.
3
+ *
4
+ * Engines typically read the filter only as a NAMED-PARAMETER lookup
5
+ * (`ctx.filter('siteId')`) and apply neither `operator` nor sort/pagination,
6
+ * so a pattern that declared
7
+ * `{ filter: { field: 'isRead', operator: 'eq', value: false } }` would be
8
+ * silently ignored. Connectors call this on their result envelope so the
9
+ * declared query is honoured client-side regardless of what the upstream API
10
+ * supports.
11
+ *
12
+ * Semantics:
13
+ * - filter: one node = `field operator value`; `and[]` / `or[]` combine
14
+ * child nodes with the node's own test (a node with no `field` is pure
15
+ * combinator). Missing fields compare as `undefined`.
16
+ * - sort: stable multi-key; numbers/dates/strings compared natively,
17
+ * `null`/`undefined` last in both directions.
18
+ * - pagination: `{ offset, limit }` slice AFTER filter+sort; `total` is the
19
+ * filtered count, `hasMore` is offset+limit < total.
20
+ *
21
+ * @module @pwfabric/runtime/entity/apply-query
22
+ */
23
+ import type { EntityAggregate, EntityAggregateResult, EntityFilter, EntityQuery, EntityQueryResult, EntitySortField } from './types.js';
24
+ type Row = Record<string, unknown>;
25
+ /** Evaluate one filter node (leaf test + and/or combinators) against a row. */
26
+ export declare function matchesEntityFilter(row: Row, filter: EntityFilter): boolean;
27
+ /** Stable multi-key sort; nullish values sort last in both directions. */
28
+ export declare function sortEntities<T extends Row>(items: readonly T[], sort: readonly EntitySortField[]): T[];
29
+ /**
30
+ * Every shape a sort is written in, as the one the sorter takes.
31
+ *
32
+ * WHY: the contract says `sort: EntitySortField[]`, but pages and models write
33
+ * a single object far more often: `{ field: 'date', direction: 'asc' }`. It
34
+ * has no `length`, so the old `query.sort.length > 0` test read it as "no
35
+ * sort" and the list came back in storage order, silently. Accepted now:
36
+ *
37
+ * [{ field, direction }] the contract shape (invalid entries dropped)
38
+ * { field, direction? } one sort key
39
+ * { date: 'desc', title: 'asc' } a field → direction map, in key order
40
+ * 'date' | '-date' a field name, `-` for descending
41
+ *
42
+ * A missing or unknown direction reads as ascending. Anything else is no sort.
43
+ */
44
+ export declare function normalizeEntitySort(sort: unknown): EntitySortField[];
45
+ /**
46
+ * Reduce an in-memory list to ONE NUMBER — the client half of what the
47
+ * platform's `/count` and `/aggregate` routes do server-side, for connectors
48
+ * that only list. `filter` narrows first; `count` is the kept rows; the rest
49
+ * read `field` as a number (a numeric string counts, nullish/NaN is skipped)
50
+ * and answer `null` when nothing was numeric.
51
+ */
52
+ export declare function aggregateEntities(items: readonly Row[], aggregate: EntityAggregate): EntityAggregateResult;
53
+ /**
54
+ * Apply filter → sort → pagination to an in-memory list and return the
55
+ * paginated envelope. An empty/undefined query returns everything.
56
+ */
57
+ export declare function applyEntityQuery<T extends Row>(items: readonly T[], query: EntityQuery | undefined): EntityQueryResult<T>;
58
+ export {};
59
+ //# sourceMappingURL=apply-query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-query.d.ts","sourceRoot":"","sources":["../../src/entity/apply-query.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,EACV,eAAe,EACf,qBAAqB,EACrB,YAAY,EACZ,WAAW,EACX,iBAAiB,EACjB,eAAe,EAChB,MAAM,YAAY,CAAA;AAEnB,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AA+GlC,+EAA+E;AAC/E,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAc3E;AAED,0EAA0E;AAC1E,wBAAgB,YAAY,CAAC,CAAC,SAAS,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,eAAe,EAAE,GAAG,CAAC,EAAE,CAmBtG;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,eAAe,EAAE,CAwBpE;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,GAAG,EAAE,EAAE,SAAS,EAAE,eAAe,GAAG,qBAAqB,CA0B1G;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,GAAG,EAC5C,KAAK,EAAE,SAAS,CAAC,EAAE,EACnB,KAAK,EAAE,WAAW,GAAG,SAAS,GAC7B,iBAAiB,CAAC,CAAC,CAAC,CAatB"}
@@ -0,0 +1,264 @@
1
+ function readField(row, field) {
2
+ if (field in row)
3
+ return row[field];
4
+ // dotted path (`owner.displayName`)
5
+ let cur = row;
6
+ for (const part of field.split('.')) {
7
+ if (cur === null || cur === undefined || typeof cur !== 'object')
8
+ return undefined;
9
+ cur = cur[part];
10
+ }
11
+ return cur;
12
+ }
13
+ function toComparable(v) {
14
+ if (v === null || v === undefined)
15
+ return undefined;
16
+ if (typeof v === 'number' || typeof v === 'string')
17
+ return v;
18
+ if (typeof v === 'boolean')
19
+ return v ? 1 : 0;
20
+ if (v instanceof Date)
21
+ return v.getTime();
22
+ return String(v);
23
+ }
24
+ /** Loose equality for filter values: `'3' eq 3`, `true eq 'true'`, dates by time. */
25
+ function looseEq(a, b) {
26
+ if (a === b)
27
+ return true;
28
+ if (a === null || a === undefined || b === null || b === undefined)
29
+ return false;
30
+ if (a instanceof Date || b instanceof Date) {
31
+ const ta = a instanceof Date ? a.getTime() : new Date(String(a)).getTime();
32
+ const tb = b instanceof Date ? b.getTime() : new Date(String(b)).getTime();
33
+ return Number.isFinite(ta) && ta === tb;
34
+ }
35
+ if (typeof a === 'object' || typeof b === 'object')
36
+ return false;
37
+ return String(a) === String(b);
38
+ }
39
+ /** A string that is a number and nothing else — `"95"`, `"-3.5"`, `"1e3"`; not `""`, not a date. */
40
+ const NUMERIC = /^\s*[-+]?(\d+\.?\d*|\.\d+)(e[-+]?\d+)?\s*$/i;
41
+ /** The number a comparable reads as, or undefined when it is not number-looking. */
42
+ function numericValue(v) {
43
+ if (typeof v === 'number')
44
+ return Number.isFinite(v) ? v : undefined;
45
+ if (!NUMERIC.test(v))
46
+ return undefined;
47
+ const n = Number(v);
48
+ return Number.isFinite(n) ? n : undefined;
49
+ }
50
+ function compareOrdered(a, b) {
51
+ const ca = toComparable(a);
52
+ const cb = toComparable(b);
53
+ if (ca === undefined || cb === undefined)
54
+ return undefined;
55
+ if (typeof ca === 'number' && typeof cb === 'number')
56
+ return ca - cb;
57
+ // A number-looking string is a number here. A form saves what was typed, so
58
+ // `price` is "95" on one row and 100 on the next; compared as strings
59
+ // "95" > "100", and `price gt 100` would keep the cheaper item.
60
+ //
61
+ // TOTAL ORDER: number-looking values are one class, compared
62
+ // numerically, and sort BEFORE every other value; the rest (ISO dates,
63
+ // text) compare as strings. Comparing a number with text as text made a
64
+ // cycle on a mixed column ("2" < "10" < "1a" < "2") and the sort order
65
+ // depended on the input. Note: "007" reads as 7 — leading-zero codes sort
66
+ // numerically and tie their unpadded value.
67
+ const na = numericValue(ca);
68
+ const nb = numericValue(cb);
69
+ if (na !== undefined && nb !== undefined)
70
+ return na - nb;
71
+ if (na !== undefined)
72
+ return -1;
73
+ if (nb !== undefined)
74
+ return 1;
75
+ // ISO date strings compare correctly as strings; text compares as text
76
+ const sa = String(ca);
77
+ const sb = String(cb);
78
+ return sa < sb ? -1 : sa > sb ? 1 : 0;
79
+ }
80
+ function testLeaf(actual, operator, expected) {
81
+ switch (operator) {
82
+ case 'eq':
83
+ return looseEq(actual, expected);
84
+ case 'neq':
85
+ return !looseEq(actual, expected);
86
+ case 'gt': {
87
+ const c = compareOrdered(actual, expected);
88
+ return c !== undefined && c > 0;
89
+ }
90
+ case 'gte': {
91
+ const c = compareOrdered(actual, expected);
92
+ return c !== undefined && c >= 0;
93
+ }
94
+ case 'lt': {
95
+ const c = compareOrdered(actual, expected);
96
+ return c !== undefined && c < 0;
97
+ }
98
+ case 'lte': {
99
+ const c = compareOrdered(actual, expected);
100
+ return c !== undefined && c <= 0;
101
+ }
102
+ case 'in': {
103
+ const set = Array.isArray(expected) ? expected : [expected];
104
+ return set.some((e) => looseEq(actual, e));
105
+ }
106
+ case 'contains': {
107
+ if (Array.isArray(actual))
108
+ return actual.some((x) => looseEq(x, expected));
109
+ if (actual === null || actual === undefined)
110
+ return false;
111
+ return String(actual).toLowerCase().includes(String(expected).toLowerCase());
112
+ }
113
+ case 'startsWith': {
114
+ if (actual === null || actual === undefined)
115
+ return false;
116
+ return String(actual).toLowerCase().startsWith(String(expected).toLowerCase());
117
+ }
118
+ default:
119
+ return false;
120
+ }
121
+ }
122
+ /** Evaluate one filter node (leaf test + and/or combinators) against a row. */
123
+ export function matchesEntityFilter(row, filter) {
124
+ // A leaf needs something to compare against. Every operator in the union
125
+ // takes a value, so `value: undefined` is not a constraint the author wrote —
126
+ // it is a control with no selection (see resolveQueryState) — and a node
127
+ // without a constraint matches, rather than eliminating every row.
128
+ const hasLeaf = typeof filter.field === 'string' &&
129
+ filter.field !== '' &&
130
+ filter.operator !== undefined &&
131
+ filter.value !== undefined;
132
+ const leaf = hasLeaf ? testLeaf(readField(row, filter.field), filter.operator, filter.value) : true;
133
+ const andOk = filter.and && filter.and.length > 0 ? filter.and.every((f) => matchesEntityFilter(row, f)) : true;
134
+ const orOk = filter.or && filter.or.length > 0 ? filter.or.some((f) => matchesEntityFilter(row, f)) : true;
135
+ return leaf && andOk && orOk;
136
+ }
137
+ /** Stable multi-key sort; nullish values sort last in both directions. */
138
+ export function sortEntities(items, sort) {
139
+ if (sort.length === 0)
140
+ return [...items];
141
+ return items
142
+ .map((item, index) => ({ item, index }))
143
+ .sort((a, b) => {
144
+ for (const s of sort) {
145
+ const va = readField(a.item, s.field);
146
+ const vb = readField(b.item, s.field);
147
+ const na = va === null || va === undefined;
148
+ const nb = vb === null || vb === undefined;
149
+ if (na && nb)
150
+ continue;
151
+ if (na)
152
+ return 1;
153
+ if (nb)
154
+ return -1;
155
+ const c = compareOrdered(va, vb) ?? 0;
156
+ if (c !== 0)
157
+ return s.direction === 'desc' ? -c : c;
158
+ }
159
+ return a.index - b.index;
160
+ })
161
+ .map((x) => x.item);
162
+ }
163
+ /**
164
+ * Every shape a sort is written in, as the one the sorter takes.
165
+ *
166
+ * WHY: the contract says `sort: EntitySortField[]`, but pages and models write
167
+ * a single object far more often: `{ field: 'date', direction: 'asc' }`. It
168
+ * has no `length`, so the old `query.sort.length > 0` test read it as "no
169
+ * sort" and the list came back in storage order, silently. Accepted now:
170
+ *
171
+ * [{ field, direction }] the contract shape (invalid entries dropped)
172
+ * { field, direction? } one sort key
173
+ * { date: 'desc', title: 'asc' } a field → direction map, in key order
174
+ * 'date' | '-date' a field name, `-` for descending
175
+ *
176
+ * A missing or unknown direction reads as ascending. Anything else is no sort.
177
+ */
178
+ export function normalizeEntitySort(sort) {
179
+ const dir = (d) => typeof d === 'string' && d.toLowerCase() === 'desc' ? 'desc' : 'asc';
180
+ const one = (s) => {
181
+ if (typeof s === 'string') {
182
+ const t = s.trim();
183
+ if (!t || t === '-')
184
+ return null;
185
+ return t.startsWith('-') ? { field: t.slice(1), direction: 'desc' } : { field: t, direction: 'asc' };
186
+ }
187
+ if (s && typeof s === 'object' && !Array.isArray(s)) {
188
+ const o = s;
189
+ if (typeof o['field'] === 'string' && o['field'])
190
+ return { field: o['field'], direction: dir(o['direction']) };
191
+ }
192
+ return null;
193
+ };
194
+ if (Array.isArray(sort))
195
+ return sort.map(one).filter((s) => s !== null);
196
+ const single = one(sort);
197
+ if (single)
198
+ return [single];
199
+ if (sort && typeof sort === 'object') {
200
+ return Object.entries(sort)
201
+ .filter(([field, d]) => field.length > 0 && typeof d === 'string')
202
+ .map(([field, d]) => ({ field, direction: dir(d) }));
203
+ }
204
+ return [];
205
+ }
206
+ /**
207
+ * Reduce an in-memory list to ONE NUMBER — the client half of what the
208
+ * platform's `/count` and `/aggregate` routes do server-side, for connectors
209
+ * that only list. `filter` narrows first; `count` is the kept rows; the rest
210
+ * read `field` as a number (a numeric string counts, nullish/NaN is skipped)
211
+ * and answer `null` when nothing was numeric.
212
+ */
213
+ export function aggregateEntities(items, aggregate) {
214
+ const filter = aggregate.filter;
215
+ const rows = filter ? items.filter((r) => matchesEntityFilter(r, filter)) : items;
216
+ const base = { fn: aggregate.fn, ...(aggregate.field ? { field: aggregate.field } : {}), count: rows.length };
217
+ if (aggregate.fn === 'count')
218
+ return { ...base, value: rows.length };
219
+ if (!aggregate.field)
220
+ return { ...base, value: null };
221
+ const field = aggregate.field;
222
+ const nums = [];
223
+ for (const r of rows) {
224
+ const v = readField(r, field);
225
+ if (v === null || v === undefined || v === '')
226
+ continue;
227
+ const n = typeof v === 'number' ? v : Number(v);
228
+ if (Number.isFinite(n))
229
+ nums.push(n);
230
+ }
231
+ if (nums.length === 0)
232
+ return { ...base, value: null };
233
+ // A loop, never a spread: `Math.x(...nums)` overflows the argument limit
234
+ // on the large in-memory lists this path exists for.
235
+ const sum = nums.reduce((a, b) => a + b, 0);
236
+ switch (aggregate.fn) {
237
+ case 'sum':
238
+ return { ...base, value: sum };
239
+ case 'avg':
240
+ return { ...base, value: sum / nums.length };
241
+ default:
242
+ return { ...base, value: null };
243
+ }
244
+ }
245
+ /**
246
+ * Apply filter → sort → pagination to an in-memory list and return the
247
+ * paginated envelope. An empty/undefined query returns everything.
248
+ */
249
+ export function applyEntityQuery(items, query) {
250
+ let out = [...items];
251
+ if (query?.filter) {
252
+ const f = query.filter;
253
+ out = out.filter((row) => matchesEntityFilter(row, f));
254
+ }
255
+ const sort = normalizeEntitySort(query?.sort);
256
+ if (sort.length > 0)
257
+ out = sortEntities(out, sort);
258
+ const total = out.length;
259
+ const offset = Math.max(0, query?.pagination?.offset ?? 0);
260
+ const limit = query?.pagination?.limit !== undefined ? Math.max(0, query.pagination.limit) : total;
261
+ const page = query?.pagination ? out.slice(offset, offset + limit) : out;
262
+ return { items: page, total, offset, limit, hasMore: offset + page.length < total };
263
+ }
264
+ //# sourceMappingURL=apply-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-query.js","sourceRoot":"","sources":["../../src/entity/apply-query.ts"],"names":[],"mappings":"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"}