@sixb/core 0.1.20 → 0.1.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (681) hide show
  1. package/dist/actions/execution.d.ts.map +1 -1
  2. package/dist/actions/index.js +54 -47
  3. package/dist/actions/index.js.map +1 -1
  4. package/dist/actions/request.d.ts.map +1 -1
  5. package/dist/actions/run-authorization.d.ts +9 -0
  6. package/dist/actions/run-authorization.d.ts.map +1 -1
  7. package/dist/activity/connection.d.ts +62 -0
  8. package/dist/activity/connection.d.ts.map +1 -0
  9. package/dist/activity/device.d.ts +8 -0
  10. package/dist/activity/device.d.ts.map +1 -0
  11. package/dist/activity/execution.d.ts +48 -0
  12. package/dist/activity/execution.d.ts.map +1 -0
  13. package/dist/activity/service.d.ts +79 -0
  14. package/dist/activity/service.d.ts.map +1 -0
  15. package/dist/activity/shares.d.ts +24 -0
  16. package/dist/activity/shares.d.ts.map +1 -0
  17. package/dist/activity/timeline.d.ts +96 -0
  18. package/dist/activity/timeline.d.ts.map +1 -0
  19. package/dist/agents/index.d.ts +2 -1
  20. package/dist/agents/index.d.ts.map +1 -1
  21. package/dist/agents/index.js +63 -50
  22. package/dist/agents/index.js.map +1 -1
  23. package/dist/agents/request.d.ts.map +1 -1
  24. package/dist/agents/skills.d.ts.map +1 -1
  25. package/dist/agents/streams/index.js +3 -3
  26. package/dist/agents/streams/internal.js +3 -3
  27. package/dist/agents/types.d.ts +8 -8
  28. package/dist/agents/types.d.ts.map +1 -1
  29. package/dist/agents/validation.d.ts +1 -1
  30. package/dist/agents/validation.d.ts.map +1 -1
  31. package/dist/artifacts/address.d.ts +48 -0
  32. package/dist/artifacts/address.d.ts.map +1 -0
  33. package/dist/artifacts/csv.d.ts +22 -0
  34. package/dist/artifacts/csv.d.ts.map +1 -0
  35. package/dist/artifacts/errors.d.ts +11 -0
  36. package/dist/artifacts/errors.d.ts.map +1 -0
  37. package/dist/artifacts/execution.d.ts +43 -0
  38. package/dist/artifacts/execution.d.ts.map +1 -0
  39. package/dist/artifacts/frames/assets.d.ts +28 -0
  40. package/dist/artifacts/frames/assets.d.ts.map +1 -0
  41. package/dist/artifacts/frames/grants.d.ts +37 -0
  42. package/dist/artifacts/frames/grants.d.ts.map +1 -0
  43. package/dist/artifacts/frames/index.d.ts +10 -0
  44. package/dist/artifacts/frames/index.d.ts.map +1 -0
  45. package/dist/artifacts/frames/index.js +892 -0
  46. package/dist/artifacts/frames/index.js.map +14 -0
  47. package/dist/artifacts/frames/kit.d.ts +66 -0
  48. package/dist/artifacts/frames/kit.d.ts.map +1 -0
  49. package/dist/artifacts/frames/probe.d.ts +41 -0
  50. package/dist/artifacts/frames/probe.d.ts.map +1 -0
  51. package/dist/artifacts/frames/protocol.d.ts +98 -0
  52. package/dist/artifacts/frames/protocol.d.ts.map +1 -0
  53. package/dist/artifacts/frames/runtime.d.ts +13 -0
  54. package/dist/artifacts/frames/runtime.d.ts.map +1 -0
  55. package/dist/artifacts/html.d.ts +6 -0
  56. package/dist/artifacts/html.d.ts.map +1 -0
  57. package/dist/artifacts/ids.d.ts +5 -0
  58. package/dist/artifacts/ids.d.ts.map +1 -0
  59. package/dist/artifacts/index.d.ts +16 -0
  60. package/dist/artifacts/index.d.ts.map +1 -0
  61. package/dist/artifacts/index.js +125 -0
  62. package/dist/artifacts/index.js.map +10 -0
  63. package/dist/artifacts/kinds.d.ts +5 -0
  64. package/dist/artifacts/kinds.d.ts.map +1 -0
  65. package/dist/artifacts/limits.d.ts +28 -0
  66. package/dist/artifacts/limits.d.ts.map +1 -0
  67. package/dist/artifacts/outline.d.ts +44 -0
  68. package/dist/artifacts/outline.d.ts.map +1 -0
  69. package/dist/artifacts/publish/files.d.ts +15 -0
  70. package/dist/artifacts/publish/files.d.ts.map +1 -0
  71. package/dist/artifacts/publish/index.d.ts +5 -0
  72. package/dist/artifacts/publish/index.d.ts.map +1 -0
  73. package/dist/artifacts/publish/index.js +36 -0
  74. package/dist/artifacts/publish/index.js.map +9 -0
  75. package/dist/artifacts/publish/publish.d.ts +52 -0
  76. package/dist/artifacts/publish/publish.d.ts.map +1 -0
  77. package/dist/artifacts/publish/references.d.ts +27 -0
  78. package/dist/artifacts/publish/references.d.ts.map +1 -0
  79. package/dist/artifacts/publish/validate/document.d.ts +17 -0
  80. package/dist/artifacts/publish/validate/document.d.ts.map +1 -0
  81. package/dist/artifacts/publish/validate/file.d.ts +8 -0
  82. package/dist/artifacts/publish/validate/file.d.ts.map +1 -0
  83. package/dist/artifacts/publish/validate/sheet.d.ts +15 -0
  84. package/dist/artifacts/publish/validate/sheet.d.ts.map +1 -0
  85. package/dist/artifacts/publish/validate/slides.d.ts +21 -0
  86. package/dist/artifacts/publish/validate/slides.d.ts.map +1 -0
  87. package/dist/artifacts/references.d.ts +12 -0
  88. package/dist/artifacts/references.d.ts.map +1 -0
  89. package/dist/artifacts/resolve.d.ts +41 -0
  90. package/dist/artifacts/resolve.d.ts.map +1 -0
  91. package/dist/artifacts/theme.d.ts +19 -0
  92. package/dist/artifacts/theme.d.ts.map +1 -0
  93. package/dist/artifacts/warnings.d.ts +11 -0
  94. package/dist/artifacts/warnings.d.ts.map +1 -0
  95. package/dist/artifacts/workbook.d.ts +64 -0
  96. package/dist/artifacts/workbook.d.ts.map +1 -0
  97. package/dist/auth/index.js +10 -10
  98. package/dist/authorization/decision.d.ts +2 -0
  99. package/dist/authorization/decision.d.ts.map +1 -1
  100. package/dist/authorization/grant-kinds.d.ts +2 -2
  101. package/dist/authorization/grant-kinds.d.ts.map +1 -1
  102. package/dist/authorization/index.js +6 -6
  103. package/dist/blob-storage/browser.js +1 -1
  104. package/dist/blob-storage/index.js +2 -2
  105. package/dist/blob-storage/internal.d.ts +1 -1
  106. package/dist/blob-storage/internal.d.ts.map +1 -1
  107. package/dist/blob-storage/internal.js +11 -5
  108. package/dist/blob-storage/internal.js.map +1 -1
  109. package/dist/blob-storage/media-type.d.ts +12 -0
  110. package/dist/blob-storage/media-type.d.ts.map +1 -1
  111. package/dist/bootstrap/index.js +53 -47
  112. package/dist/bootstrap/index.js.map +2 -2
  113. package/dist/{chunk-xfs8x8m9.js → chunk-0bphap9y.js} +5 -5
  114. package/dist/{chunk-1zq2p6g0.js → chunk-1cc1xaf3.js} +3 -3
  115. package/dist/chunk-3jms7je7.js +14 -0
  116. package/dist/chunk-3jms7je7.js.map +10 -0
  117. package/dist/{chunk-s54c868q.js → chunk-3qct2mdc.js} +3 -13
  118. package/dist/chunk-3qct2mdc.js.map +12 -0
  119. package/dist/{chunk-t7x8dmn0.js → chunk-431pyp2c.js} +3 -3
  120. package/dist/{chunk-c85m1hyj.js → chunk-447a5c0p.js} +2 -2
  121. package/dist/chunk-48qjhh6v.js +185 -0
  122. package/dist/chunk-48qjhh6v.js.map +13 -0
  123. package/dist/{chunk-ren4kg2j.js → chunk-561r0yc9.js} +8 -8
  124. package/dist/{chunk-5e43w60z.js → chunk-5948n82c.js} +2 -2
  125. package/dist/{chunk-yzwja0mj.js → chunk-5hx48dnn.js} +2 -2
  126. package/dist/{chunk-x6m907x7.js → chunk-5vems3nx.js} +5 -6
  127. package/dist/{chunk-x6m907x7.js.map → chunk-5vems3nx.js.map} +3 -3
  128. package/dist/{chunk-0rbyz4qy.js → chunk-61y5xs4p.js} +560 -164
  129. package/dist/{chunk-0rbyz4qy.js.map → chunk-61y5xs4p.js.map} +12 -9
  130. package/dist/chunk-65abf64x.js +13 -0
  131. package/dist/chunk-65abf64x.js.map +10 -0
  132. package/dist/{chunk-z3y5kg1x.js → chunk-6eqsgvxk.js} +3 -3
  133. package/dist/{chunk-z3y5kg1x.js.map → chunk-6eqsgvxk.js.map} +2 -2
  134. package/dist/chunk-6rqgmkde.js +2028 -0
  135. package/dist/chunk-6rqgmkde.js.map +29 -0
  136. package/dist/{chunk-d0bqz29d.js → chunk-6vb4st8k.js} +8 -4
  137. package/dist/{chunk-d0bqz29d.js.map → chunk-6vb4st8k.js.map} +3 -3
  138. package/dist/chunk-7q8t23v4.js +467 -0
  139. package/dist/chunk-7q8t23v4.js.map +14 -0
  140. package/dist/{chunk-5j58wjct.js → chunk-858emn8m.js} +6 -6
  141. package/dist/{chunk-hvsb78a1.js → chunk-8frc8a4j.js} +26 -26
  142. package/dist/{chunk-hvsb78a1.js.map → chunk-8frc8a4j.js.map} +2 -2
  143. package/dist/{chunk-3zxk45er.js → chunk-8ncg20rd.js} +3 -68
  144. package/dist/{chunk-3zxk45er.js.map → chunk-8ncg20rd.js.map} +4 -5
  145. package/dist/{chunk-n33z5bjw.js → chunk-918wwnaa.js} +490 -24
  146. package/dist/{chunk-n33z5bjw.js.map → chunk-918wwnaa.js.map} +13 -11
  147. package/dist/{chunk-rrzt8jdy.js → chunk-9j4jw7as.js} +103 -110
  148. package/dist/chunk-9j4jw7as.js.map +14 -0
  149. package/dist/chunk-9kgkfg6v.js +502 -0
  150. package/dist/chunk-9kgkfg6v.js.map +14 -0
  151. package/dist/chunk-a3faa34j.js +74 -0
  152. package/dist/chunk-a3faa34j.js.map +10 -0
  153. package/dist/{chunk-6c6sn0bh.js → chunk-akzryx9h.js} +335 -1167
  154. package/dist/{chunk-6c6sn0bh.js.map → chunk-akzryx9h.js.map} +18 -24
  155. package/dist/chunk-arns890k.js +10 -0
  156. package/dist/chunk-arns890k.js.map +10 -0
  157. package/dist/{chunk-hjzdd750.js → chunk-bk9svbcq.js} +11 -11
  158. package/dist/{chunk-hjzdd750.js.map → chunk-bk9svbcq.js.map} +2 -2
  159. package/dist/{chunk-hkc3jct7.js → chunk-c06hmxyy.js} +2 -10
  160. package/dist/chunk-c06hmxyy.js.map +10 -0
  161. package/dist/{chunk-6p49a5cq.js → chunk-c1rxbz5y.js} +3 -3
  162. package/dist/chunk-cfj9dfbb.js +288 -0
  163. package/dist/chunk-cfj9dfbb.js.map +12 -0
  164. package/dist/{chunk-bx9q3cwv.js → chunk-cn0fwwhy.js} +7 -7
  165. package/dist/{chunk-bx9q3cwv.js.map → chunk-cn0fwwhy.js.map} +1 -1
  166. package/dist/{chunk-gc4ntf7d.js → chunk-cwdzcv37.js} +1 -1
  167. package/dist/{chunk-fa02jy15.js → chunk-cy4mbddw.js} +1 -1
  168. package/dist/{chunk-9w055r5b.js → chunk-d09e3rax.js} +1 -1
  169. package/dist/chunk-d5rjr8c0.js +176 -0
  170. package/dist/chunk-d5rjr8c0.js.map +12 -0
  171. package/dist/{chunk-dk8tkk5f.js → chunk-d7dnxdep.js} +3 -3
  172. package/dist/{chunk-b38szspf.js → chunk-dhcv7yxc.js} +1 -1
  173. package/dist/{chunk-b38szspf.js.map → chunk-dhcv7yxc.js.map} +1 -1
  174. package/dist/{chunk-gsjm1wms.js → chunk-dhdha526.js} +8 -2
  175. package/dist/chunk-dhdha526.js.map +10 -0
  176. package/dist/{chunk-8mx7qw3y.js → chunk-dvd2fp9q.js} +2 -2
  177. package/dist/{chunk-8mx7qw3y.js.map → chunk-dvd2fp9q.js.map} +3 -3
  178. package/dist/{chunk-way52z4h.js → chunk-e17zdm62.js} +6 -12
  179. package/dist/{chunk-way52z4h.js.map → chunk-e17zdm62.js.map} +3 -4
  180. package/dist/{chunk-tpn40322.js → chunk-e6k4thh5.js} +11 -10
  181. package/dist/{chunk-tpn40322.js.map → chunk-e6k4thh5.js.map} +3 -3
  182. package/dist/{chunk-tw03bsmb.js → chunk-eptrvnby.js} +224 -3
  183. package/dist/chunk-eptrvnby.js.map +12 -0
  184. package/dist/{chunk-es1gxsbf.js → chunk-f4pamkt9.js} +8 -10
  185. package/dist/chunk-f4pamkt9.js.map +12 -0
  186. package/dist/chunk-ff5xkv0p.js +211 -0
  187. package/dist/chunk-ff5xkv0p.js.map +10 -0
  188. package/dist/{chunk-d09tj99x.js → chunk-g257jwnc.js} +10 -4
  189. package/dist/{chunk-d09tj99x.js.map → chunk-g257jwnc.js.map} +3 -3
  190. package/dist/chunk-g5bvzyyr.js +32 -0
  191. package/dist/chunk-g5bvzyyr.js.map +10 -0
  192. package/dist/chunk-hke9aeen.js +9 -0
  193. package/dist/chunk-hke9aeen.js.map +10 -0
  194. package/dist/{chunk-1sr8ryzk.js → chunk-hwksyjks.js} +122 -1
  195. package/dist/{chunk-1sr8ryzk.js.map → chunk-hwksyjks.js.map} +3 -3
  196. package/dist/chunk-jcfw4h7m.js +9 -0
  197. package/dist/chunk-jcfw4h7m.js.map +10 -0
  198. package/dist/{chunk-k6q3n2sc.js → chunk-k43ct2ke.js} +20 -11
  199. package/dist/chunk-k43ct2ke.js.map +12 -0
  200. package/dist/{chunk-3t2hgbgd.js → chunk-kge7k6ey.js} +40 -8
  201. package/dist/chunk-kge7k6ey.js.map +15 -0
  202. package/dist/{chunk-tg2cw67r.js → chunk-ky3j490c.js} +2 -2
  203. package/dist/chunk-mjddfa7k.js +129 -0
  204. package/dist/chunk-mjddfa7k.js.map +12 -0
  205. package/dist/{chunk-vpq4shxz.js → chunk-nn5xnx3s.js} +45 -10
  206. package/dist/{chunk-vpq4shxz.js.map → chunk-nn5xnx3s.js.map} +7 -6
  207. package/dist/{chunk-0yh890a4.js → chunk-q5e5tv4b.js} +35 -7
  208. package/dist/{chunk-0yh890a4.js.map → chunk-q5e5tv4b.js.map} +3 -3
  209. package/dist/{chunk-vyf9kfqf.js → chunk-q7gn29y3.js} +1 -1
  210. package/dist/{chunk-yevzdx4y.js → chunk-rmakanzx.js} +10 -12
  211. package/dist/{chunk-yevzdx4y.js.map → chunk-rmakanzx.js.map} +3 -4
  212. package/dist/{chunk-v9xd5wzd.js → chunk-s7jg7pmn.js} +1 -1
  213. package/dist/chunk-tbc1ngpd.js +642 -0
  214. package/dist/chunk-tbc1ngpd.js.map +18 -0
  215. package/dist/chunk-twe4dx8p.js +676 -0
  216. package/dist/chunk-twe4dx8p.js.map +15 -0
  217. package/dist/{chunk-9dmt152s.js → chunk-vf57cr4t.js} +2 -2
  218. package/dist/{chunk-9ybhtmg4.js → chunk-vvxtn22d.js} +1 -1
  219. package/dist/{chunk-jhm3zsa7.js → chunk-wkv3h3q7.js} +64 -2
  220. package/dist/{chunk-jhm3zsa7.js.map → chunk-wkv3h3q7.js.map} +3 -3
  221. package/dist/chunk-x0v3jd47.js +124 -0
  222. package/dist/chunk-x0v3jd47.js.map +10 -0
  223. package/dist/{chunk-7t429e3f.js → chunk-xvsc5m8n.js} +1 -1
  224. package/dist/{chunk-z4m0yz8c.js → chunk-y5tah2kf.js} +1 -1
  225. package/dist/{chunk-fkgc1wt8.js → chunk-z58tm0hm.js} +2 -2
  226. package/dist/datasets/builders.d.ts +15 -2
  227. package/dist/datasets/builders.d.ts.map +1 -1
  228. package/dist/datasets/column-index.d.ts +7 -0
  229. package/dist/datasets/column-index.d.ts.map +1 -0
  230. package/dist/datasets/execution.d.ts +3 -2
  231. package/dist/datasets/execution.d.ts.map +1 -1
  232. package/dist/datasets/write.js +8 -8
  233. package/dist/error-reporting/internal.js +4 -4
  234. package/dist/errors/internal.d.ts +1 -0
  235. package/dist/errors/internal.d.ts.map +1 -1
  236. package/dist/errors/internal.js +7 -4
  237. package/dist/errors/internal.js.map +1 -1
  238. package/dist/events/execution.d.ts +12 -2
  239. package/dist/events/execution.d.ts.map +1 -1
  240. package/dist/events/index.js +4 -4
  241. package/dist/execution/agent.js +56 -49
  242. package/dist/execution/agent.js.map +1 -1
  243. package/dist/execution/authorized-object-reader.d.ts +52 -11
  244. package/dist/execution/authorized-object-reader.d.ts.map +1 -1
  245. package/dist/execution/object-reader-clearance.d.ts +41 -0
  246. package/dist/execution/object-reader-clearance.d.ts.map +1 -0
  247. package/dist/execution/object-reader-ontology.d.ts +12 -0
  248. package/dist/execution/object-reader-ontology.d.ts.map +1 -0
  249. package/dist/execution/object-reader-security.d.ts +45 -0
  250. package/dist/execution/object-reader-security.d.ts.map +1 -0
  251. package/dist/execution/primitive.js +54 -47
  252. package/dist/execution/primitive.js.map +1 -1
  253. package/dist/execution/request.js +48 -41
  254. package/dist/execution/request.js.map +2 -2
  255. package/dist/http/api-routes.d.ts.map +1 -1
  256. package/dist/http/index.js +1 -1
  257. package/dist/index.d.ts +20 -4
  258. package/dist/index.d.ts.map +1 -1
  259. package/dist/index.js +112 -97
  260. package/dist/index.js.map +1 -1
  261. package/dist/lake-storage/in-memory.d.ts +1 -0
  262. package/dist/lake-storage/in-memory.d.ts.map +1 -1
  263. package/dist/lake-storage/index.d.ts +6 -3
  264. package/dist/lake-storage/index.d.ts.map +1 -1
  265. package/dist/lake-storage/index.js +21 -13
  266. package/dist/lake-storage/index.js.map +1 -1
  267. package/dist/lake-storage/lineage.d.ts +94 -0
  268. package/dist/lake-storage/lineage.d.ts.map +1 -0
  269. package/dist/lake-storage/sql-transforms.d.ts +45 -0
  270. package/dist/lake-storage/sql-transforms.d.ts.map +1 -1
  271. package/dist/lake-storage/types.d.ts +55 -1
  272. package/dist/lake-storage/types.d.ts.map +1 -1
  273. package/dist/lake-storage/version-inputs.d.ts +14 -3
  274. package/dist/lake-storage/version-inputs.d.ts.map +1 -1
  275. package/dist/maintenance/ontology-maintenance.d.ts.map +1 -1
  276. package/dist/materializer/index.js +31 -30
  277. package/dist/materializer/index.js.map +1 -1
  278. package/dist/models/execution/index.js +25 -24
  279. package/dist/models/execution/index.js.map +1 -1
  280. package/dist/objects/clearance-redaction.d.ts +27 -0
  281. package/dist/objects/clearance-redaction.d.ts.map +1 -0
  282. package/dist/objects/index.js +54 -47
  283. package/dist/objects/index.js.map +1 -1
  284. package/dist/objects/link/authorization.d.ts +8 -5
  285. package/dist/objects/link/authorization.d.ts.map +1 -1
  286. package/dist/objects/link/upsert-batch.d.ts.map +1 -1
  287. package/dist/objects/object/delete.d.ts.map +1 -1
  288. package/dist/objects/object/upsert-batch.d.ts.map +1 -1
  289. package/dist/objects/object/upsert.d.ts.map +1 -1
  290. package/dist/objects/property-clearance.d.ts +47 -24
  291. package/dist/objects/property-clearance.d.ts.map +1 -1
  292. package/dist/objects/query/clearance-admission.d.ts +10 -0
  293. package/dist/objects/query/clearance-admission.d.ts.map +1 -0
  294. package/dist/objects/query/index.js +29 -28
  295. package/dist/objects/query/index.js.map +1 -1
  296. package/dist/objects/query/link-query-clearance.d.ts +21 -0
  297. package/dist/objects/query/link-query-clearance.d.ts.map +1 -0
  298. package/dist/ontology/builders.d.ts.map +1 -1
  299. package/dist/ontology/docs-markdown.d.ts +1 -1
  300. package/dist/ontology/docs-markdown.d.ts.map +1 -1
  301. package/dist/ontology/index.js +7 -7
  302. package/dist/ontology/internal.js +4 -4
  303. package/dist/ontology/internal.js.map +1 -1
  304. package/dist/pipelines/index.d.ts +2 -0
  305. package/dist/pipelines/index.d.ts.map +1 -1
  306. package/dist/pipelines/index.js +47 -35
  307. package/dist/pipelines/index.js.map +1 -1
  308. package/dist/pipelines/lineage.d.ts +17 -0
  309. package/dist/pipelines/lineage.d.ts.map +1 -0
  310. package/dist/projections/internal.d.ts +2 -2
  311. package/dist/projections/internal.js +30 -29
  312. package/dist/projections/internal.js.map +1 -1
  313. package/dist/runtime/create.d.ts +3 -0
  314. package/dist/runtime/create.d.ts.map +1 -1
  315. package/dist/runtime/host.d.ts +6 -0
  316. package/dist/runtime/host.d.ts.map +1 -1
  317. package/dist/runtime/internal.d.ts +2 -0
  318. package/dist/runtime/internal.d.ts.map +1 -1
  319. package/dist/runtime/internal.js +46 -42
  320. package/dist/runtime/internal.js.map +1 -1
  321. package/dist/runtime/ontology-mutations.d.ts +2 -0
  322. package/dist/runtime/ontology-mutations.d.ts.map +1 -1
  323. package/dist/runtime/resolve-definitions.d.ts.map +1 -1
  324. package/dist/runtime/sixb.d.ts +8 -0
  325. package/dist/runtime/sixb.d.ts.map +1 -1
  326. package/dist/sandboxes/auth.d.ts +16 -0
  327. package/dist/sandboxes/auth.d.ts.map +1 -1
  328. package/dist/sandboxes/config.d.ts.map +1 -1
  329. package/dist/sandboxes/configuration.d.ts +26 -0
  330. package/dist/sandboxes/configuration.d.ts.map +1 -1
  331. package/dist/sandboxes/index.d.ts +1 -1
  332. package/dist/sandboxes/index.d.ts.map +1 -1
  333. package/dist/sandboxes/index.js +14 -13
  334. package/dist/sandboxes/index.js.map +1 -1
  335. package/dist/sandboxes/sandbox.d.ts +28 -5
  336. package/dist/sandboxes/sandbox.d.ts.map +1 -1
  337. package/dist/security/applied-markings-contribution.d.ts +58 -0
  338. package/dist/security/applied-markings-contribution.d.ts.map +1 -0
  339. package/dist/security/applied-markings-host.d.ts +10 -0
  340. package/dist/security/applied-markings-host.d.ts.map +1 -0
  341. package/dist/security/applied-markings-snapshot.d.ts +67 -0
  342. package/dist/security/applied-markings-snapshot.d.ts.map +1 -0
  343. package/dist/security/applied-markings.d.ts +73 -0
  344. package/dist/security/applied-markings.d.ts.map +1 -0
  345. package/dist/security/dataset-version-markings.d.ts +47 -0
  346. package/dist/security/dataset-version-markings.d.ts.map +1 -0
  347. package/dist/security/grants.d.ts +3 -2
  348. package/dist/security/grants.d.ts.map +1 -1
  349. package/dist/security/index.d.ts +2 -1
  350. package/dist/security/index.d.ts.map +1 -1
  351. package/dist/security/internal.d.ts +15 -0
  352. package/dist/security/internal.d.ts.map +1 -0
  353. package/dist/security/internal.js +135 -0
  354. package/dist/security/internal.js.map +10 -0
  355. package/dist/security/marking-propagation.d.ts +62 -0
  356. package/dist/security/marking-propagation.d.ts.map +1 -0
  357. package/dist/security/marking-sets.d.ts +14 -0
  358. package/dist/security/marking-sets.d.ts.map +1 -0
  359. package/dist/security/markings.d.ts +6 -3
  360. package/dist/security/markings.d.ts.map +1 -1
  361. package/dist/security/pipeline-markings.d.ts +20 -0
  362. package/dist/security/pipeline-markings.d.ts.map +1 -0
  363. package/dist/security/project.d.ts +4 -0
  364. package/dist/security/project.d.ts.map +1 -0
  365. package/dist/security/projection-markings.d.ts +71 -0
  366. package/dist/security/projection-markings.d.ts.map +1 -0
  367. package/dist/security/public.js +2 -2
  368. package/dist/security/redactions.d.ts +4 -1
  369. package/dist/security/redactions.d.ts.map +1 -1
  370. package/dist/security/types.d.ts +22 -2
  371. package/dist/security/types.d.ts.map +1 -1
  372. package/dist/security/validation.d.ts.map +1 -1
  373. package/dist/shares/internal.js +24 -23
  374. package/dist/shares/internal.js.map +2 -2
  375. package/dist/storage/action-runs/failure.js +3 -3
  376. package/dist/storage/action-runs/in-memory.d.ts +4 -0
  377. package/dist/storage/action-runs/in-memory.d.ts.map +1 -1
  378. package/dist/storage/action-runs/types.d.ts +8 -0
  379. package/dist/storage/action-runs/types.d.ts.map +1 -1
  380. package/dist/storage/activity/in-memory.d.ts +55 -0
  381. package/dist/storage/activity/in-memory.d.ts.map +1 -0
  382. package/dist/storage/activity/index.d.ts +3 -0
  383. package/dist/storage/activity/index.d.ts.map +1 -0
  384. package/dist/storage/activity/policy.d.ts +96 -0
  385. package/dist/storage/activity/policy.d.ts.map +1 -0
  386. package/dist/storage/activity/types.d.ts +191 -0
  387. package/dist/storage/activity/types.d.ts.map +1 -0
  388. package/dist/storage/agents/in-memory.d.ts +4 -0
  389. package/dist/storage/agents/in-memory.d.ts.map +1 -1
  390. package/dist/storage/agents/provider.d.ts.map +1 -1
  391. package/dist/storage/agents/provider.js +2 -5
  392. package/dist/storage/agents/provider.js.map +1 -1
  393. package/dist/storage/agents/types.d.ts +9 -8
  394. package/dist/storage/agents/types.d.ts.map +1 -1
  395. package/dist/storage/ai-limits/enforcement.js +3 -3
  396. package/dist/storage/artifacts/errors.d.ts +8 -0
  397. package/dist/storage/artifacts/errors.d.ts.map +1 -0
  398. package/dist/storage/artifacts/in-memory.d.ts +34 -0
  399. package/dist/storage/artifacts/in-memory.d.ts.map +1 -0
  400. package/dist/storage/artifacts/index.d.ts +5 -0
  401. package/dist/storage/artifacts/index.d.ts.map +1 -0
  402. package/dist/storage/artifacts/record.d.ts +17 -0
  403. package/dist/storage/artifacts/record.d.ts.map +1 -0
  404. package/dist/storage/artifacts/types.d.ts +184 -0
  405. package/dist/storage/artifacts/types.d.ts.map +1 -0
  406. package/dist/storage/auth/in-memory/sessions.d.ts +2 -1
  407. package/dist/storage/auth/in-memory/sessions.d.ts.map +1 -1
  408. package/dist/storage/auth/index.d.ts +1 -1
  409. package/dist/storage/auth/index.d.ts.map +1 -1
  410. package/dist/storage/auth/types.d.ts +19 -0
  411. package/dist/storage/auth/types.d.ts.map +1 -1
  412. package/dist/storage/connector-connections/provider.js +2 -2
  413. package/dist/storage/executions/in-memory.d.ts +2 -1
  414. package/dist/storage/executions/in-memory.d.ts.map +1 -1
  415. package/dist/storage/executions/index.d.ts +1 -1
  416. package/dist/storage/executions/index.d.ts.map +1 -1
  417. package/dist/storage/executions/provider.d.ts +2 -0
  418. package/dist/storage/executions/provider.d.ts.map +1 -1
  419. package/dist/storage/executions/provider.js +9 -223
  420. package/dist/storage/executions/provider.js.map +3 -4
  421. package/dist/storage/executions/types.d.ts +31 -0
  422. package/dist/storage/executions/types.d.ts.map +1 -1
  423. package/dist/storage/file-upload-sessions/provider.js +11 -11
  424. package/dist/storage/in-memory/index.d.ts +8 -0
  425. package/dist/storage/in-memory/index.d.ts.map +1 -1
  426. package/dist/storage/index.d.ts +6 -4
  427. package/dist/storage/index.d.ts.map +1 -1
  428. package/dist/storage/index.js +54 -53
  429. package/dist/storage/index.js.map +1 -1
  430. package/dist/storage/internal.d.ts +3 -0
  431. package/dist/storage/internal.d.ts.map +1 -1
  432. package/dist/storage/internal.js +66 -16
  433. package/dist/storage/internal.js.map +1 -1
  434. package/dist/storage/ontology/in-memory/sources.d.ts +2 -1
  435. package/dist/storage/ontology/in-memory/sources.d.ts.map +1 -1
  436. package/dist/storage/ontology/index.d.ts +1 -1
  437. package/dist/storage/ontology/index.d.ts.map +1 -1
  438. package/dist/storage/ontology/sources.d.ts +15 -0
  439. package/dist/storage/ontology/sources.d.ts.map +1 -1
  440. package/dist/storage/projection-runs/provider.js +3 -3
  441. package/dist/storage/share-grants/in-memory.d.ts +2 -1
  442. package/dist/storage/share-grants/in-memory.d.ts.map +1 -1
  443. package/dist/storage/share-grants/index.d.ts +1 -1
  444. package/dist/storage/share-grants/index.d.ts.map +1 -1
  445. package/dist/storage/share-grants/types.d.ts +6 -0
  446. package/dist/storage/share-grants/types.d.ts.map +1 -1
  447. package/dist/storage/types.d.ts +4 -0
  448. package/dist/storage/types.d.ts.map +1 -1
  449. package/dist/storage/workflow-runs/in-memory.d.ts +4 -0
  450. package/dist/storage/workflow-runs/in-memory.d.ts.map +1 -1
  451. package/dist/storage/workflow-runs/provider.js +13 -12
  452. package/dist/storage/workflow-runs/provider.js.map +1 -1
  453. package/dist/storage/workflow-runs/types.d.ts +5 -0
  454. package/dist/storage/workflow-runs/types.d.ts.map +1 -1
  455. package/dist/syncs/index.js +35 -34
  456. package/dist/syncs/index.js.map +1 -1
  457. package/dist/testing/action-run-storage-contract.d.ts.map +1 -1
  458. package/dist/testing/activity-storage-contract.d.ts +14 -0
  459. package/dist/testing/activity-storage-contract.d.ts.map +1 -0
  460. package/dist/testing/agent-storage-contract.d.ts.map +1 -1
  461. package/dist/testing/artifact-storage-contract.d.ts +13 -0
  462. package/dist/testing/artifact-storage-contract.d.ts.map +1 -0
  463. package/dist/testing/auth-storage-contract.d.ts.map +1 -1
  464. package/dist/testing/execution-storage-contract.d.ts.map +1 -1
  465. package/dist/testing/index.d.ts +2 -0
  466. package/dist/testing/index.d.ts.map +1 -1
  467. package/dist/testing/index.js +4488 -3137
  468. package/dist/testing/index.js.map +14 -12
  469. package/dist/testing/lake-merge-storage-contract.d.ts.map +1 -1
  470. package/dist/testing/lake-storage-contract.d.ts +2 -0
  471. package/dist/testing/lake-storage-contract.d.ts.map +1 -1
  472. package/dist/testing/ontology-storage-contract.d.ts.map +1 -1
  473. package/dist/testing/share-grant-storage-contract.d.ts.map +1 -1
  474. package/dist/webhooks/internal.js +27 -26
  475. package/dist/webhooks/internal.js.map +2 -2
  476. package/dist/workers/index.js +2 -2
  477. package/dist/workflows/builders.d.ts.map +1 -1
  478. package/dist/workflows/index.js +57 -51
  479. package/dist/workflows/index.js.map +1 -1
  480. package/dist/workflows/types.d.ts +9 -0
  481. package/dist/workflows/types.d.ts.map +1 -1
  482. package/dist/workflows/validation.d.ts +7 -0
  483. package/dist/workflows/validation.d.ts.map +1 -1
  484. package/package.json +25 -1
  485. package/src/actions/execution.ts +18 -13
  486. package/src/actions/request.ts +18 -3
  487. package/src/actions/run-authorization.ts +23 -0
  488. package/src/activity/README.md +155 -0
  489. package/src/activity/connection.ts +217 -0
  490. package/src/activity/device.ts +41 -0
  491. package/src/activity/execution.ts +210 -0
  492. package/src/activity/service.ts +274 -0
  493. package/src/activity/shares.ts +62 -0
  494. package/src/activity/timeline.ts +424 -0
  495. package/src/agents/index.ts +8 -3
  496. package/src/agents/request.ts +5 -0
  497. package/src/agents/skills.ts +6 -0
  498. package/src/agents/types.ts +8 -8
  499. package/src/agents/validation.ts +2 -0
  500. package/src/artifacts/address.ts +132 -0
  501. package/src/artifacts/csv.ts +108 -0
  502. package/src/artifacts/errors.ts +21 -0
  503. package/src/artifacts/execution.ts +153 -0
  504. package/src/artifacts/frames/assets.ts +88 -0
  505. package/src/artifacts/frames/grants.ts +124 -0
  506. package/src/artifacts/frames/index.ts +15 -0
  507. package/src/artifacts/frames/kit.ts +392 -0
  508. package/src/artifacts/frames/probe.ts +309 -0
  509. package/src/artifacts/frames/protocol.ts +174 -0
  510. package/src/artifacts/frames/runtime.ts +213 -0
  511. package/src/artifacts/html.ts +25 -0
  512. package/src/artifacts/ids.ts +18 -0
  513. package/src/artifacts/index.ts +61 -0
  514. package/src/artifacts/kinds.ts +8 -0
  515. package/src/artifacts/limits.ts +27 -0
  516. package/src/artifacts/outline.ts +62 -0
  517. package/src/artifacts/publish/files.ts +87 -0
  518. package/src/artifacts/publish/index.ts +12 -0
  519. package/src/artifacts/publish/publish.ts +250 -0
  520. package/src/artifacts/publish/references.ts +130 -0
  521. package/src/artifacts/publish/validate/document.ts +114 -0
  522. package/src/artifacts/publish/validate/file.ts +19 -0
  523. package/src/artifacts/publish/validate/sheet.ts +251 -0
  524. package/src/artifacts/publish/validate/slides.ts +134 -0
  525. package/src/artifacts/references.ts +11 -0
  526. package/src/artifacts/resolve.ts +97 -0
  527. package/src/artifacts/theme.ts +116 -0
  528. package/src/artifacts/warnings.ts +10 -0
  529. package/src/artifacts/workbook.ts +315 -0
  530. package/src/authorization/decision.ts +5 -0
  531. package/src/authorization/grant-kinds.ts +14 -2
  532. package/src/blob-storage/internal.ts +1 -1
  533. package/src/blob-storage/media-type.ts +69 -0
  534. package/src/datasets/builders.ts +66 -2
  535. package/src/datasets/column-index.ts +19 -0
  536. package/src/datasets/execution.ts +23 -9
  537. package/src/errors/internal.ts +1 -0
  538. package/src/events/execution.ts +134 -21
  539. package/src/execution/authorized-object-reader.ts +270 -256
  540. package/src/execution/object-reader-clearance.ts +91 -0
  541. package/src/execution/object-reader-ontology.ts +63 -0
  542. package/src/execution/object-reader-security.ts +146 -0
  543. package/src/http/api-routes.ts +125 -0
  544. package/src/index.ts +71 -3
  545. package/src/lake-storage/in-memory.ts +26 -3
  546. package/src/lake-storage/index.ts +13 -1
  547. package/src/lake-storage/lineage.ts +385 -0
  548. package/src/lake-storage/sql-transforms.ts +45 -0
  549. package/src/lake-storage/types.ts +59 -1
  550. package/src/lake-storage/version-inputs.ts +35 -6
  551. package/src/maintenance/ontology-maintenance.ts +15 -0
  552. package/src/objects/clearance-redaction.ts +138 -0
  553. package/src/objects/link/authorization.ts +27 -7
  554. package/src/objects/link/remove.ts +2 -2
  555. package/src/objects/link/upsert-batch.ts +7 -5
  556. package/src/objects/link/upsert.ts +2 -2
  557. package/src/objects/object/delete.ts +2 -0
  558. package/src/objects/object/upsert-batch.ts +2 -4
  559. package/src/objects/object/upsert.ts +2 -3
  560. package/src/objects/property-clearance.ts +171 -152
  561. package/src/objects/query/clearance-admission.ts +112 -0
  562. package/src/objects/query/link-query-clearance.ts +73 -0
  563. package/src/ontology/builders.ts +12 -1
  564. package/src/ontology/docs-markdown.ts +1 -1
  565. package/src/pipelines/index.ts +2 -0
  566. package/src/pipelines/lineage.ts +45 -0
  567. package/src/projections/internal.ts +2 -2
  568. package/src/runtime/create.ts +4 -0
  569. package/src/runtime/host.ts +55 -0
  570. package/src/runtime/internal.ts +2 -0
  571. package/src/runtime/ontology-mutations.ts +19 -4
  572. package/src/runtime/resolve-definitions.ts +66 -3
  573. package/src/runtime/sixb.ts +18 -1
  574. package/src/sandboxes/README.md +29 -7
  575. package/src/sandboxes/auth.ts +16 -0
  576. package/src/sandboxes/config.ts +2 -7
  577. package/src/sandboxes/configuration.ts +61 -7
  578. package/src/sandboxes/index.ts +1 -0
  579. package/src/sandboxes/sandbox.ts +27 -5
  580. package/src/security/applied-markings-contribution.ts +277 -0
  581. package/src/security/applied-markings-host.ts +41 -0
  582. package/src/security/applied-markings-snapshot.ts +235 -0
  583. package/src/security/applied-markings.ts +405 -0
  584. package/src/security/dataset-version-markings.ts +163 -0
  585. package/src/security/grants.ts +39 -4
  586. package/src/security/index.ts +3 -0
  587. package/src/security/internal.ts +18 -0
  588. package/src/security/marking-propagation.ts +255 -0
  589. package/src/security/marking-sets.ts +42 -0
  590. package/src/security/markings.ts +29 -178
  591. package/src/security/pipeline-markings.ts +175 -0
  592. package/src/security/project.ts +8 -0
  593. package/src/security/projection-markings.ts +421 -0
  594. package/src/security/redactions.ts +7 -2
  595. package/src/security/types.ts +20 -2
  596. package/src/security/validation.ts +11 -4
  597. package/src/storage/action-runs/in-memory.ts +18 -0
  598. package/src/storage/action-runs/types.ts +8 -0
  599. package/src/storage/activity/in-memory.ts +374 -0
  600. package/src/storage/activity/index.ts +27 -0
  601. package/src/storage/activity/policy.ts +430 -0
  602. package/src/storage/activity/types.ts +211 -0
  603. package/src/storage/agents/in-memory.ts +10 -0
  604. package/src/storage/agents/provider.ts +2 -13
  605. package/src/storage/agents/types.ts +9 -16
  606. package/src/storage/artifacts/errors.ts +16 -0
  607. package/src/storage/artifacts/in-memory.ts +240 -0
  608. package/src/storage/artifacts/index.ts +30 -0
  609. package/src/storage/artifacts/record.ts +200 -0
  610. package/src/storage/artifacts/types.ts +209 -0
  611. package/src/storage/auth/in-memory/sessions.ts +21 -0
  612. package/src/storage/auth/index.ts +2 -0
  613. package/src/storage/auth/types.ts +18 -0
  614. package/src/storage/executions/in-memory.ts +61 -1
  615. package/src/storage/executions/index.ts +3 -0
  616. package/src/storage/executions/provider.ts +12 -0
  617. package/src/storage/executions/types.ts +30 -0
  618. package/src/storage/in-memory/index.ts +16 -0
  619. package/src/storage/index.ts +63 -0
  620. package/src/storage/internal.ts +30 -0
  621. package/src/storage/ontology/in-memory/sources.ts +23 -0
  622. package/src/storage/ontology/index.ts +2 -0
  623. package/src/storage/ontology/sources.ts +17 -0
  624. package/src/storage/share-grants/in-memory.ts +8 -0
  625. package/src/storage/share-grants/index.ts +1 -0
  626. package/src/storage/share-grants/types.ts +8 -0
  627. package/src/storage/types.ts +4 -0
  628. package/src/storage/workflow-runs/in-memory.ts +16 -0
  629. package/src/storage/workflow-runs/types.ts +5 -0
  630. package/src/testing/action-run-storage-contract.ts +25 -0
  631. package/src/testing/activity-storage-contract.ts +840 -0
  632. package/src/testing/agent-storage-contract.ts +22 -21
  633. package/src/testing/artifact-storage-contract.ts +517 -0
  634. package/src/testing/auth-storage-contract.ts +47 -0
  635. package/src/testing/execution-storage-contract.ts +147 -1
  636. package/src/testing/index.ts +9 -0
  637. package/src/testing/lake-merge-storage-contract.ts +38 -0
  638. package/src/testing/lake-storage-contract.ts +247 -2
  639. package/src/testing/materializer-storage-contract.ts +1 -0
  640. package/src/testing/ontology-storage-contract.ts +57 -2
  641. package/src/testing/share-grant-storage-contract.ts +15 -0
  642. package/src/workflows/builders.ts +14 -0
  643. package/src/workflows/types.ts +9 -0
  644. package/src/workflows/validation.ts +72 -0
  645. package/dist/chunk-1k89ecfr.js +0 -85
  646. package/dist/chunk-1k89ecfr.js.map +0 -10
  647. package/dist/chunk-3t2hgbgd.js.map +0 -15
  648. package/dist/chunk-4vyr1j8f.js +0 -128
  649. package/dist/chunk-4vyr1j8f.js.map +0 -11
  650. package/dist/chunk-9gyp8hg1.js +0 -363
  651. package/dist/chunk-9gyp8hg1.js.map +0 -14
  652. package/dist/chunk-es1gxsbf.js.map +0 -13
  653. package/dist/chunk-gsjm1wms.js.map +0 -10
  654. package/dist/chunk-hkc3jct7.js.map +0 -10
  655. package/dist/chunk-k6q3n2sc.js.map +0 -12
  656. package/dist/chunk-rrzt8jdy.js.map +0 -14
  657. package/dist/chunk-s16apyk9.js +0 -256
  658. package/dist/chunk-s16apyk9.js.map +0 -16
  659. package/dist/chunk-s54c868q.js.map +0 -12
  660. package/dist/chunk-tw03bsmb.js.map +0 -11
  661. /package/dist/{chunk-xfs8x8m9.js.map → chunk-0bphap9y.js.map} +0 -0
  662. /package/dist/{chunk-1zq2p6g0.js.map → chunk-1cc1xaf3.js.map} +0 -0
  663. /package/dist/{chunk-t7x8dmn0.js.map → chunk-431pyp2c.js.map} +0 -0
  664. /package/dist/{chunk-c85m1hyj.js.map → chunk-447a5c0p.js.map} +0 -0
  665. /package/dist/{chunk-ren4kg2j.js.map → chunk-561r0yc9.js.map} +0 -0
  666. /package/dist/{chunk-5e43w60z.js.map → chunk-5948n82c.js.map} +0 -0
  667. /package/dist/{chunk-yzwja0mj.js.map → chunk-5hx48dnn.js.map} +0 -0
  668. /package/dist/{chunk-5j58wjct.js.map → chunk-858emn8m.js.map} +0 -0
  669. /package/dist/{chunk-6p49a5cq.js.map → chunk-c1rxbz5y.js.map} +0 -0
  670. /package/dist/{chunk-gc4ntf7d.js.map → chunk-cwdzcv37.js.map} +0 -0
  671. /package/dist/{chunk-fa02jy15.js.map → chunk-cy4mbddw.js.map} +0 -0
  672. /package/dist/{chunk-9w055r5b.js.map → chunk-d09e3rax.js.map} +0 -0
  673. /package/dist/{chunk-dk8tkk5f.js.map → chunk-d7dnxdep.js.map} +0 -0
  674. /package/dist/{chunk-tg2cw67r.js.map → chunk-ky3j490c.js.map} +0 -0
  675. /package/dist/{chunk-vyf9kfqf.js.map → chunk-q7gn29y3.js.map} +0 -0
  676. /package/dist/{chunk-v9xd5wzd.js.map → chunk-s7jg7pmn.js.map} +0 -0
  677. /package/dist/{chunk-9dmt152s.js.map → chunk-vf57cr4t.js.map} +0 -0
  678. /package/dist/{chunk-9ybhtmg4.js.map → chunk-vvxtn22d.js.map} +0 -0
  679. /package/dist/{chunk-7t429e3f.js.map → chunk-xvsc5m8n.js.map} +0 -0
  680. /package/dist/{chunk-z4m0yz8c.js.map → chunk-y5tah2kf.js.map} +0 -0
  681. /package/dist/{chunk-fkgc1wt8.js.map → chunk-z58tm0hm.js.map} +0 -0
@@ -0,0 +1,251 @@
1
+ import { posix } from "node:path"
2
+ import type { ArtifactFile } from "../../../storage/artifacts/types"
3
+ import { isArtifactAddress } from "../../address"
4
+ import { CsvParseError, type CsvTable, parseCsv } from "../../csv"
5
+ import { ARTIFACT_LIMITS } from "../../limits"
6
+ import type { SheetOutline } from "../../outline"
7
+ import {
8
+ NUMERIC_COLUMN_TYPES,
9
+ parseSheetDate,
10
+ parseSheetNumber,
11
+ parseWorkbook,
12
+ type SheetColumnFormat,
13
+ sheetFilePath,
14
+ WORKBOOK_FILE,
15
+ type Workbook,
16
+ type WorkbookSheet,
17
+ } from "../../workbook"
18
+ import { type ArtifactBlobStorage, invalidArtifact, readArtifactText } from "../files"
19
+ import type { FoundReference } from "../references"
20
+
21
+ /**
22
+ * Reads a sheet: `workbook.json`, then each sheet's CSV against it. Every cell of a typed column
23
+ * must read as its type and every chart must name columns its sheet has, so the grid formats and
24
+ * the charts draw the same wherever the sheet is opened.
25
+ */
26
+ export async function validateSheet(
27
+ blobStorage: ArtifactBlobStorage,
28
+ files: readonly ArtifactFile[]
29
+ ): Promise<{
30
+ readonly entry: string
31
+ readonly outline: SheetOutline
32
+ readonly references: readonly FoundReference[]
33
+ }> {
34
+ const byPath = new Map(files.map((file) => [file.path, file]))
35
+ const workbookFile = byPath.get(WORKBOOK_FILE)
36
+ if (!workbookFile) {
37
+ throw invalidArtifact(
38
+ `A sheet is a directory: '${WORKBOOK_FILE}' listing its sheets, and one CSV per sheet under sheets/. A single CSV publishes as a file.`
39
+ )
40
+ }
41
+ const parsed = parseWorkbook(
42
+ await readArtifactText(blobStorage, workbookFile, ARTIFACT_LIMITS.maxWorkbookBytes)
43
+ )
44
+ if ("error" in parsed) throw invalidArtifact(parsed.error)
45
+ const { workbook } = parsed
46
+
47
+ const declared = new Set(workbook.sheets.map((sheet) => sheetFilePath(sheet.name)))
48
+ const stray = files.find((file) => file.path.startsWith("sheets/") && !declared.has(file.path))
49
+ if (stray) {
50
+ throw invalidArtifact(
51
+ `'${stray.path}' is not a sheet in ${WORKBOOK_FILE}: list it in "sheets", or move it out of sheets/.`
52
+ )
53
+ }
54
+
55
+ const tables = new Map<string, CsvTable>()
56
+ const references: FoundReference[] = []
57
+ for (const sheet of workbook.sheets) {
58
+ tables.set(sheet.name, await readSheet(blobStorage, byPath, sheet, references))
59
+ }
60
+ checkCharts(workbook, tables)
61
+
62
+ return {
63
+ entry: WORKBOOK_FILE,
64
+ outline: {
65
+ kind: "sheet",
66
+ sheets: workbook.sheets.map((sheet) => {
67
+ const table = tables.get(sheet.name)
68
+ return {
69
+ name: sheet.name,
70
+ rows: table?.rows.length ?? 0,
71
+ columns: [...(table?.header ?? [])],
72
+ }
73
+ }),
74
+ charts: workbook.charts.map((chart) => chart.name),
75
+ },
76
+ references,
77
+ }
78
+ }
79
+
80
+ async function readSheet(
81
+ blobStorage: ArtifactBlobStorage,
82
+ byPath: ReadonlyMap<string, ArtifactFile>,
83
+ sheet: WorkbookSheet,
84
+ references: FoundReference[]
85
+ ): Promise<CsvTable> {
86
+ const path = sheetFilePath(sheet.name)
87
+ const file = byPath.get(path)
88
+ if (!file) throw invalidArtifact(`Sheet '${sheet.name}' needs its values in '${path}'.`)
89
+
90
+ if (file.file.sizeBytes > ARTIFACT_LIMITS.maxSheetFileBytes) {
91
+ throw invalidArtifact(
92
+ `'${path}' is ${megabytes(file.file.sizeBytes)} MB; a sheet's values may be at most ${megabytes(ARTIFACT_LIMITS.maxSheetFileBytes)} MB, which is what the viewer reads. Split it into several sheets, or publish the CSV as a file.`
93
+ )
94
+ }
95
+ let table: CsvTable
96
+ try {
97
+ table = parseCsv(await readArtifactText(blobStorage, file, ARTIFACT_LIMITS.maxSheetFileBytes))
98
+ } catch (error) {
99
+ if (error instanceof CsvParseError) throw invalidArtifact(`'${path}': ${error.message}`)
100
+ throw error
101
+ }
102
+
103
+ const { header, rows } = table
104
+ if (header.length === 0)
105
+ throw invalidArtifact(`'${path}' is empty: its first line names the columns.`)
106
+ if (header.length > ARTIFACT_LIMITS.maxSheetColumns) {
107
+ throw invalidArtifact(
108
+ `'${path}' has ${header.length} columns; a sheet holds at most ${ARTIFACT_LIMITS.maxSheetColumns}.`
109
+ )
110
+ }
111
+ const seen = new Set<string>()
112
+ for (const [index, name] of header.entries()) {
113
+ if (!name.trim()) {
114
+ throw invalidArtifact(`'${path}' column ${index + 1} has no name in the header row.`)
115
+ }
116
+ if (seen.has(name)) throw invalidArtifact(`'${path}' has two columns named '${name}'.`)
117
+ seen.add(name)
118
+ }
119
+ if (rows.length > ARTIFACT_LIMITS.maxSheetRows) {
120
+ throw invalidArtifact(
121
+ `'${path}' has ${rows.length} rows; a sheet holds at most ${ARTIFACT_LIMITS.maxSheetRows}.`
122
+ )
123
+ }
124
+ for (const [index, row] of rows.entries()) {
125
+ if (row.length > header.length) {
126
+ throw invalidArtifact(
127
+ `'${path}' row ${index + 2} has ${row.length} fields; the header names ${header.length} columns.`
128
+ )
129
+ }
130
+ }
131
+
132
+ for (const column of [...Object.keys(sheet.columns), ...Object.keys(sheet.widths)]) {
133
+ if (!seen.has(column)) {
134
+ throw invalidArtifact(
135
+ `${WORKBOOK_FILE} sheet '${sheet.name}' names column '${column}', which '${path}' does not have.`
136
+ )
137
+ }
138
+ }
139
+ for (const [column, format] of Object.entries(sheet.columns)) {
140
+ const index = header.indexOf(column)
141
+ if (format.type === "link" || format.type === "image") {
142
+ // A link or image may be another artifact's address, resolved with the rest.
143
+ for (const [rowIndex, row] of table.rows.entries()) {
144
+ const value = row[index]?.trim() ?? ""
145
+ if (!isArtifactAddress(value)) continue
146
+ references.push({
147
+ address: value,
148
+ as: format.type === "image" ? "embed" : "link",
149
+ at: `${sheet.name}!${columnLetter(index)}${rowIndex + 2}`,
150
+ })
151
+ }
152
+ }
153
+ checkColumn(path, table, index, column, format, byPath)
154
+ }
155
+ return table
156
+ }
157
+
158
+ function checkColumn(
159
+ path: string,
160
+ table: CsvTable,
161
+ index: number,
162
+ column: string,
163
+ format: SheetColumnFormat,
164
+ byPath: ReadonlyMap<string, ArtifactFile>
165
+ ): void {
166
+ for (const [rowIndex, row] of table.rows.entries()) {
167
+ const value = row[index] ?? ""
168
+ if (!value.trim() || isArtifactAddress(value)) continue
169
+ const problem = cellProblem(value, format, byPath)
170
+ if (problem) {
171
+ throw invalidArtifact(
172
+ `'${path}' row ${rowIndex + 2}, column '${column}': ${JSON.stringify(value)} ${problem}`
173
+ )
174
+ }
175
+ }
176
+ }
177
+
178
+ function cellProblem(
179
+ value: string,
180
+ format: SheetColumnFormat,
181
+ byPath: ReadonlyMap<string, ArtifactFile>
182
+ ): string | undefined {
183
+ switch (format.type) {
184
+ case "number":
185
+ case "currency":
186
+ return parseSheetNumber(value) === undefined
187
+ ? "is not a number: write plain digits, such as 4120000 or -3.5, with no symbols or separators."
188
+ : undefined
189
+ case "percent":
190
+ return parseSheetNumber(value) === undefined
191
+ ? "is not a number: write a percent as a fraction, such as 0.351 for 35.1%."
192
+ : undefined
193
+ case "date":
194
+ return parseSheetDate(value) === undefined
195
+ ? "is not a date: write YYYY-MM-DD, or an ISO 8601 date and time."
196
+ : undefined
197
+ case "link":
198
+ return /^https?:\/\/[^\s]+$/i.test(value.trim())
199
+ ? undefined
200
+ : "is not a link: write a full https:// address, or another artifact's address."
201
+ case "image": {
202
+ const imagePath = posix.normalize(value.trim())
203
+ return byPath.has(imagePath)
204
+ ? undefined
205
+ : "is not one of the artifact's files: add the image to the artifact and give its relative path, or give another artifact's address."
206
+ }
207
+ case "text":
208
+ return undefined
209
+ }
210
+ }
211
+
212
+ function checkCharts(workbook: Workbook, tables: ReadonlyMap<string, CsvTable>): void {
213
+ for (const chart of workbook.charts) {
214
+ const sheet = workbook.sheets.find((candidate) => candidate.name === chart.sheet)
215
+ const table = tables.get(chart.sheet)
216
+ if (!sheet || !table) continue
217
+ for (const column of [chart.x, ...chart.y]) {
218
+ if (!table.header.includes(column)) {
219
+ throw invalidArtifact(
220
+ `${WORKBOOK_FILE} chart '${chart.name}' plots column '${column}', which sheet '${chart.sheet}' does not have.`
221
+ )
222
+ }
223
+ }
224
+ for (const column of chart.y) {
225
+ const type = sheet.columns[column]?.type ?? "text"
226
+ if (!NUMERIC_COLUMN_TYPES.includes(type)) {
227
+ throw invalidArtifact(
228
+ `${WORKBOOK_FILE} chart '${chart.name}' plots column '${column}', which is ${type}; give it a number, currency, or percent type in "columns".`
229
+ )
230
+ }
231
+ }
232
+ if (chart.type === "pie" && table.rows.length > ARTIFACT_LIMITS.maxPieSlices) {
233
+ throw invalidArtifact(
234
+ `${WORKBOOK_FILE} chart '${chart.name}' is a pie with ${table.rows.length} slices; a pie reads well with at most ${ARTIFACT_LIMITS.maxPieSlices}. Use a bar chart instead.`
235
+ )
236
+ }
237
+ }
238
+ }
239
+
240
+ /** A column's letter as a spreadsheet shows it: A, Z, AA. */
241
+ function columnLetter(index: number): string {
242
+ let letters = ""
243
+ for (let rest = index + 1; rest > 0; rest = Math.floor((rest - 1) / 26)) {
244
+ letters = String.fromCharCode(65 + ((rest - 1) % 26)) + letters
245
+ }
246
+ return letters
247
+ }
248
+
249
+ function megabytes(bytes: number): string {
250
+ return (bytes / (1024 * 1024)).toFixed(1).replace(/\.0$/, "")
251
+ }
@@ -0,0 +1,134 @@
1
+ import type { ArtifactFile } from "../../../storage/artifacts/types"
2
+ import { isArtifactAddress, parseArtifactAddress } from "../../address"
3
+ import { decodeHtmlEntities } from "../../html"
4
+ import { ARTIFACT_LIMITS } from "../../limits"
5
+ import type { SlidesOutline } from "../../outline"
6
+ import { type ArtifactBlobStorage, invalidArtifact, readArtifactText } from "../files"
7
+ import type { FoundReference } from "../references"
8
+
9
+ /** The file a deck renders from. */
10
+ export const SLIDES_ENTRY = "index.html"
11
+
12
+ /** Where the frame serves the kit and the runtime, beside a deck's own files. */
13
+ export const FRAME_ASSET_PREFIX = "__sixb/"
14
+
15
+ /**
16
+ * Reads a deck: `index.html` with one `<section class="slide">` per 1280×720 slide, and the files
17
+ * it loads beside it. Each slide's first heading becomes its title in the outline. The `artifact:`
18
+ * addresses it uses are returned with the slide each is on, to resolve: links (`<a href>`), files
19
+ * it shows from other artifacts (`<img src>`), and anything else it shows (`<sixb-embed src>`), a
20
+ * chart, a range, a section, or a slide, which the app draws over the frame.
21
+ */
22
+ export async function validateSlides(
23
+ blobStorage: ArtifactBlobStorage,
24
+ files: readonly ArtifactFile[]
25
+ ): Promise<{
26
+ readonly entry: string
27
+ readonly outline: SlidesOutline
28
+ readonly references: readonly FoundReference[]
29
+ }> {
30
+ const entry = files.find((file) => file.path === SLIDES_ENTRY)
31
+ if (!entry) {
32
+ throw invalidArtifact(
33
+ `A deck needs '${SLIDES_ENTRY}' with one <section class="slide"> per slide.`
34
+ )
35
+ }
36
+ const reserved = files.find((file) => file.path.startsWith(FRAME_ASSET_PREFIX))
37
+ if (reserved) {
38
+ throw invalidArtifact(
39
+ `'${reserved.path}' is under ${FRAME_ASSET_PREFIX}, where Sixb serves the deck's kit and runtime: move it.`
40
+ )
41
+ }
42
+ const html = await readArtifactText(blobStorage, entry, ARTIFACT_LIMITS.maxDeckBytes)
43
+
44
+ const slides: { title: string; heading: boolean }[] = []
45
+ const references: FoundReference[] = []
46
+ let refused: string | undefined
47
+ const at = () => String(Math.max(1, slides.length))
48
+ // The heading being read, if it is the first of the current slide.
49
+ let reading: { title: string; heading: boolean } | null = null
50
+ new HTMLRewriter()
51
+ .on("section", {
52
+ element(element) {
53
+ const classes = (element.getAttribute("class") ?? "").split(/\s+/)
54
+ if (classes.includes("slide")) slides.push({ title: "", heading: false })
55
+ },
56
+ })
57
+ .on("h1, h2, h3", {
58
+ element(element) {
59
+ const slide = slides.at(-1)
60
+ if (!slide || slide.heading) return
61
+ slide.heading = true
62
+ reading = slide
63
+ element.onEndTag(() => {
64
+ reading = null
65
+ })
66
+ },
67
+ text(chunk) {
68
+ if (reading) reading.title += chunk.text
69
+ },
70
+ })
71
+ .on("a[href]", {
72
+ element(element) {
73
+ const href = decodeHtmlEntities(element.getAttribute("href") ?? "")
74
+ if (isArtifactAddress(href)) {
75
+ references.push({ address: href.trim(), as: "link", at: at() })
76
+ }
77
+ },
78
+ })
79
+ .on("img[src]", {
80
+ element(element) {
81
+ const source = decodeHtmlEntities(element.getAttribute("src") ?? "").trim()
82
+ if (!isArtifactAddress(source)) return
83
+ if (!parseArtifactAddress(source)?.path) {
84
+ refused ??= `An <img> shows a file from another artifact, and '${source}' names none: show a chart, a range, a section, or a slide with <sixb-embed src="${source}"></sixb-embed>.`
85
+ return
86
+ }
87
+ references.push({ address: source, as: "embed", at: at() })
88
+ },
89
+ })
90
+ .on("sixb-embed", {
91
+ element(element) {
92
+ const source = decodeHtmlEntities(element.getAttribute("src") ?? "").trim()
93
+ if (!isArtifactAddress(source)) {
94
+ refused ??= `<sixb-embed> shows another artifact: give it src="artifact:…", such as artifact:art_k3m9q2x7tp#chart=revenue.`
95
+ return
96
+ }
97
+ references.push({ address: source, as: "embed", at: at() })
98
+ },
99
+ })
100
+ .on("iframe[src], object[data], embed[src]", {
101
+ element(element) {
102
+ const source = decodeHtmlEntities(
103
+ element.getAttribute("src") ?? element.getAttribute("data") ?? ""
104
+ ).trim()
105
+ if (isArtifactAddress(source)) {
106
+ refused ??= `${SLIDES_ENTRY} frames '${source}': show another artifact with <sixb-embed src="${source}"></sixb-embed>, or a file of one with <img>.`
107
+ }
108
+ },
109
+ })
110
+ .transform(html)
111
+
112
+ if (refused) throw invalidArtifact(refused)
113
+ if (slides.length === 0) {
114
+ throw invalidArtifact(
115
+ `${SLIDES_ENTRY} has no slides: put each slide in a <section class="slide">.`
116
+ )
117
+ }
118
+ if (slides.length > ARTIFACT_LIMITS.maxSlides) {
119
+ throw invalidArtifact(
120
+ `A deck holds at most ${ARTIFACT_LIMITS.maxSlides} slides; this one has ${slides.length}.`
121
+ )
122
+ }
123
+ return {
124
+ entry: SLIDES_ENTRY,
125
+ outline: {
126
+ kind: "slides",
127
+ slides: slides.map(({ title }) => {
128
+ const plain = decodeHtmlEntities(title).replace(/\s+/g, " ").trim()
129
+ return plain ? { title: plain } : {}
130
+ }),
131
+ },
132
+ references,
133
+ }
134
+ }
@@ -0,0 +1,11 @@
1
+ /** An `artifact:` address a version uses, recorded when the version is published. */
2
+ export interface ArtifactReference {
3
+ /** The address as written, such as `artifact:art_k3m9q2x7tp#chart=revenue`. */
4
+ readonly address: string
5
+ /** An embed shows the target in place; a link opens it. */
6
+ readonly as: "embed" | "link"
7
+ /** Where the address sits in its host: a heading slug, a slide number, or a sheet cell. */
8
+ readonly at: string
9
+ /** The target's version when this version was published, so later changes can be told apart. */
10
+ readonly resolvedVersion: number
11
+ }
@@ -0,0 +1,97 @@
1
+ import { type ArtifactAddress, type CellRange, parseSheetPart } from "./address"
2
+ import type { ArtifactKind } from "./kinds"
3
+ import type { ArtifactOutline } from "./outline"
4
+
5
+ /** The version an address points into: its kind, its outline, and its file list. */
6
+ export interface ArtifactAddressTarget {
7
+ readonly kind: ArtifactKind
8
+ readonly outline: ArtifactOutline
9
+ readonly files: readonly { readonly path: string }[]
10
+ }
11
+
12
+ /** What an address names inside its target. */
13
+ export type ResolvedArtifactPart =
14
+ | { readonly type: "artifact" }
15
+ | { readonly type: "file"; readonly path: string }
16
+ | { readonly type: "sheet"; readonly sheet: string; readonly range?: CellRange }
17
+ | { readonly type: "chart"; readonly chart: string }
18
+ | { readonly type: "section"; readonly slug: string }
19
+ | { readonly type: "slide"; readonly slide: number }
20
+
21
+ /**
22
+ * Finds what an address names in a version, against its outline and files. A problem says what is
23
+ * missing and what the version has instead, so whoever wrote the address can fix it.
24
+ */
25
+ export function resolveArtifactAddress(
26
+ address: ArtifactAddress,
27
+ target: ArtifactAddressTarget
28
+ ): { readonly part: ResolvedArtifactPart } | { readonly problem: string } {
29
+ if (address.path !== undefined) {
30
+ if (address.part !== undefined) return { problem: "names both a file and a part of one" }
31
+ return target.files.some((file) => file.path === address.path)
32
+ ? { part: { type: "file", path: address.path } }
33
+ : { problem: `has no file '${address.path}'` }
34
+ }
35
+ if (address.part === undefined) return { part: { type: "artifact" } }
36
+
37
+ const { outline } = target
38
+ switch (outline.kind) {
39
+ case "sheet": {
40
+ const part = parseSheetPart(address.part)
41
+ if (!part) {
42
+ return {
43
+ problem: `has no part '${address.part}': name a sheet, a range such as Summary!A1:D12, or chart=<name>`,
44
+ }
45
+ }
46
+ if (part.type === "chart") {
47
+ return outline.charts.includes(part.chart)
48
+ ? { part }
49
+ : { problem: `has no chart '${part.chart}'${listed("its charts", outline.charts)}` }
50
+ }
51
+ const sheet = outline.sheets.find((candidate) => candidate.name === part.sheet)
52
+ if (!sheet) {
53
+ return {
54
+ problem: `has no sheet '${part.sheet}'${listed(
55
+ "its sheets",
56
+ outline.sheets.map((candidate) => candidate.name)
57
+ )}`,
58
+ }
59
+ }
60
+ // Row 1 is the header row, so the last row is one past the data rows.
61
+ if (
62
+ part.range &&
63
+ (part.range.bottom > sheet.rows || part.range.right >= sheet.columns.length)
64
+ ) {
65
+ return {
66
+ problem: `has no range ${address.part.slice(address.part.lastIndexOf("!") + 1)} in sheet '${sheet.name}', which has ${sheet.rows + 1} rows and ${sheet.columns.length} columns`,
67
+ }
68
+ }
69
+ return { part }
70
+ }
71
+ case "document": {
72
+ const heading = outline.headings.find((candidate) => candidate.slug === address.part)
73
+ return heading
74
+ ? { part: { type: "section", slug: heading.slug } }
75
+ : {
76
+ problem: `has no section '${address.part}'${listed(
77
+ "its sections",
78
+ outline.headings.map((candidate) => candidate.slug)
79
+ )}`,
80
+ }
81
+ }
82
+ case "slides": {
83
+ const slide = /^[1-9]\d*$/.test(address.part) ? Number(address.part) : Number.NaN
84
+ return slide <= outline.slides.length
85
+ ? { part: { type: "slide", slide } }
86
+ : { problem: `has no slide '${address.part}': it has ${outline.slides.length} slides` }
87
+ }
88
+ case "file":
89
+ return { problem: `is a ${target.kind}, which has no parts to name` }
90
+ }
91
+ }
92
+
93
+ function listed(label: string, names: readonly string[]): string {
94
+ if (names.length === 0) return ""
95
+ const shown = names.slice(0, 8).map((name) => `'${name}'`)
96
+ return `; ${label} are ${shown.join(", ")}${names.length > shown.length ? ", …" : ""}`
97
+ }
@@ -0,0 +1,116 @@
1
+ /** An artifact may carry this file at its root to override the app's theme. */
2
+ export const ARTIFACT_THEME_FILE = "theme.json"
3
+
4
+ /**
5
+ * An artifact's own theme. `mode` pins light or dark whatever the viewer's app uses; `tokens`
6
+ * override the app's values for the names in {@link ARTIFACT_THEME_TOKENS}.
7
+ */
8
+ export interface ArtifactTheme {
9
+ readonly mode?: "light" | "dark"
10
+ readonly tokens?: Readonly<Record<string, string>>
11
+ }
12
+
13
+ const COLOR_TOKENS = [
14
+ "--background",
15
+ "--foreground",
16
+ "--card",
17
+ "--card-foreground",
18
+ "--muted",
19
+ "--muted-foreground",
20
+ "--primary",
21
+ "--primary-foreground",
22
+ "--accent",
23
+ "--accent-foreground",
24
+ "--border",
25
+ "--chart-1",
26
+ "--chart-2",
27
+ "--chart-3",
28
+ "--chart-4",
29
+ "--chart-5",
30
+ ] as const
31
+ const FONT_TOKENS = ["--font-sans", "--font-serif", "--font-mono"] as const
32
+
33
+ /** The tokens a theme may set. Every other app token stays the app's. */
34
+ export const ARTIFACT_THEME_TOKENS: readonly string[] = [
35
+ ...COLOR_TOKENS,
36
+ ...FONT_TOKENS,
37
+ "--radius",
38
+ ]
39
+
40
+ // Values land in CSS custom properties, so each kind of token takes one narrow shape: nothing that
41
+ // could close the declaration, open a URL, or call a function other than a color space.
42
+ const HEX_COLOR = /^#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i
43
+ const FUNCTION_COLOR =
44
+ /^(?:rgba?|hsla?|oklch|oklab|lab|lch)\((?:[\d.%\s,/+-]|deg|turn|rad|none)*\)$/i
45
+ const FONT_FAMILY =
46
+ /^\s*(?:"[\w -]+"|'[\w -]+'|[\w-]+)(?:\s*,\s*(?:"[\w -]+"|'[\w -]+'|[\w-]+))*\s*$/
47
+ const LENGTH = /^(?:0|\d{1,3}(?:\.\d+)?(?:px|rem|em))$/
48
+
49
+ /** Reads a `theme.json`. Returns the reason it was refused, in words the author can act on. */
50
+ export function parseArtifactTheme(
51
+ text: string
52
+ ): { readonly theme: ArtifactTheme } | { readonly error: string } {
53
+ let value: unknown
54
+ try {
55
+ value = JSON.parse(text)
56
+ } catch {
57
+ return { error: `${ARTIFACT_THEME_FILE} is not valid JSON.` }
58
+ }
59
+ if (!isObject(value)) return { error: `${ARTIFACT_THEME_FILE} must be a JSON object.` }
60
+
61
+ const unknownKey = Object.keys(value).find((key) => key !== "mode" && key !== "tokens")
62
+ if (unknownKey) {
63
+ return {
64
+ error: `${ARTIFACT_THEME_FILE} has '${unknownKey}'; it takes only "mode" and "tokens".`,
65
+ }
66
+ }
67
+ if (value.mode !== undefined && value.mode !== "light" && value.mode !== "dark") {
68
+ return { error: `${ARTIFACT_THEME_FILE} "mode" must be "light" or "dark".` }
69
+ }
70
+ if (value.tokens !== undefined && !isObject(value.tokens)) {
71
+ return { error: `${ARTIFACT_THEME_FILE} "tokens" must be an object of token names to values.` }
72
+ }
73
+
74
+ const tokens: Record<string, string> = {}
75
+ for (const [name, tokenValue] of Object.entries(value.tokens ?? {})) {
76
+ if (!ARTIFACT_THEME_TOKENS.includes(name)) {
77
+ return {
78
+ error: `${ARTIFACT_THEME_FILE} sets '${name}'. A theme can set ${ARTIFACT_THEME_TOKENS.join(", ")}.`,
79
+ }
80
+ }
81
+ if (typeof tokenValue !== "string" || !tokenValueFits(name, tokenValue)) {
82
+ return {
83
+ error: `${ARTIFACT_THEME_FILE} gives '${name}' a value it cannot use: ${expected(name)}.`,
84
+ }
85
+ }
86
+ tokens[name] = tokenValue.trim()
87
+ }
88
+
89
+ return {
90
+ theme: {
91
+ ...(value.mode === undefined ? {} : { mode: value.mode }),
92
+ ...(Object.keys(tokens).length === 0 ? {} : { tokens }),
93
+ },
94
+ }
95
+ }
96
+
97
+ function tokenValueFits(name: string, value: string): boolean {
98
+ const trimmed = value.trim()
99
+ if (name === "--radius") return LENGTH.test(trimmed)
100
+ if ((FONT_TOKENS as readonly string[]).includes(name)) {
101
+ return trimmed.length <= 200 && FONT_FAMILY.test(trimmed)
102
+ }
103
+ return HEX_COLOR.test(trimmed) || FUNCTION_COLOR.test(trimmed)
104
+ }
105
+
106
+ function expected(name: string): string {
107
+ if (name === "--radius") return "a length such as 8px or 0.5rem"
108
+ if ((FONT_TOKENS as readonly string[]).includes(name)) {
109
+ return 'a font list such as "Inter Tight", system-ui, sans-serif'
110
+ }
111
+ return "a color such as #2f7280 or oklch(0.62 0.1 210)"
112
+ }
113
+
114
+ function isObject(value: unknown): value is Record<string, unknown> {
115
+ return typeof value === "object" && value !== null && !Array.isArray(value)
116
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Something about a published version worth fixing that did not stop it from publishing. A warning
3
+ * names the part it concerns, so a viewer can point at it.
4
+ */
5
+ export interface ArtifactWarning {
6
+ readonly code: string
7
+ readonly message: string
8
+ /** The slide, sheet, section, or file the warning is about. */
9
+ readonly part?: string
10
+ }