@dxos/echo 0.8.4-main.b97322e → 0.8.4-main.bc674ce

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 (476) hide show
  1. package/README.md +2 -3
  2. package/dist/lib/neutral/Annotation.mjs +32 -0
  3. package/dist/lib/neutral/Database.mjs +17 -0
  4. package/dist/lib/neutral/Entity.mjs +51 -0
  5. package/dist/lib/neutral/Entity.mjs.map +7 -0
  6. package/dist/lib/neutral/Err.mjs +10 -0
  7. package/dist/lib/neutral/Err.mjs.map +7 -0
  8. package/dist/lib/neutral/Filter.mjs +61 -0
  9. package/dist/lib/neutral/Filter.mjs.map +7 -0
  10. package/dist/lib/neutral/Format.mjs +66 -0
  11. package/dist/lib/neutral/Format.mjs.map +7 -0
  12. package/dist/lib/neutral/JsonSchema.mjs +19 -0
  13. package/dist/lib/neutral/JsonSchema.mjs.map +7 -0
  14. package/dist/lib/neutral/Key.mjs +12 -0
  15. package/dist/lib/neutral/Key.mjs.map +7 -0
  16. package/dist/lib/neutral/Obj.mjs +90 -0
  17. package/dist/lib/neutral/Obj.mjs.map +7 -0
  18. package/dist/lib/neutral/Order.mjs +12 -0
  19. package/dist/lib/neutral/Order.mjs.map +7 -0
  20. package/dist/lib/neutral/Query.mjs +26 -0
  21. package/dist/lib/neutral/Query.mjs.map +7 -0
  22. package/dist/lib/neutral/QueryResult.mjs +2 -0
  23. package/dist/lib/neutral/QueryResult.mjs.map +7 -0
  24. package/dist/lib/neutral/Ref.mjs +22 -0
  25. package/dist/lib/neutral/Ref.mjs.map +7 -0
  26. package/dist/lib/neutral/Relation.mjs +84 -0
  27. package/dist/lib/neutral/Relation.mjs.map +7 -0
  28. package/dist/lib/neutral/SchemaRegistry.mjs +2 -0
  29. package/dist/lib/neutral/SchemaRegistry.mjs.map +7 -0
  30. package/dist/lib/neutral/Tag.mjs +25 -0
  31. package/dist/lib/neutral/Tag.mjs.map +7 -0
  32. package/dist/lib/neutral/Type.mjs +47 -0
  33. package/dist/lib/neutral/Type.mjs.map +7 -0
  34. package/dist/lib/neutral/chunk-2MTHJ5UW.mjs +203 -0
  35. package/dist/lib/neutral/chunk-2MTHJ5UW.mjs.map +7 -0
  36. package/dist/lib/neutral/chunk-3ZEAZF7T.mjs +23 -0
  37. package/dist/lib/neutral/chunk-3ZEAZF7T.mjs.map +7 -0
  38. package/dist/lib/neutral/chunk-4L6DOFXP.mjs +7 -0
  39. package/dist/lib/neutral/chunk-4L6DOFXP.mjs.map +7 -0
  40. package/dist/lib/neutral/chunk-4TT624YA.mjs +73 -0
  41. package/dist/lib/neutral/chunk-4TT624YA.mjs.map +7 -0
  42. package/dist/lib/neutral/chunk-62DWJ6CE.mjs +402 -0
  43. package/dist/lib/neutral/chunk-62DWJ6CE.mjs.map +7 -0
  44. package/dist/lib/neutral/chunk-6QPSGMEF.mjs +97 -0
  45. package/dist/lib/neutral/chunk-6QPSGMEF.mjs.map +7 -0
  46. package/dist/lib/neutral/chunk-ANHVGJI4.mjs +21 -0
  47. package/dist/lib/neutral/chunk-ANHVGJI4.mjs.map +7 -0
  48. package/dist/lib/neutral/chunk-CUDIBUM4.mjs +282 -0
  49. package/dist/lib/neutral/chunk-CUDIBUM4.mjs.map +7 -0
  50. package/dist/lib/neutral/chunk-HMOXCO27.mjs +40 -0
  51. package/dist/lib/neutral/chunk-HMOXCO27.mjs.map +7 -0
  52. package/dist/lib/neutral/chunk-IP2GHXWA.mjs +56 -0
  53. package/dist/lib/neutral/chunk-IP2GHXWA.mjs.map +7 -0
  54. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  55. package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +7 -0
  56. package/dist/lib/neutral/chunk-KRHDMXSU.mjs +132 -0
  57. package/dist/lib/neutral/chunk-KRHDMXSU.mjs.map +7 -0
  58. package/dist/lib/neutral/chunk-NWUO5FKZ.mjs +39 -0
  59. package/dist/lib/neutral/chunk-NWUO5FKZ.mjs.map +7 -0
  60. package/dist/lib/neutral/chunk-OMUPQMLR.mjs +7 -0
  61. package/dist/lib/neutral/chunk-OMUPQMLR.mjs.map +7 -0
  62. package/dist/lib/neutral/chunk-ROKO4RKJ.mjs +42 -0
  63. package/dist/lib/neutral/chunk-ROKO4RKJ.mjs.map +7 -0
  64. package/dist/lib/neutral/chunk-RPB6V4BE.mjs +38 -0
  65. package/dist/lib/neutral/chunk-RPB6V4BE.mjs.map +7 -0
  66. package/dist/lib/neutral/chunk-SU2LVM7J.mjs +3846 -0
  67. package/dist/lib/neutral/chunk-SU2LVM7J.mjs.map +7 -0
  68. package/dist/lib/neutral/chunk-VB5HVDCA.mjs +287 -0
  69. package/dist/lib/neutral/chunk-VB5HVDCA.mjs.map +7 -0
  70. package/dist/lib/neutral/chunk-VR4A4WGG.mjs +249 -0
  71. package/dist/lib/neutral/chunk-VR4A4WGG.mjs.map +7 -0
  72. package/dist/lib/neutral/chunk-X2MPMYYN.mjs +13 -0
  73. package/dist/lib/neutral/chunk-X2MPMYYN.mjs.map +7 -0
  74. package/dist/lib/neutral/chunk-XK5OUUBY.mjs +157 -0
  75. package/dist/lib/neutral/chunk-XK5OUUBY.mjs.map +7 -0
  76. package/dist/lib/neutral/chunk-XMIDBDE6.mjs +142 -0
  77. package/dist/lib/neutral/chunk-XMIDBDE6.mjs.map +7 -0
  78. package/dist/lib/neutral/chunk-YQYMWZAD.mjs +67 -0
  79. package/dist/lib/neutral/chunk-YQYMWZAD.mjs.map +7 -0
  80. package/dist/lib/neutral/index.mjs +84 -0
  81. package/dist/lib/neutral/index.mjs.map +7 -0
  82. package/dist/lib/neutral/internal/index.mjs +456 -0
  83. package/dist/lib/neutral/internal/index.mjs.map +7 -0
  84. package/dist/lib/neutral/meta.json +1 -0
  85. package/dist/lib/neutral/testing/index.mjs +366 -0
  86. package/dist/lib/neutral/testing/index.mjs.map +7 -0
  87. package/dist/types/src/Annotation.d.ts +2 -0
  88. package/dist/types/src/Annotation.d.ts.map +1 -0
  89. package/dist/types/src/Database.d.ts +194 -0
  90. package/dist/types/src/Database.d.ts.map +1 -0
  91. package/dist/types/src/Entity.d.ts +142 -0
  92. package/dist/types/src/Entity.d.ts.map +1 -0
  93. package/dist/types/src/Entity.test.d.ts +2 -0
  94. package/dist/types/src/Entity.test.d.ts.map +1 -0
  95. package/dist/types/src/Err.d.ts +64 -0
  96. package/dist/types/src/Err.d.ts.map +1 -0
  97. package/dist/types/src/Filter.d.ts +120 -0
  98. package/dist/types/src/Filter.d.ts.map +1 -0
  99. package/dist/types/src/Format.d.ts +4 -0
  100. package/dist/types/src/Format.d.ts.map +1 -0
  101. package/dist/types/src/Hypergraph.d.ts +60 -0
  102. package/dist/types/src/Hypergraph.d.ts.map +1 -0
  103. package/dist/types/src/JsonSchema.d.ts +9 -0
  104. package/dist/types/src/JsonSchema.d.ts.map +1 -0
  105. package/dist/types/src/Key.d.ts +1 -0
  106. package/dist/types/src/Key.d.ts.map +1 -1
  107. package/dist/types/src/Obj.d.ts +344 -35
  108. package/dist/types/src/Obj.d.ts.map +1 -1
  109. package/dist/types/src/Obj.test.d.ts +2 -0
  110. package/dist/types/src/Obj.test.d.ts.map +1 -0
  111. package/dist/types/src/Order.d.ts +16 -0
  112. package/dist/types/src/Order.d.ts.map +1 -0
  113. package/dist/types/src/Query.d.ts +115 -0
  114. package/dist/types/src/Query.d.ts.map +1 -0
  115. package/dist/types/src/Query.test.d.ts +2 -0
  116. package/dist/types/src/Query.test.d.ts.map +1 -0
  117. package/dist/types/src/QueryResult.d.ts +80 -0
  118. package/dist/types/src/QueryResult.d.ts.map +1 -0
  119. package/dist/types/src/Ref.d.ts +13 -11
  120. package/dist/types/src/Ref.d.ts.map +1 -1
  121. package/dist/types/src/Relation.d.ts +242 -19
  122. package/dist/types/src/Relation.d.ts.map +1 -1
  123. package/dist/types/src/Relation.test.d.ts +2 -0
  124. package/dist/types/src/Relation.test.d.ts.map +1 -0
  125. package/dist/types/src/SchemaRegistry.d.ts +84 -0
  126. package/dist/types/src/SchemaRegistry.d.ts.map +1 -0
  127. package/dist/types/src/Tag.d.ts +17 -0
  128. package/dist/types/src/Tag.d.ts.map +1 -0
  129. package/dist/types/src/Type.d.ts +225 -73
  130. package/dist/types/src/Type.d.ts.map +1 -1
  131. package/dist/types/src/Type.test.d.ts +2 -0
  132. package/dist/types/src/Type.test.d.ts.map +1 -0
  133. package/dist/types/src/index.d.ts +15 -3
  134. package/dist/types/src/index.d.ts.map +1 -1
  135. package/dist/types/src/internal/annotations/annotations.d.ts +170 -0
  136. package/dist/types/src/internal/annotations/annotations.d.ts.map +1 -0
  137. package/dist/types/src/internal/annotations/annotations.test.d.ts +2 -0
  138. package/dist/types/src/internal/annotations/annotations.test.d.ts.map +1 -0
  139. package/dist/types/src/internal/annotations/index.d.ts +3 -0
  140. package/dist/types/src/internal/annotations/index.d.ts.map +1 -0
  141. package/dist/types/src/internal/annotations/util.d.ts +27 -0
  142. package/dist/types/src/internal/annotations/util.d.ts.map +1 -0
  143. package/dist/types/src/internal/api/annotations.d.ts +23 -0
  144. package/dist/types/src/internal/api/annotations.d.ts.map +1 -0
  145. package/dist/types/src/internal/api/entity.d.ts +13 -0
  146. package/dist/types/src/internal/api/entity.d.ts.map +1 -0
  147. package/dist/types/src/internal/api/index.d.ts +15 -0
  148. package/dist/types/src/internal/api/index.d.ts.map +1 -0
  149. package/dist/types/src/internal/api/meta.d.ts +42 -0
  150. package/dist/types/src/internal/api/meta.d.ts.map +1 -0
  151. package/dist/types/src/internal/api/sorting.d.ts +24 -0
  152. package/dist/types/src/internal/api/sorting.d.ts.map +1 -0
  153. package/dist/types/src/internal/api/version.d.ts +42 -0
  154. package/dist/types/src/internal/api/version.d.ts.map +1 -0
  155. package/dist/types/src/internal/entities/entity.d.ts +20 -0
  156. package/dist/types/src/internal/entities/entity.d.ts.map +1 -0
  157. package/dist/types/src/internal/entities/index.d.ts +6 -0
  158. package/dist/types/src/internal/entities/index.d.ts.map +1 -0
  159. package/dist/types/src/internal/entities/model.d.ts +77 -0
  160. package/dist/types/src/internal/entities/model.d.ts.map +1 -0
  161. package/dist/types/src/internal/entities/object.d.ts +18 -0
  162. package/dist/types/src/internal/entities/object.d.ts.map +1 -0
  163. package/dist/types/src/internal/entities/relation.d.ts +62 -0
  164. package/dist/types/src/internal/entities/relation.d.ts.map +1 -0
  165. package/dist/types/src/internal/entities/util.d.ts +2 -0
  166. package/dist/types/src/internal/entities/util.d.ts.map +1 -0
  167. package/dist/types/src/internal/formats/date.d.ts +63 -0
  168. package/dist/types/src/internal/formats/date.d.ts.map +1 -0
  169. package/dist/types/src/internal/formats/date.test.d.ts +2 -0
  170. package/dist/types/src/internal/formats/date.test.d.ts.map +1 -0
  171. package/dist/types/src/internal/formats/format.d.ts +32 -0
  172. package/dist/types/src/internal/formats/format.d.ts.map +1 -0
  173. package/dist/types/src/internal/formats/format.test.d.ts +2 -0
  174. package/dist/types/src/internal/formats/format.test.d.ts.map +1 -0
  175. package/dist/types/src/internal/formats/index.d.ts +8 -0
  176. package/dist/types/src/internal/formats/index.d.ts.map +1 -0
  177. package/dist/types/src/internal/formats/number.d.ts +31 -0
  178. package/dist/types/src/internal/formats/number.d.ts.map +1 -0
  179. package/dist/types/src/internal/formats/object.d.ts +35 -0
  180. package/dist/types/src/internal/formats/object.d.ts.map +1 -0
  181. package/dist/types/src/internal/formats/select.d.ts +13 -0
  182. package/dist/types/src/internal/formats/select.d.ts.map +1 -0
  183. package/dist/types/src/internal/formats/string.d.ts +42 -0
  184. package/dist/types/src/internal/formats/string.d.ts.map +1 -0
  185. package/dist/types/src/internal/formats/types.d.ts +72 -0
  186. package/dist/types/src/internal/formats/types.d.ts.map +1 -0
  187. package/dist/types/src/internal/index.d.ts +12 -0
  188. package/dist/types/src/internal/index.d.ts.map +1 -0
  189. package/dist/types/src/internal/json-schema/annotations.d.ts +19 -0
  190. package/dist/types/src/internal/json-schema/annotations.d.ts.map +1 -0
  191. package/dist/types/src/internal/json-schema/effect-schema.test.d.ts +2 -0
  192. package/dist/types/src/internal/json-schema/effect-schema.test.d.ts.map +1 -0
  193. package/dist/types/src/internal/json-schema/index.d.ts +5 -0
  194. package/dist/types/src/internal/json-schema/index.d.ts.map +1 -0
  195. package/dist/types/src/internal/json-schema/json-schema-normalize.d.ts +7 -0
  196. package/dist/types/src/internal/json-schema/json-schema-normalize.d.ts.map +1 -0
  197. package/dist/types/src/internal/json-schema/json-schema-type.d.ts +351 -0
  198. package/dist/types/src/internal/json-schema/json-schema-type.d.ts.map +1 -0
  199. package/dist/types/src/internal/json-schema/json-schema.d.ts +30 -0
  200. package/dist/types/src/internal/json-schema/json-schema.d.ts.map +1 -0
  201. package/dist/types/src/internal/json-schema/json-schema.test.d.ts +2 -0
  202. package/dist/types/src/internal/json-schema/json-schema.test.d.ts.map +1 -0
  203. package/dist/types/src/internal/object/clone.d.ts +8 -0
  204. package/dist/types/src/internal/object/clone.d.ts.map +1 -0
  205. package/dist/types/src/internal/object/common.d.ts +18 -0
  206. package/dist/types/src/internal/object/common.d.ts.map +1 -0
  207. package/dist/types/src/internal/object/create-object.d.ts +39 -0
  208. package/dist/types/src/internal/object/create-object.d.ts.map +1 -0
  209. package/dist/types/src/internal/object/create-object.test.d.ts +2 -0
  210. package/dist/types/src/internal/object/create-object.test.d.ts.map +1 -0
  211. package/dist/types/src/internal/object/deleted.d.ts +6 -0
  212. package/dist/types/src/internal/object/deleted.d.ts.map +1 -0
  213. package/dist/types/src/internal/object/ids.d.ts +6 -0
  214. package/dist/types/src/internal/object/ids.d.ts.map +1 -0
  215. package/dist/types/src/internal/object/index.d.ts +11 -0
  216. package/dist/types/src/internal/object/index.d.ts.map +1 -0
  217. package/dist/types/src/internal/object/inspect.d.ts +2 -0
  218. package/dist/types/src/internal/object/inspect.d.ts.map +1 -0
  219. package/dist/types/src/internal/object/json-serializer.d.ts +37 -0
  220. package/dist/types/src/internal/object/json-serializer.d.ts.map +1 -0
  221. package/dist/types/src/internal/object/json-serializer.test.d.ts +2 -0
  222. package/dist/types/src/internal/object/json-serializer.test.d.ts.map +1 -0
  223. package/dist/types/src/internal/object/schema-validator.d.ts +2 -0
  224. package/dist/types/src/internal/object/schema-validator.d.ts.map +1 -0
  225. package/dist/types/src/internal/object/schema-validator.test.d.ts +2 -0
  226. package/dist/types/src/internal/object/schema-validator.test.d.ts.map +1 -0
  227. package/dist/types/src/internal/object/set-value.d.ts +7 -0
  228. package/dist/types/src/internal/object/set-value.d.ts.map +1 -0
  229. package/dist/types/src/internal/object/set-value.test.d.ts +2 -0
  230. package/dist/types/src/internal/object/set-value.test.d.ts.map +1 -0
  231. package/dist/types/src/internal/object/snapshot.d.ts +6 -0
  232. package/dist/types/src/internal/object/snapshot.d.ts.map +1 -0
  233. package/dist/types/src/internal/object/typed-object.d.ts +25 -0
  234. package/dist/types/src/internal/object/typed-object.d.ts.map +1 -0
  235. package/dist/types/src/internal/object/typed-object.test.d.ts +2 -0
  236. package/dist/types/src/internal/object/typed-object.test.d.ts.map +1 -0
  237. package/dist/types/src/internal/proxy/change-context.d.ts +55 -0
  238. package/dist/types/src/internal/proxy/change-context.d.ts.map +1 -0
  239. package/dist/types/src/internal/proxy/change.test.d.ts +2 -0
  240. package/dist/types/src/internal/proxy/change.test.d.ts.map +1 -0
  241. package/dist/types/src/internal/proxy/define-hidden-property.d.ts +5 -0
  242. package/dist/types/src/internal/proxy/define-hidden-property.d.ts.map +1 -0
  243. package/dist/types/src/internal/proxy/errors.d.ts +19 -0
  244. package/dist/types/src/internal/proxy/errors.d.ts.map +1 -0
  245. package/dist/types/src/internal/proxy/event-batch.d.ts +10 -0
  246. package/dist/types/src/internal/proxy/event-batch.d.ts.map +1 -0
  247. package/dist/types/src/internal/proxy/handler.test.d.ts +2 -0
  248. package/dist/types/src/internal/proxy/handler.test.d.ts.map +1 -0
  249. package/dist/types/src/internal/proxy/index.d.ts +14 -0
  250. package/dist/types/src/internal/proxy/index.d.ts.map +1 -0
  251. package/dist/types/src/internal/proxy/json-serializer.d.ts +6 -0
  252. package/dist/types/src/internal/proxy/json-serializer.d.ts.map +1 -0
  253. package/dist/types/src/internal/proxy/make-object.d.ts +14 -0
  254. package/dist/types/src/internal/proxy/make-object.d.ts.map +1 -0
  255. package/dist/types/src/internal/proxy/ownership.d.ts +57 -0
  256. package/dist/types/src/internal/proxy/ownership.d.ts.map +1 -0
  257. package/dist/types/src/internal/proxy/proxy-types.d.ts +18 -0
  258. package/dist/types/src/internal/proxy/proxy-types.d.ts.map +1 -0
  259. package/dist/types/src/internal/proxy/proxy-utils.d.ts +47 -0
  260. package/dist/types/src/internal/proxy/proxy-utils.d.ts.map +1 -0
  261. package/dist/types/src/internal/proxy/reactive-array.d.ts +8 -0
  262. package/dist/types/src/internal/proxy/reactive-array.d.ts.map +1 -0
  263. package/dist/types/src/internal/proxy/reactive.d.ts +39 -0
  264. package/dist/types/src/internal/proxy/reactive.d.ts.map +1 -0
  265. package/dist/types/src/internal/proxy/schema-validator.d.ts +15 -0
  266. package/dist/types/src/internal/proxy/schema-validator.d.ts.map +1 -0
  267. package/dist/types/src/internal/proxy/schema.test.d.ts +2 -0
  268. package/dist/types/src/internal/proxy/schema.test.d.ts.map +1 -0
  269. package/dist/types/src/internal/proxy/symbols.d.ts +3 -0
  270. package/dist/types/src/internal/proxy/symbols.d.ts.map +1 -0
  271. package/dist/types/src/internal/proxy/typed-handler.d.ts +47 -0
  272. package/dist/types/src/internal/proxy/typed-handler.d.ts.map +1 -0
  273. package/dist/types/src/internal/proxy/typed-handler.test.d.ts +2 -0
  274. package/dist/types/src/internal/proxy/typed-handler.test.d.ts.map +1 -0
  275. package/dist/types/src/internal/proxy/typed-object.test.d.ts +2 -0
  276. package/dist/types/src/internal/proxy/typed-object.test.d.ts.map +1 -0
  277. package/dist/types/src/internal/ref/index.d.ts +3 -0
  278. package/dist/types/src/internal/ref/index.d.ts.map +1 -0
  279. package/dist/types/src/internal/ref/ref-array.d.ts +21 -0
  280. package/dist/types/src/internal/ref/ref-array.d.ts.map +1 -0
  281. package/dist/types/src/internal/ref/ref.d.ts +218 -0
  282. package/dist/types/src/internal/ref/ref.d.ts.map +1 -0
  283. package/dist/types/src/internal/ref/ref.test.d.ts +2 -0
  284. package/dist/types/src/internal/ref/ref.test.d.ts.map +1 -0
  285. package/dist/types/src/internal/schema/compose.d.ts +7 -0
  286. package/dist/types/src/internal/schema/compose.d.ts.map +1 -0
  287. package/dist/types/src/internal/schema/compose.test.d.ts +2 -0
  288. package/dist/types/src/internal/schema/compose.test.d.ts.map +1 -0
  289. package/dist/types/src/internal/schema/echo-schema.d.ts +180 -0
  290. package/dist/types/src/internal/schema/echo-schema.d.ts.map +1 -0
  291. package/dist/types/src/internal/schema/index.d.ts +4 -0
  292. package/dist/types/src/internal/schema/index.d.ts.map +1 -0
  293. package/dist/types/src/internal/schema/manipulation.d.ts +10 -0
  294. package/dist/types/src/internal/schema/manipulation.d.ts.map +1 -0
  295. package/dist/types/src/internal/schema/persistent-schema.d.ts +20 -0
  296. package/dist/types/src/internal/schema/persistent-schema.d.ts.map +1 -0
  297. package/dist/types/src/internal/types/base.d.ts +26 -0
  298. package/dist/types/src/internal/types/base.d.ts.map +1 -0
  299. package/dist/types/src/internal/types/entity.d.ts +37 -0
  300. package/dist/types/src/internal/types/entity.d.ts.map +1 -0
  301. package/dist/types/src/internal/types/index.d.ts +6 -0
  302. package/dist/types/src/internal/types/index.d.ts.map +1 -0
  303. package/dist/types/src/internal/types/meta.d.ts +32 -0
  304. package/dist/types/src/internal/types/meta.d.ts.map +1 -0
  305. package/dist/types/src/internal/types/typename.d.ts +13 -0
  306. package/dist/types/src/internal/types/typename.d.ts.map +1 -0
  307. package/dist/types/src/internal/types/version.d.ts +15 -0
  308. package/dist/types/src/internal/types/version.d.ts.map +1 -0
  309. package/dist/types/src/{test → testing}/api.test.d.ts.map +1 -1
  310. package/dist/types/src/testing/index.d.ts +3 -1
  311. package/dist/types/src/testing/index.d.ts.map +1 -1
  312. package/dist/types/src/testing/test-data.d.ts +18 -0
  313. package/dist/types/src/testing/test-data.d.ts.map +1 -0
  314. package/dist/types/src/testing/test-schema.d.ts +303 -0
  315. package/dist/types/src/testing/test-schema.d.ts.map +1 -0
  316. package/dist/types/src/testing/util.d.ts +21 -0
  317. package/dist/types/src/testing/util.d.ts.map +1 -0
  318. package/dist/types/tsconfig.tsbuildinfo +1 -1
  319. package/package.json +107 -53
  320. package/src/Annotation.ts +18 -0
  321. package/src/Database.ts +336 -0
  322. package/src/Entity.test.ts +22 -0
  323. package/src/Entity.ts +217 -0
  324. package/src/Err.ts +18 -0
  325. package/src/Filter.ts +376 -0
  326. package/src/Format.ts +9 -0
  327. package/src/Hypergraph.ts +74 -0
  328. package/src/JsonSchema.ts +16 -0
  329. package/src/Key.ts +3 -0
  330. package/src/Obj.test.ts +386 -0
  331. package/src/Obj.ts +508 -84
  332. package/src/Order.ts +44 -0
  333. package/src/Query.test.ts +465 -0
  334. package/src/Query.ts +296 -0
  335. package/src/QueryResult.ts +106 -0
  336. package/src/Ref.ts +25 -9
  337. package/src/Relation.test.ts +82 -0
  338. package/src/Relation.ts +414 -51
  339. package/src/SchemaRegistry.ts +105 -0
  340. package/src/Tag.ts +40 -0
  341. package/src/Type.test.ts +52 -0
  342. package/src/Type.ts +360 -112
  343. package/src/index.ts +17 -4
  344. package/src/internal/README.md +102 -0
  345. package/src/internal/annotations/annotations.test.ts +96 -0
  346. package/src/internal/annotations/annotations.ts +460 -0
  347. package/src/internal/annotations/index.ts +6 -0
  348. package/src/internal/annotations/util.ts +72 -0
  349. package/src/internal/api/annotations.ts +60 -0
  350. package/src/internal/api/entity.ts +29 -0
  351. package/src/internal/api/index.ts +19 -0
  352. package/src/internal/api/meta.ts +88 -0
  353. package/src/internal/api/sorting.ts +53 -0
  354. package/src/internal/api/version.ts +96 -0
  355. package/src/internal/entities/entity.ts +126 -0
  356. package/src/internal/entities/index.ts +9 -0
  357. package/src/internal/entities/model.ts +134 -0
  358. package/src/internal/entities/object.ts +58 -0
  359. package/src/internal/entities/relation.ts +171 -0
  360. package/src/internal/entities/util.ts +33 -0
  361. package/src/internal/formats/date.test.ts +56 -0
  362. package/src/internal/formats/date.ts +217 -0
  363. package/src/internal/formats/format.test.ts +77 -0
  364. package/src/internal/formats/format.ts +54 -0
  365. package/src/internal/formats/index.ts +12 -0
  366. package/src/internal/formats/number.ts +89 -0
  367. package/src/internal/formats/object.ts +80 -0
  368. package/src/internal/formats/select.ts +18 -0
  369. package/src/internal/formats/string.ts +81 -0
  370. package/src/internal/formats/types.ts +186 -0
  371. package/src/internal/index.ts +39 -0
  372. package/src/internal/json-schema/annotations.ts +50 -0
  373. package/src/internal/json-schema/effect-schema.test.ts +143 -0
  374. package/src/internal/json-schema/index.ts +8 -0
  375. package/src/internal/json-schema/json-schema-normalize.ts +111 -0
  376. package/src/internal/json-schema/json-schema-type.ts +403 -0
  377. package/src/internal/json-schema/json-schema.test.ts +861 -0
  378. package/src/internal/json-schema/json-schema.ts +532 -0
  379. package/src/internal/object/clone.ts +48 -0
  380. package/src/internal/object/common.ts +75 -0
  381. package/src/internal/object/create-object.test.ts +116 -0
  382. package/src/internal/object/create-object.ts +95 -0
  383. package/src/internal/object/deleted.ts +19 -0
  384. package/src/internal/object/ids.ts +12 -0
  385. package/src/internal/object/index.ts +14 -0
  386. package/src/internal/object/inspect.ts +46 -0
  387. package/src/internal/object/json-serializer.test.ts +98 -0
  388. package/src/internal/object/json-serializer.ts +188 -0
  389. package/src/internal/object/schema-validator.test.ts +182 -0
  390. package/src/internal/object/schema-validator.ts +6 -0
  391. package/src/internal/object/set-value.test.ts +281 -0
  392. package/src/internal/object/set-value.ts +165 -0
  393. package/src/internal/object/snapshot.ts +70 -0
  394. package/src/internal/object/typed-object.test.ts +34 -0
  395. package/src/internal/object/typed-object.ts +30 -0
  396. package/src/internal/proxy/change-context.ts +138 -0
  397. package/src/internal/proxy/change.test.ts +519 -0
  398. package/src/internal/proxy/define-hidden-property.ts +14 -0
  399. package/src/internal/proxy/errors.ts +42 -0
  400. package/src/internal/proxy/event-batch.ts +44 -0
  401. package/src/internal/proxy/handler.test.ts +123 -0
  402. package/src/internal/proxy/index.ts +17 -0
  403. package/src/internal/proxy/json-serializer.ts +87 -0
  404. package/src/internal/proxy/make-object.ts +96 -0
  405. package/src/internal/proxy/ownership.ts +253 -0
  406. package/src/internal/proxy/proxy-types.ts +23 -0
  407. package/src/internal/proxy/proxy-utils.ts +150 -0
  408. package/src/internal/proxy/reactive-array.ts +71 -0
  409. package/src/internal/proxy/reactive.ts +69 -0
  410. package/src/internal/proxy/schema-validator.ts +244 -0
  411. package/src/internal/proxy/schema.test.ts +145 -0
  412. package/src/internal/proxy/symbols.ts +7 -0
  413. package/src/internal/proxy/typed-handler.test.ts +314 -0
  414. package/src/internal/proxy/typed-handler.ts +442 -0
  415. package/src/internal/proxy/typed-object.test.ts +116 -0
  416. package/src/internal/ref/index.ts +6 -0
  417. package/src/internal/ref/ref-array.ts +39 -0
  418. package/src/internal/ref/ref.test.ts +101 -0
  419. package/src/internal/ref/ref.ts +549 -0
  420. package/src/internal/schema/compose.test.ts +42 -0
  421. package/src/internal/schema/compose.ts +41 -0
  422. package/src/internal/schema/echo-schema.ts +423 -0
  423. package/src/internal/schema/index.ts +7 -0
  424. package/src/internal/schema/manipulation.ts +92 -0
  425. package/src/internal/schema/persistent-schema.ts +27 -0
  426. package/src/internal/types/base.ts +43 -0
  427. package/src/internal/types/entity.ts +54 -0
  428. package/src/internal/types/index.ts +9 -0
  429. package/src/internal/types/meta.ts +65 -0
  430. package/src/internal/types/typename.ts +45 -0
  431. package/src/internal/types/version.ts +20 -0
  432. package/src/testing/api.test.ts +126 -0
  433. package/src/testing/index.ts +3 -1
  434. package/src/testing/test-data.ts +130 -0
  435. package/src/testing/test-schema.ts +238 -0
  436. package/src/testing/util.ts +85 -0
  437. package/dist/lib/browser/chunk-EUA7CM23.mjs +0 -619
  438. package/dist/lib/browser/chunk-EUA7CM23.mjs.map +0 -7
  439. package/dist/lib/browser/index.mjs +0 -22
  440. package/dist/lib/browser/meta.json +0 -1
  441. package/dist/lib/browser/testing/index.mjs +0 -70
  442. package/dist/lib/browser/testing/index.mjs.map +0 -7
  443. package/dist/lib/node-esm/chunk-IV6BWGHK.mjs +0 -619
  444. package/dist/lib/node-esm/chunk-IV6BWGHK.mjs.map +0 -7
  445. package/dist/lib/node-esm/index.mjs +0 -22
  446. package/dist/lib/node-esm/meta.json +0 -1
  447. package/dist/lib/node-esm/testing/index.mjs +0 -70
  448. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
  449. package/dist/types/src/experimental/database.d.ts +0 -8
  450. package/dist/types/src/experimental/database.d.ts.map +0 -1
  451. package/dist/types/src/experimental/index.d.ts +0 -1
  452. package/dist/types/src/experimental/index.d.ts.map +0 -1
  453. package/dist/types/src/experimental/queue.d.ts +0 -8
  454. package/dist/types/src/experimental/queue.d.ts.map +0 -1
  455. package/dist/types/src/experimental/space.d.ts +0 -8
  456. package/dist/types/src/experimental/space.d.ts.map +0 -1
  457. package/dist/types/src/query/dsl.d.ts +0 -218
  458. package/dist/types/src/query/dsl.d.ts.map +0 -1
  459. package/dist/types/src/query/dsl.test.d.ts +0 -2
  460. package/dist/types/src/query/dsl.test.d.ts.map +0 -1
  461. package/dist/types/src/query/index.d.ts +0 -2
  462. package/dist/types/src/query/index.d.ts.map +0 -1
  463. package/dist/types/src/testing/types.d.ts +0 -113
  464. package/dist/types/src/testing/types.d.ts.map +0 -1
  465. package/src/experimental/database.ts +0 -11
  466. package/src/experimental/index.ts +0 -7
  467. package/src/experimental/queue.ts +0 -11
  468. package/src/experimental/space.ts +0 -11
  469. package/src/query/dsl.test.ts +0 -323
  470. package/src/query/dsl.ts +0 -646
  471. package/src/query/index.ts +0 -5
  472. package/src/test/api.test.ts +0 -173
  473. package/src/testing/types.ts +0 -91
  474. /package/dist/lib/{browser/index.mjs.map → neutral/Annotation.mjs.map} +0 -0
  475. /package/dist/lib/{node-esm/index.mjs.map → neutral/Database.mjs.map} +0 -0
  476. /package/dist/types/src/{test → testing}/api.test.d.ts +0 -0
@@ -0,0 +1,402 @@
1
+ import {
2
+ createAnnotationHelper
3
+ } from "./chunk-YQYMWZAD.mjs";
4
+
5
+ // src/internal/formats/types.ts
6
+ import * as Function from "effect/Function";
7
+ import * as Option from "effect/Option";
8
+ import * as SchemaAST from "effect/SchemaAST";
9
+ var TypeEnum = /* @__PURE__ */ (function(TypeEnum2) {
10
+ TypeEnum2["Array"] = "array";
11
+ TypeEnum2["Object"] = "object";
12
+ TypeEnum2["String"] = "string";
13
+ TypeEnum2["Number"] = "number";
14
+ TypeEnum2["Boolean"] = "boolean";
15
+ TypeEnum2["Ref"] = "ref";
16
+ return TypeEnum2;
17
+ })({});
18
+ var getTypeEnum = (property) => {
19
+ switch (property.type) {
20
+ case "array":
21
+ return "array";
22
+ case "object":
23
+ return "object";
24
+ case "string":
25
+ return "string";
26
+ case "number":
27
+ return "number";
28
+ case "boolean":
29
+ return "boolean";
30
+ default:
31
+ return void 0;
32
+ }
33
+ };
34
+ var FormatAnnotationId = Symbol.for("@dxos/schema/annotation/Format");
35
+ var FormatAnnotation = createAnnotationHelper(FormatAnnotationId);
36
+ var getFormatAnnotation = (node) => Function.pipe(SchemaAST.getAnnotation(FormatAnnotationId)(node), Option.getOrUndefined);
37
+ var TypeFormat = /* @__PURE__ */ (function(TypeFormat2) {
38
+ TypeFormat2["None"] = "none";
39
+ TypeFormat2["String"] = "string";
40
+ TypeFormat2["Number"] = "number";
41
+ TypeFormat2["Boolean"] = "boolean";
42
+ TypeFormat2["Ref"] = "ref";
43
+ TypeFormat2["DID"] = "did";
44
+ TypeFormat2["DXN"] = "dxn";
45
+ TypeFormat2["Email"] = "email";
46
+ TypeFormat2["Formula"] = "formula";
47
+ TypeFormat2["Hostname"] = "hostname";
48
+ TypeFormat2["JSON"] = "json";
49
+ TypeFormat2["Markdown"] = "markdown";
50
+ TypeFormat2["Regex"] = "regex";
51
+ TypeFormat2["SingleSelect"] = "single-select";
52
+ TypeFormat2["Text"] = "text";
53
+ TypeFormat2["MultiSelect"] = "multi-select";
54
+ TypeFormat2["URL"] = "url";
55
+ TypeFormat2["UUID"] = "uuid";
56
+ TypeFormat2["Currency"] = "currency";
57
+ TypeFormat2["Integer"] = "integer";
58
+ TypeFormat2["Percent"] = "percent";
59
+ TypeFormat2["Timestamp"] = "timestamp";
60
+ TypeFormat2["DateTime"] = "date-time";
61
+ TypeFormat2["Date"] = "date";
62
+ TypeFormat2["Time"] = "time";
63
+ TypeFormat2["Duration"] = "duration";
64
+ TypeFormat2["GeoPoint"] = "lnglat";
65
+ return TypeFormat2;
66
+ })({});
67
+ var FormatEnums = Object.values(TypeFormat).sort();
68
+ var PropertyKind = {
69
+ type: TypeEnum,
70
+ format: TypeFormat
71
+ };
72
+ var typeToFormat = {
73
+ ["string"]: "string",
74
+ ["number"]: "number",
75
+ ["boolean"]: "boolean"
76
+ };
77
+ var formatToType = {
78
+ ["none"]: void 0,
79
+ ["string"]: "string",
80
+ ["number"]: "number",
81
+ ["boolean"]: "boolean",
82
+ ["ref"]: "ref",
83
+ ["did"]: "string",
84
+ ["dxn"]: "string",
85
+ ["email"]: "string",
86
+ ["formula"]: "string",
87
+ ["hostname"]: "string",
88
+ ["json"]: "string",
89
+ ["markdown"]: "string",
90
+ ["regex"]: "string",
91
+ ["url"]: "string",
92
+ ["uuid"]: "string",
93
+ ["single-select"]: "string",
94
+ ["text"]: "string",
95
+ ["multi-select"]: "object",
96
+ ["date"]: "string",
97
+ ["date-time"]: "string",
98
+ ["duration"]: "string",
99
+ ["time"]: "string",
100
+ ["currency"]: "number",
101
+ ["integer"]: "number",
102
+ ["percent"]: "number",
103
+ ["timestamp"]: "number",
104
+ ["lnglat"]: "array"
105
+ };
106
+ var OptionsAnnotationId = Symbol.for("@dxos/schema/annotation/Options");
107
+ var OptionsAnnotation = createAnnotationHelper(OptionsAnnotationId);
108
+ var getOptionsAnnotation = (node) => Function.pipe(SchemaAST.getAnnotation(OptionsAnnotationId)(node), Option.getOrUndefined);
109
+
110
+ // src/internal/formats/number.ts
111
+ import * as Schema from "effect/Schema";
112
+ var encodeMultipleOf = (divisor) => 1 / Math.pow(10, divisor);
113
+ var encodeMultiple = (divisor) => (self) => divisor === void 0 || divisor === 0 ? self : self.pipe(Schema.multipleOf(encodeMultipleOf(divisor)));
114
+ var DecimalPrecision = Schema.transform(Schema.Number, Schema.Number, {
115
+ strict: true,
116
+ encode: (value) => encodeMultipleOf(value),
117
+ decode: (value) => Math.log10(1 / value)
118
+ }).annotations({
119
+ title: "Number of digits"
120
+ });
121
+ var CurrencyAnnotationId = Symbol.for("@dxos/schema/annotation/Currency");
122
+ var Currency = ({ decimals, code } = {
123
+ decimals: 2
124
+ }) => Schema.Number.pipe(encodeMultiple(decimals), FormatAnnotation.set(TypeFormat.Currency), Schema.annotations({
125
+ title: "Currency",
126
+ description: "Currency value",
127
+ ...code ? {
128
+ [CurrencyAnnotationId]: code.toUpperCase()
129
+ } : {}
130
+ }));
131
+ var Integer = () => Schema.Number.pipe(Schema.int(), FormatAnnotation.set(TypeFormat.Integer), Schema.annotations({
132
+ title: "Integer",
133
+ description: "Integer value"
134
+ }));
135
+ var Percent = ({ decimals } = {
136
+ decimals: 2
137
+ }) => Schema.Number.pipe(encodeMultiple(decimals), FormatAnnotation.set(TypeFormat.Percent), Schema.annotations({
138
+ title: "Percent",
139
+ description: "Percentage value"
140
+ }));
141
+ var Timestamp = Schema.Number.pipe(FormatAnnotation.set(TypeFormat.Timestamp), Schema.annotations({
142
+ title: "Timestamp",
143
+ description: "Unix timestamp"
144
+ }));
145
+
146
+ // src/internal/formats/object.ts
147
+ import * as Schema2 from "effect/Schema";
148
+ import { clamp as clamp2 } from "@dxos/util";
149
+ var GeoPoint = Schema2.Tuple(Schema2.Number.pipe(Schema2.annotations({
150
+ title: "Longitude"
151
+ }), Schema2.clamp(-180, 180), Schema2.multipleOf(1e-6)), Schema2.Number.pipe(Schema2.annotations({
152
+ title: "Latitude"
153
+ }), Schema2.clamp(-90, 90), Schema2.multipleOf(1e-6)), Schema2.optionalElement(Schema2.Number).annotations({
154
+ title: "Height ASL (m)"
155
+ })).pipe(FormatAnnotation.set(TypeFormat.GeoPoint), Schema2.annotations({
156
+ title: "GeoPoint",
157
+ description: "GeoJSON Position"
158
+ }));
159
+ (function(GeoLocation2) {
160
+ GeoLocation2.toGeoPoint = ({ longitude, latitude, height }) => {
161
+ const clampedLongitude = clamp2(longitude, -180, 180);
162
+ const clampedLatitude = clamp2(latitude, -90, 90);
163
+ return height !== void 0 ? [
164
+ clampedLongitude,
165
+ clampedLatitude,
166
+ height
167
+ ] : [
168
+ clampedLongitude,
169
+ clampedLatitude
170
+ ];
171
+ };
172
+ GeoLocation2.fromGeoPoint = (geoPoint) => {
173
+ if (!geoPoint) {
174
+ return {
175
+ longitude: 0,
176
+ latitude: 0
177
+ };
178
+ }
179
+ const result = {
180
+ longitude: geoPoint[0],
181
+ latitude: geoPoint[1]
182
+ };
183
+ if (geoPoint[2] !== void 0) {
184
+ result.height = geoPoint[2];
185
+ }
186
+ return result;
187
+ };
188
+ })(GeoLocation || (GeoLocation = {}));
189
+ var GeoLocation;
190
+
191
+ // src/internal/formats/string.ts
192
+ import * as Schema3 from "effect/Schema";
193
+ import * as SchemaAST2 from "effect/SchemaAST";
194
+ var Email = Schema3.String.pipe(Schema3.pattern(/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/), FormatAnnotation.set(TypeFormat.Email), Schema3.annotations({
195
+ title: "Email",
196
+ description: "Email address"
197
+ }));
198
+ var Formula = Schema3.String.pipe(FormatAnnotation.set(TypeFormat.Formula));
199
+ var Hostname = Schema3.String.pipe(FormatAnnotation.set(TypeFormat.Hostname));
200
+ var JSON = Schema3.String.pipe(FormatAnnotation.set(TypeFormat.JSON));
201
+ var Markdown = Schema3.String.pipe(FormatAnnotation.set(TypeFormat.Markdown));
202
+ var Regex = Schema3.String.pipe(FormatAnnotation.set(TypeFormat.Regex));
203
+ var Text = Schema3.String.pipe(FormatAnnotation.set(TypeFormat.Text));
204
+ var URL = Schema3.String.pipe(Schema3.pattern(/^(\w+?:\/\/)?([\da-z.-]+)\.([a-z.]{2,6})([/\w .-]*)*\/?$/i), FormatAnnotation.set(TypeFormat.URL), Schema3.annotations({
205
+ title: "URL",
206
+ description: "URL"
207
+ }));
208
+ var UUID2 = Schema3.UUID.pipe(FormatAnnotation.set(TypeFormat.UUID), Schema3.annotations({
209
+ [SchemaAST2.ExamplesAnnotationId]: [
210
+ "3e4666bf-d5e5-4aa7-b8ce-cefe41c7568a"
211
+ ]
212
+ }));
213
+
214
+ // src/internal/formats/format.ts
215
+ import * as Schema5 from "effect/Schema";
216
+ import * as Keys from "@dxos/keys";
217
+
218
+ // src/internal/formats/date.ts
219
+ import * as Schema4 from "effect/Schema";
220
+ import * as SchemaAST3 from "effect/SchemaAST";
221
+ var SimpleDate = Schema4.Struct({
222
+ year: Schema4.Number.pipe(Schema4.between(1900, 9999)),
223
+ month: Schema4.Number.pipe(Schema4.between(1, 12)),
224
+ day: Schema4.Number.pipe(Schema4.between(1, 31))
225
+ });
226
+ var SimpleTime = Schema4.Struct({
227
+ hours: Schema4.Number.pipe(Schema4.between(0, 23)),
228
+ minutes: Schema4.Number.pipe(Schema4.between(0, 59)),
229
+ seconds: Schema4.Number.pipe(Schema4.between(0, 59))
230
+ });
231
+ var SimpleDateTime = Schema4.extend(SimpleDate, SimpleTime);
232
+ var DateOnly = (
233
+ /* Schema.transformOrFail(Schema.String, SimpleDate, {
234
+ strict: true,
235
+ decode: (str, _, ast) => {
236
+ if (!isValidDateFormat(str)) {
237
+ return ParseResult.fail(new ParseResult.Type(ast, str, 'Expected YYYY-MM-DD format'));
238
+ }
239
+ if (!isValidDate(str)) {
240
+ return ParseResult.fail(new ParseResult.Type(ast, str, 'Invalid date'));
241
+ }
242
+
243
+ const [year, month, day] = str.split('-').map(Number);
244
+ return ParseResult.succeed({ year, month, day });
245
+ },
246
+ encode: (date) => {
247
+ return ParseResult.succeed(
248
+ [
249
+ date.year.toString().padStart(4, '0'),
250
+ date.month.toString().padStart(2, '0'),
251
+ date.day.toString().padStart(2, '0'),
252
+ ].join('-'),
253
+ );
254
+ },
255
+ }) */
256
+ Schema4.String.pipe(FormatAnnotation.set(TypeFormat.Date), Schema4.annotations({
257
+ title: "Date",
258
+ description: "Valid date in ISO format"
259
+ }))
260
+ );
261
+ var TimeOnly = (
262
+ /* Schema.transformOrFail(Schema.String, SimpleTime, {
263
+ strict: true,
264
+ decode: (str, _, ast) => {
265
+ if (!isValidTimeFormat(str)) {
266
+ return ParseResult.fail(new ParseResult.Type(ast, str, 'Expected HH:mm:ss format'));
267
+ }
268
+
269
+ const [hours, minutes, seconds] = str.split(':').map(Number);
270
+ return ParseResult.succeed({ hours, minutes, seconds });
271
+ },
272
+ encode: (time) => {
273
+ return ParseResult.succeed(
274
+ [
275
+ time.hours.toString().padStart(2, '0'),
276
+ time.minutes.toString().padStart(2, '0'),
277
+ time.seconds.toString().padStart(2, '0'),
278
+ ].join(':'),
279
+ );
280
+ },
281
+ }) */
282
+ Schema4.String.pipe(FormatAnnotation.set(TypeFormat.Time), Schema4.annotations({
283
+ title: "Time",
284
+ description: "Valid time in ISO format"
285
+ }))
286
+ );
287
+ var DateTime = (
288
+ /* Schema.transformOrFail(Schema.String, SimpleDateTime, {
289
+ strict: false,
290
+ decode: (str, _, ast) => {
291
+ const [date, time] = str.split('T');
292
+ if (!isValidDateFormat(date)) {
293
+ return ParseResult.fail(new ParseResult.Type(ast, date, 'Expected YYYY-MM-DD format'));
294
+ }
295
+ if (!isValidDate(date)) {
296
+ return ParseResult.fail(new ParseResult.Type(ast, date, 'Invalid date'));
297
+ }
298
+ if (!isValidTimeFormat(time)) {
299
+ return ParseResult.fail(new ParseResult.Type(ast, str, 'Expected HH:mm:ss format'));
300
+ }
301
+
302
+ const [year, month, day] = date.split('-').map(Number);
303
+ const [hours, minutes, seconds] = time.split(':').map(Number);
304
+ return ParseResult.succeed({ year, month, day, hours, minutes, seconds });
305
+ },
306
+ encode: (datetime) => {
307
+ return ParseResult.succeed(
308
+ [
309
+ [
310
+ datetime.year.toString().padStart(4, '0'),
311
+ datetime.month.toString().padStart(2, '0'),
312
+ datetime.day.toString().padStart(2, '0'),
313
+ ].join('-'),
314
+ [
315
+ datetime.hours.toString().padStart(2, '0'),
316
+ datetime.minutes.toString().padStart(2, '0'),
317
+ datetime.seconds.toString().padStart(2, '0'),
318
+ ].join(':'),
319
+ ].join('T'),
320
+ );
321
+ },
322
+ }) */
323
+ Schema4.String.pipe(FormatAnnotation.set(TypeFormat.DateTime), Schema4.annotations({
324
+ title: "DateTime",
325
+ description: "Valid date and time in ISO format"
326
+ }))
327
+ );
328
+ var Duration = Schema4.String.pipe(FormatAnnotation.set(TypeFormat.Duration), Schema4.annotations({
329
+ title: "Duration",
330
+ description: "Duration in ISO 8601 format",
331
+ [SchemaAST3.ExamplesAnnotationId]: [
332
+ "1h",
333
+ "3D"
334
+ ]
335
+ }));
336
+
337
+ // src/internal/formats/format.ts
338
+ (function(Format2) {
339
+ Format2.TypeFormat = TypeFormat;
340
+ Format2.DXN = Keys.DXN.Schema;
341
+ Format2.Email = Email;
342
+ Format2.Formula = Formula;
343
+ Format2.Hostname = Hostname;
344
+ Format2.JSON = JSON;
345
+ Format2.Markdown = Markdown;
346
+ Format2.Regex = Regex;
347
+ Format2.URL = URL;
348
+ Format2.UUID = Schema5.UUID;
349
+ Format2.Currency = Currency;
350
+ Format2.Integer = Integer;
351
+ Format2.Percent = Percent;
352
+ Format2.Timestamp = Timestamp;
353
+ Format2.Date = DateOnly;
354
+ Format2.DateTime = DateTime;
355
+ Format2.Duration = Duration;
356
+ Format2.Time = TimeOnly;
357
+ Format2.GeoPoint = GeoPoint;
358
+ })(Format || (Format = {}));
359
+ var Format;
360
+
361
+ // src/internal/formats/select.ts
362
+ import * as Schema6 from "effect/Schema";
363
+ var SelectOption = Schema6.Struct({
364
+ /** Stable identifier for the option. */
365
+ id: Schema6.NonEmptyString,
366
+ title: Schema6.String,
367
+ /** Color palette used for visual styling. */
368
+ color: Schema6.String
369
+ });
370
+
371
+ export {
372
+ TypeEnum,
373
+ getTypeEnum,
374
+ FormatAnnotationId,
375
+ FormatAnnotation,
376
+ getFormatAnnotation,
377
+ TypeFormat,
378
+ FormatEnums,
379
+ PropertyKind,
380
+ typeToFormat,
381
+ formatToType,
382
+ OptionsAnnotationId,
383
+ OptionsAnnotation,
384
+ getOptionsAnnotation,
385
+ DecimalPrecision,
386
+ CurrencyAnnotationId,
387
+ Currency,
388
+ GeoPoint,
389
+ GeoLocation,
390
+ Email,
391
+ Formula,
392
+ Hostname,
393
+ JSON,
394
+ Markdown,
395
+ Regex,
396
+ Text,
397
+ URL,
398
+ UUID2 as UUID,
399
+ Format,
400
+ SelectOption
401
+ };
402
+ //# sourceMappingURL=chunk-62DWJ6CE.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/internal/formats/types.ts", "../../../src/internal/formats/number.ts", "../../../src/internal/formats/object.ts", "../../../src/internal/formats/string.ts", "../../../src/internal/formats/format.ts", "../../../src/internal/formats/date.ts", "../../../src/internal/formats/select.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Function from 'effect/Function';\nimport type * as JSONSchema from 'effect/JSONSchema';\nimport * as Option from 'effect/Option';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { createAnnotationHelper } from '../annotations';\nimport { type JsonSchemaType } from '../json-schema';\n\n// TODO(burdon): Rename PropertyType.\nexport type ScalarType =\n | JSONSchema.JsonSchema7Object\n | JSONSchema.JsonSchema7String\n | JSONSchema.JsonSchema7Number\n | JSONSchema.JsonSchema7Boolean\n | JSONSchema.JsonSchema7Ref;\n\n// TODO(burdon): Rename ValueType and change to disciminated union.\n// export type ValueType = 'array' | 'object' | 'string' | 'number' | 'boolean' | 'ref';\nexport enum TypeEnum {\n Array = 'array', // TODO(burdon): Remove?\n Object = 'object',\n String = 'string',\n Number = 'number',\n Boolean = 'boolean',\n Ref = 'ref',\n}\n\n// TODO(burdon): Ref?\nexport const getTypeEnum = (property: JsonSchemaType): TypeEnum | undefined => {\n switch (property.type) {\n case 'array':\n return TypeEnum.Array;\n case 'object':\n return TypeEnum.Object;\n case 'string':\n return TypeEnum.String;\n case 'number':\n return TypeEnum.Number;\n case 'boolean':\n return TypeEnum.Boolean;\n default:\n return undefined;\n }\n};\n\n/**\n * https://json-schema.org/understanding-json-schema/reference/schema\n * https://json-schema.org/understanding-json-schema/reference/string#built-in-formats\n */\nexport const FormatAnnotationId = Symbol.for('@dxos/schema/annotation/Format');\n\nexport const FormatAnnotation = createAnnotationHelper<TypeFormat>(FormatAnnotationId);\n\n/** @deprecated */\nexport const getFormatAnnotation = (node: SchemaAST.AST): TypeFormat | undefined =>\n Function.pipe(SchemaAST.getAnnotation<TypeFormat>(FormatAnnotationId)(node), Option.getOrUndefined);\n\n// TODO(burdon): Rename Format; Change to discriminated union?\nexport enum TypeFormat {\n None = 'none',\n\n //\n // Scalar\n //\n\n String = 'string',\n Number = 'number',\n Boolean = 'boolean',\n Ref = 'ref',\n\n //\n // { type: 'string' }\n //\n\n DID = 'did', // Users, etc.\n DXN = 'dxn',\n Email = 'email',\n Formula = 'formula', // Spreadsheet formula.\n Hostname = 'hostname',\n JSON = 'json',\n Markdown = 'markdown',\n Regex = 'regex',\n SingleSelect = 'single-select',\n Text = 'text',\n MultiSelect = 'multi-select',\n URL = 'url',\n UUID = 'uuid',\n\n //\n // { type: 'number' }\n //\n\n Currency = 'currency',\n Integer = 'integer',\n Percent = 'percent',\n Timestamp = 'timestamp',\n\n //\n // { type: 'date' }\n //\n\n DateTime = 'date-time',\n Date = 'date',\n Time = 'time',\n Duration = 'duration',\n\n //\n // { type: 'object' }\n //\n\n GeoPoint = 'lnglat',\n}\n\nexport const FormatEnums = Object.values(TypeFormat).sort();\n\nexport const PropertyKind = {\n type: TypeEnum,\n format: TypeFormat,\n};\n\n/**\n * Default formats\n */\nexport const typeToFormat: Partial<Record<TypeEnum, TypeFormat>> = {\n [TypeEnum.String]: TypeFormat.String,\n [TypeEnum.Number]: TypeFormat.Number,\n [TypeEnum.Boolean]: TypeFormat.Boolean,\n};\n\n/**\n * Map of format to type.\n */\nexport const formatToType: Record<TypeFormat, TypeEnum> = {\n [TypeFormat.None]: undefined as any,\n [TypeFormat.String]: TypeEnum.String,\n [TypeFormat.Number]: TypeEnum.Number,\n [TypeFormat.Boolean]: TypeEnum.Boolean,\n [TypeFormat.Ref]: TypeEnum.Ref,\n\n // Strings\n [TypeFormat.DID]: TypeEnum.String,\n [TypeFormat.DXN]: TypeEnum.String,\n [TypeFormat.Email]: TypeEnum.String,\n [TypeFormat.Formula]: TypeEnum.String,\n [TypeFormat.Hostname]: TypeEnum.String,\n [TypeFormat.JSON]: TypeEnum.String,\n [TypeFormat.Markdown]: TypeEnum.String,\n [TypeFormat.Regex]: TypeEnum.String,\n [TypeFormat.URL]: TypeEnum.String,\n [TypeFormat.UUID]: TypeEnum.String,\n [TypeFormat.SingleSelect]: TypeEnum.String,\n [TypeFormat.Text]: TypeEnum.String,\n [TypeFormat.MultiSelect]: TypeEnum.Object,\n\n // Dates\n [TypeFormat.Date]: TypeEnum.String,\n [TypeFormat.DateTime]: TypeEnum.String,\n [TypeFormat.Duration]: TypeEnum.String,\n [TypeFormat.Time]: TypeEnum.String,\n\n // Numbers\n [TypeFormat.Currency]: TypeEnum.Number,\n [TypeFormat.Integer]: TypeEnum.Number,\n [TypeFormat.Percent]: TypeEnum.Number,\n [TypeFormat.Timestamp]: TypeEnum.Number,\n\n // Objects\n [TypeFormat.GeoPoint]: TypeEnum.Array,\n};\n\n/**\n * Allowed value options for select.\n */\nexport const OptionsAnnotationId = Symbol.for('@dxos/schema/annotation/Options');\n\n// TODO(wittjosiah): Reconcile with `SelectOption`.\nexport type Options = string | number;\nexport const OptionsAnnotation = createAnnotationHelper<Options[]>(OptionsAnnotationId);\n\n/** @deprecated */\nexport const getOptionsAnnotation = (node: SchemaAST.AST): Options[] | undefined =>\n Function.pipe(SchemaAST.getAnnotation<Options[]>(OptionsAnnotationId)(node), Option.getOrUndefined);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { FormatAnnotation, TypeFormat } from './types';\n\nconst encodeMultipleOf = (divisor: number) => 1 / Math.pow(10, divisor);\n\nconst encodeMultiple =\n <A extends number>(divisor?: number) =>\n <I, R>(self: Schema.Schema<A, I, R>) =>\n divisor === undefined || divisor === 0 ? self : self.pipe(Schema.multipleOf(encodeMultipleOf(divisor)));\n\n/**\n * Convert number of digits to multipleOf annotation.\n */\nexport const DecimalPrecision = Schema.transform(Schema.Number, Schema.Number, {\n strict: true,\n encode: (value) => encodeMultipleOf(value),\n decode: (value) => Math.log10(1 / value),\n}).annotations({\n title: 'Number of digits',\n});\n\nexport const CurrencyAnnotationId = Symbol.for('@dxos/schema/annotation/Currency');\n\nexport type CurrencyAnnotation = {\n decimals?: number;\n code?: string;\n};\n\n/**\n * ISO 4217 currency code.\n */\nexport const Currency = ({ decimals, code }: CurrencyAnnotation = { decimals: 2 }) =>\n Schema.Number.pipe(\n encodeMultiple(decimals),\n FormatAnnotation.set(TypeFormat.Currency),\n Schema.annotations({\n title: 'Currency',\n description: 'Currency value',\n ...(code ? { [CurrencyAnnotationId]: code.toUpperCase() } : {}),\n }),\n );\n\nexport type PercentAnnotation = {\n decimals?: number;\n};\n\n/**\n * Integer.\n */\nexport const Integer = () =>\n Schema.Number.pipe(\n Schema.int(),\n FormatAnnotation.set(TypeFormat.Integer),\n Schema.annotations({\n title: 'Integer',\n description: 'Integer value',\n }),\n );\n\n/**\n * Percent.\n */\n// TODO(burdon): Define min/max (e.g., 0, 1).\nexport const Percent = ({ decimals }: PercentAnnotation = { decimals: 2 }) =>\n Schema.Number.pipe(\n encodeMultiple(decimals),\n FormatAnnotation.set(TypeFormat.Percent),\n Schema.annotations({\n title: 'Percent',\n description: 'Percentage value',\n }),\n );\n\n/**\n * Unix timestamp.\n * https://en.wikipedia.org/wiki/Unix_time\n */\nexport const Timestamp = Schema.Number.pipe(\n FormatAnnotation.set(TypeFormat.Timestamp),\n Schema.annotations({\n title: 'Timestamp',\n description: 'Unix timestamp',\n }),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { clamp } from '@dxos/util';\n\nimport { FormatAnnotation, TypeFormat } from './types';\n\n/**\n * GeoJSON Format\n * https://datatracker.ietf.org/doc/html/rfc7946\n * https://datatracker.ietf.org/doc/html/rfc7946#section-3.1.1\n * https://en.wikipedia.org/wiki/Geographic_coordinate_system\n * https://geojson.org\n * {\n * \"type\": \"Point\",\n * \"coordinates\": [0, 51.47] // [longitude, latitude]\n * }\n * Note: optional third element for altitude.\n */\nexport const GeoPoint = Schema.Tuple(\n Schema.Number.pipe(Schema.annotations({ title: 'Longitude' }), Schema.clamp(-180, 180), Schema.multipleOf(0.000001)),\n Schema.Number.pipe(Schema.annotations({ title: 'Latitude' }), Schema.clamp(-90, 90), Schema.multipleOf(0.000001)),\n Schema.optionalElement(Schema.Number).annotations({\n title: 'Height ASL (m)',\n }),\n).pipe(\n FormatAnnotation.set(TypeFormat.GeoPoint),\n Schema.annotations({\n title: 'GeoPoint',\n description: 'GeoJSON Position',\n }),\n);\n\nexport type GeoPoint = Schema.Schema.Type<typeof GeoPoint>;\n\nexport type GeoLocation = {\n longitude: number;\n latitude: number;\n height?: number;\n};\n\n/**\n * Geolocation utilities for working with GeoPoint format.\n */\nexport namespace GeoLocation {\n /**\n * Convert latitude and longitude to GeoPoint (GeoJSON format [longitude, latitude, height?]).\n * Clamps values to valid ranges: latitude [-90, 90], longitude [-180, 180].\n */\n export const toGeoPoint = ({ longitude, latitude, height }: GeoLocation): GeoPoint => {\n // TODO(ZaymonFC): Use schema validation instead of doing this manually.\n const clampedLongitude = clamp(longitude, -180, 180);\n const clampedLatitude = clamp(latitude, -90, 90);\n return height !== undefined ? [clampedLongitude, clampedLatitude, height] : [clampedLongitude, clampedLatitude];\n };\n\n /**\n * Extract latitude and longitude from GeoPoint (GeoJSON format [longitude, latitude, height?]).\n */\n export const fromGeoPoint = (geoPoint: GeoPoint | undefined): GeoLocation => {\n if (!geoPoint) {\n return { longitude: 0, latitude: 0 };\n }\n\n const result: GeoLocation = {\n longitude: geoPoint[0],\n latitude: geoPoint[1],\n };\n\n // Add height if defined.\n if (geoPoint[2] !== undefined) {\n result.height = geoPoint[2];\n }\n\n return result;\n };\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { FormatAnnotation, TypeFormat } from './types';\n\n/**\n * Email address (RFC 5321)\n * https://datatracker.ietf.org/doc/html/rfc5321#section-4.1.2\n */\nexport const Email = Schema.String.pipe(\n Schema.pattern(/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/),\n FormatAnnotation.set(TypeFormat.Email),\n Schema.annotations({\n title: 'Email',\n description: 'Email address',\n }),\n);\n\n/**\n *\n */\n// TODO(burdon): Implement.\nexport const Formula = Schema.String.pipe(FormatAnnotation.set(TypeFormat.Formula));\n\n/**\n *\n */\n// TODO(burdon): Implement.\nexport const Hostname = Schema.String.pipe(FormatAnnotation.set(TypeFormat.Hostname));\n\n/**\n *\n */\n// TODO(burdon): Implement.\nexport const JSON = Schema.String.pipe(FormatAnnotation.set(TypeFormat.JSON));\n\n/**\n *\n */\n// TODO(burdon): Implement.\nexport const Markdown = Schema.String.pipe(FormatAnnotation.set(TypeFormat.Markdown));\n\n/**\n * Regex\n * https://json-schema.org/understanding-json-schema/reference/regular_expressions\n * https://ecma-international.org/publications-and-standards/standards/ecma-262\n */\n// TODO(burdon): Implement.\nexport const Regex = Schema.String.pipe(FormatAnnotation.set(TypeFormat.Regex));\n\n/**\n * Multi-line text.\n */\nexport const Text = Schema.String.pipe(FormatAnnotation.set(TypeFormat.Text));\n\n/**\n * https://datatracker.ietf.org/doc/html/rfc3986#section-1.1.3\n */\nexport const URL = Schema.String.pipe(\n Schema.pattern(/^(\\w+?:\\/\\/)?([\\da-z.-]+)\\.([a-z.]{2,6})([/\\w .-]*)*\\/?$/i),\n FormatAnnotation.set(TypeFormat.URL),\n Schema.annotations({\n title: 'URL',\n description: 'URL',\n }),\n);\n\n/**\n * UUID (RFC 4122)\n * https://datatracker.ietf.org/doc/html/rfc4122\n */\nexport const UUID = Schema.UUID.pipe(\n FormatAnnotation.set(TypeFormat.UUID),\n Schema.annotations({\n [SchemaAST.ExamplesAnnotationId]: ['3e4666bf-d5e5-4aa7-b8ce-cefe41c7568a'],\n }),\n);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport * as Keys from '@dxos/keys';\n\nimport * as DateUtil from './date';\nimport * as NumberUtil from './number';\nimport * as ObjectUtil from './object';\nimport * as StringUtil from './string';\nimport { TypeFormat as TypeFormat$ } from './types';\n\n// TODO(burdon): Media encoding.\n// - https://json-schema.org/understanding-json-schema/reference/non_json_data\n\n/**\n * Formats.\n * https://json-schema.org/understanding-json-schema/reference/string#built-in-formats\n * NOTE: A JSON Schema validator will ignore any format type that it does not understand.\n */\n// TODO(burdon): Add fields for `examples`, `message`, etc.\nexport namespace Format {\n export import TypeFormat = TypeFormat$;\n\n // String\n export const DXN = Keys.DXN.Schema;\n export const Email = StringUtil.Email;\n export const Formula = StringUtil.Formula;\n export const Hostname = StringUtil.Hostname;\n export const JSON = StringUtil.JSON;\n export const Markdown = StringUtil.Markdown;\n export const Regex = StringUtil.Regex;\n export const URL = StringUtil.URL;\n export const UUID = Schema.UUID;\n\n // Numbers\n // TODO(burdon): BigInt.\n export const Currency = NumberUtil.Currency;\n export const Integer = NumberUtil.Integer;\n export const Percent = NumberUtil.Percent;\n export const Timestamp = NumberUtil.Timestamp;\n\n // Dates and times\n export const Date = DateUtil.DateOnly;\n export const DateTime = DateUtil.DateTime;\n export const Duration = DateUtil.Duration;\n export const Time = DateUtil.TimeOnly;\n\n // Objects\n export const GeoPoint = ObjectUtil.GeoPoint;\n export type GeoPoint = ObjectUtil.GeoPoint; // TODO(burdon): Export types.\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { FormatAnnotation, TypeFormat } from './types';\n\n/**\n * Datetime values should be stored as ISO strings or unix numbers (ms) in UTC.\n *\n * NOTE: HyperFormula uses Excel's time format (null date 1900/01/01)\n * It can be configured to use a different parser via `parseDateTime`.\n * https://hyperformula.handsontable.com/guide/date-and-time-handling.html#date-and-time-handling\n * https://github.com/handsontable/hyperformula/blob/master/src/DateTimeHelper.ts\n */\n\n// TODO(burdon): Annotations not present in JSON.\n// TODO(burdon): Timezone.\n// TODO(burdon): Format for timestamp (Unix UTC or ISO 8601)?\n// TODO(burdon): Refs\n// - https://www.npmjs.com/package/numfmt\n// - https://date-fns.org/docs/Getting-Started\n// - https://github.com/date-fns/tz\n\n/**\n * Simple date compatible with HF.\n */\nexport const SimpleDate = Schema.Struct({\n year: Schema.Number.pipe(Schema.between(1900, 9999)),\n month: Schema.Number.pipe(Schema.between(1, 12)),\n day: Schema.Number.pipe(Schema.between(1, 31)),\n});\n\nexport type SimpleDate = Schema.Schema.Type<typeof SimpleDate>;\n\nexport const toSimpleDate = (date: Date): SimpleDate => ({\n year: date.getUTCFullYear(),\n month: date.getUTCMonth() + 1,\n day: date.getUTCDate(),\n});\n\n/**\n * Simple time compatible with HF.\n */\nexport const SimpleTime = Schema.Struct({\n hours: Schema.Number.pipe(Schema.between(0, 23)),\n minutes: Schema.Number.pipe(Schema.between(0, 59)),\n seconds: Schema.Number.pipe(Schema.between(0, 59)),\n});\n\nexport type SimpleTime = Schema.Schema.Type<typeof SimpleTime>;\n\nexport const toSimpleTime = (date: Date): SimpleTime => ({\n hours: date.getUTCHours(),\n minutes: date.getUTCSeconds(),\n seconds: date.getUTCSeconds(),\n});\n\n/**\n * Simple date-time compatible with HF.\n */\nexport const SimpleDateTime = Schema.extend(SimpleDate, SimpleTime);\n\nexport type SimpleDateTime = Schema.Schema.Type<typeof SimpleDateTime>;\n\nexport const toSimpleDateTime = (date: Date): SimpleDateTime => ({\n ...toSimpleDate(date),\n ...toSimpleTime(date),\n});\n\n/**\n * https://effect.website/docs/guides/schema/transformations#date-transformations\n */\n\n// TODO(burdon): Consider if transformations should be supported with Automerge.\n\n/**\n * Format: 2018-11-13\n */\nexport const DateOnly = /* Schema.transformOrFail(Schema.String, SimpleDate, {\n strict: true,\n decode: (str, _, ast) => {\n if (!isValidDateFormat(str)) {\n return ParseResult.fail(new ParseResult.Type(ast, str, 'Expected YYYY-MM-DD format'));\n }\n if (!isValidDate(str)) {\n return ParseResult.fail(new ParseResult.Type(ast, str, 'Invalid date'));\n }\n\n const [year, month, day] = str.split('-').map(Number);\n return ParseResult.succeed({ year, month, day });\n },\n encode: (date) => {\n return ParseResult.succeed(\n [\n date.year.toString().padStart(4, '0'),\n date.month.toString().padStart(2, '0'),\n date.day.toString().padStart(2, '0'),\n ].join('-'),\n );\n },\n}) */ Schema.String.pipe(\n FormatAnnotation.set(TypeFormat.Date),\n Schema.annotations({\n title: 'Date',\n description: 'Valid date in ISO format',\n }),\n);\n\n/**\n * Format: 20:20:39+00:00\n */\nexport const TimeOnly = /* Schema.transformOrFail(Schema.String, SimpleTime, {\n strict: true,\n decode: (str, _, ast) => {\n if (!isValidTimeFormat(str)) {\n return ParseResult.fail(new ParseResult.Type(ast, str, 'Expected HH:mm:ss format'));\n }\n\n const [hours, minutes, seconds] = str.split(':').map(Number);\n return ParseResult.succeed({ hours, minutes, seconds });\n },\n encode: (time) => {\n return ParseResult.succeed(\n [\n time.hours.toString().padStart(2, '0'),\n time.minutes.toString().padStart(2, '0'),\n time.seconds.toString().padStart(2, '0'),\n ].join(':'),\n );\n },\n}) */ Schema.String.pipe(\n FormatAnnotation.set(TypeFormat.Time),\n Schema.annotations({\n title: 'Time',\n description: 'Valid time in ISO format',\n }),\n);\n\n/**\n * Format: 2018-11-13T20:20:39+00:00\n */\nexport const DateTime = /* Schema.transformOrFail(Schema.String, SimpleDateTime, {\n strict: false,\n decode: (str, _, ast) => {\n const [date, time] = str.split('T');\n if (!isValidDateFormat(date)) {\n return ParseResult.fail(new ParseResult.Type(ast, date, 'Expected YYYY-MM-DD format'));\n }\n if (!isValidDate(date)) {\n return ParseResult.fail(new ParseResult.Type(ast, date, 'Invalid date'));\n }\n if (!isValidTimeFormat(time)) {\n return ParseResult.fail(new ParseResult.Type(ast, str, 'Expected HH:mm:ss format'));\n }\n\n const [year, month, day] = date.split('-').map(Number);\n const [hours, minutes, seconds] = time.split(':').map(Number);\n return ParseResult.succeed({ year, month, day, hours, minutes, seconds });\n },\n encode: (datetime) => {\n return ParseResult.succeed(\n [\n [\n datetime.year.toString().padStart(4, '0'),\n datetime.month.toString().padStart(2, '0'),\n datetime.day.toString().padStart(2, '0'),\n ].join('-'),\n [\n datetime.hours.toString().padStart(2, '0'),\n datetime.minutes.toString().padStart(2, '0'),\n datetime.seconds.toString().padStart(2, '0'),\n ].join(':'),\n ].join('T'),\n );\n },\n}) */ Schema.String.pipe(\n FormatAnnotation.set(TypeFormat.DateTime),\n Schema.annotations({\n title: 'DateTime',\n description: 'Valid date and time in ISO format',\n }),\n);\n\n/**\n * https://datatracker.ietf.org/doc/html/rfc3339#appendix-A\n */\n// TODO(burdon): Define duration type.\nexport const Duration = Schema.String.pipe(\n FormatAnnotation.set(TypeFormat.Duration),\n Schema.annotations({\n title: 'Duration',\n description: 'Duration in ISO 8601 format',\n [SchemaAST.ExamplesAnnotationId]: ['1h', '3D'],\n }),\n);\n\n//\n// Utils\n//\n\n// YYYY-MM-DD\nconst DATE_REGEX = /^\\d{4}-\\d{2}-\\d{2}$/;\n\nconst _isValidDateFormat = (str: string) => DATE_REGEX.test(str);\n\nconst _isValidDate = (str: string) => {\n const date = new Date(str);\n return !isNaN(date.getTime()) && date.toISOString().startsWith(str);\n};\n\n// HH:mm:ss\nconst TIME_REGEX = /^([01]\\d|2[0-3]):([0-5]\\d):([0-5]\\d)$/;\n\nconst _isValidTimeFormat = (str: string) => TIME_REGEX.test(str);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\n/**\n * Schema for a single select option. Used to define choices in a {single|multi}-select field.\n */\nexport const SelectOption = Schema.Struct({\n /** Stable identifier for the option. */\n id: Schema.NonEmptyString,\n title: Schema.String,\n /** Color palette used for visual styling. */\n color: Schema.String,\n});\n\nexport type SelectOption = Schema.Schema.Type<typeof SelectOption>;\n"],
5
+ "mappings": "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",
6
+ "names": ["Function", "Option", "SchemaAST", "TypeEnum", "getTypeEnum", "property", "type", "undefined", "FormatAnnotationId", "Symbol", "for", "FormatAnnotation", "createAnnotationHelper", "getFormatAnnotation", "node", "pipe", "getAnnotation", "getOrUndefined", "TypeFormat", "FormatEnums", "Object", "values", "sort", "PropertyKind", "format", "typeToFormat", "formatToType", "OptionsAnnotationId", "OptionsAnnotation", "getOptionsAnnotation", "Schema", "encodeMultipleOf", "divisor", "Math", "pow", "encodeMultiple", "self", "undefined", "pipe", "multipleOf", "DecimalPrecision", "transform", "Number", "strict", "encode", "value", "decode", "log10", "annotations", "title", "CurrencyAnnotationId", "Symbol", "for", "Currency", "decimals", "code", "FormatAnnotation", "set", "TypeFormat", "description", "toUpperCase", "Integer", "int", "Percent", "Timestamp", "Schema", "clamp", "GeoPoint", "Tuple", "Number", "pipe", "annotations", "title", "clamp", "multipleOf", "optionalElement", "FormatAnnotation", "set", "TypeFormat", "description", "GeoLocation", "toGeoPoint", "longitude", "latitude", "height", "clampedLongitude", "clampedLatitude", "undefined", "fromGeoPoint", "geoPoint", "result", "Schema", "SchemaAST", "Email", "String", "pipe", "pattern", "FormatAnnotation", "set", "TypeFormat", "annotations", "title", "description", "Formula", "Hostname", "JSON", "Markdown", "Regex", "Text", "URL", "UUID", "ExamplesAnnotationId", "Schema", "Keys", "Schema", "SchemaAST", "SimpleDate", "Struct", "year", "Number", "pipe", "between", "month", "day", "SimpleTime", "Struct", "hours", "Number", "pipe", "between", "minutes", "seconds", "SimpleDateTime", "extend", "SimpleDate", "SimpleTime", "DateOnly", "String", "pipe", "FormatAnnotation", "set", "TypeFormat", "Date", "annotations", "title", "description", "TimeOnly", "Time", "DateTime", "Duration", "ExamplesAnnotationId", "Format", "TypeFormat", "DXN", "Schema", "Email", "Formula", "Hostname", "JSON", "Markdown", "Regex", "URL", "UUID", "Currency", "Integer", "Percent", "Timestamp", "Date", "DateOnly", "DateTime", "Duration", "Time", "TimeOnly", "GeoPoint", "Schema", "SelectOption", "Struct", "id", "NonEmptyString", "title", "String", "color"]
7
+ }
@@ -0,0 +1,97 @@
1
+ import {
2
+ addTag,
3
+ change,
4
+ getDXN,
5
+ getDatabase,
6
+ getDescription,
7
+ getKeys,
8
+ getLabel,
9
+ getMetaChecked,
10
+ isDeleted,
11
+ objectToJSON,
12
+ removeTag,
13
+ subscribe
14
+ } from "./chunk-SU2LVM7J.mjs";
15
+ import {
16
+ getEntityKind,
17
+ getTypeDXN,
18
+ getTypename
19
+ } from "./chunk-CUDIBUM4.mjs";
20
+ import {
21
+ EntityKind,
22
+ EntityKindSchema,
23
+ KindId,
24
+ SnapshotKindId
25
+ } from "./chunk-YQYMWZAD.mjs";
26
+ import {
27
+ __export
28
+ } from "./chunk-J5LGTIGS.mjs";
29
+
30
+ // src/Entity.ts
31
+ var Entity_exports = {};
32
+ __export(Entity_exports, {
33
+ Kind: () => Kind,
34
+ KindId: () => KindId,
35
+ KindSchema: () => KindSchema,
36
+ SnapshotKindId: () => SnapshotKindId,
37
+ addTag: () => addTag2,
38
+ change: () => change2,
39
+ getDXN: () => getDXN2,
40
+ getDatabase: () => getDatabase2,
41
+ getDescription: () => getDescription2,
42
+ getKeys: () => getKeys2,
43
+ getKind: () => getKind,
44
+ getLabel: () => getLabel2,
45
+ getMeta: () => getMeta,
46
+ getTypeDXN: () => getTypeDXN2,
47
+ getTypename: () => getTypename2,
48
+ isDeleted: () => isDeleted2,
49
+ removeTag: () => removeTag2,
50
+ subscribe: () => subscribe2,
51
+ toJSON: () => toJSON
52
+ });
53
+ var Kind = EntityKind;
54
+ var KindSchema = EntityKindSchema;
55
+ var getKind = getEntityKind;
56
+ var getDXN2 = (entity) => getDXN(entity);
57
+ var getTypeDXN2 = getTypeDXN;
58
+ var getTypename2 = (entity) => getTypename(entity);
59
+ var getDatabase2 = (entity) => getDatabase(entity);
60
+ function getMeta(entity) {
61
+ return getMetaChecked(entity);
62
+ }
63
+ var getKeys2 = (entity, source) => getKeys(entity, source);
64
+ var isDeleted2 = (entity) => isDeleted(entity);
65
+ var getLabel2 = (entity) => getLabel(entity);
66
+ var getDescription2 = (entity) => getDescription(entity);
67
+ var toJSON = (entity) => objectToJSON(entity);
68
+ var subscribe2 = (entity, callback) => {
69
+ return subscribe(entity, callback);
70
+ };
71
+ var change2 = (entity, callback) => {
72
+ change(entity, callback);
73
+ };
74
+ var addTag2 = (entity, tag) => addTag(entity, tag);
75
+ var removeTag2 = (entity, tag) => removeTag(entity, tag);
76
+
77
+ export {
78
+ Kind,
79
+ KindSchema,
80
+ getKind,
81
+ getDXN2 as getDXN,
82
+ getTypeDXN2 as getTypeDXN,
83
+ getTypename2 as getTypename,
84
+ getDatabase2 as getDatabase,
85
+ getMeta,
86
+ getKeys2 as getKeys,
87
+ isDeleted2 as isDeleted,
88
+ getLabel2 as getLabel,
89
+ getDescription2 as getDescription,
90
+ toJSON,
91
+ subscribe2 as subscribe,
92
+ change2 as change,
93
+ addTag2 as addTag,
94
+ removeTag2 as removeTag,
95
+ Entity_exports
96
+ };
97
+ //# sourceMappingURL=chunk-6QPSGMEF.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/Entity.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport type { ForeignKey } from '@dxos/echo-protocol';\nimport type { DXN, ObjectId } from '@dxos/keys';\n\nimport {\n type ChangeCallback,\n EntityKind,\n EntityKindSchema,\n KindId,\n type Mutable,\n type ObjectJSON,\n type ObjectMeta,\n type ReadonlyMeta,\n SnapshotKindId,\n addTag as addTag$,\n change as change$,\n getDXN as getDXN$,\n getDatabase as getDatabase$,\n getDescription as getDescription$,\n getEntityKind,\n getKeys as getKeys$,\n getLabel as getLabel$,\n getMetaChecked as getMeta$,\n getTypeDXN as getTypeDXN$,\n getTypename as getTypename$,\n isDeleted as isDeleted$,\n removeTag as removeTag$,\n subscribe as subscribe$,\n objectToJSON as toJSON$,\n} from './internal';\n\n// Re-export KindId and SnapshotKindId from internal.\nexport { KindId, SnapshotKindId };\n\n// NOTE: Relation does not extend Obj so that, for example, we can prevent Relations from being used as source and target objects.\n// However, we generally refer to Obj and Relation instances as \"objects\",\n// and many API methods accept both Obj.Unknown and Relation.Unknown (i.e., Entity.Unknown) instances.\n\nexport const Kind = EntityKind;\nexport type Kind = EntityKind;\nexport const KindSchema = EntityKindSchema;\n\n/**\n * Assigns a kind to an Object or Relation instance.\n * NOTE: Needed to make `isRelation` and `isObject` checks work.\n */\nexport interface OfKind<K extends Kind> {\n readonly [KindId]: K;\n readonly id: ObjectId;\n}\n\n/**\n * Assigns a snapshot kind to an Object or Relation snapshot.\n */\nexport interface SnapshotOfKind<K extends Kind> {\n readonly [SnapshotKindId]: K;\n readonly id: ObjectId;\n}\n\n/**\n * Obj or Relation with a specific set of properties.\n */\nexport type Entity<Props> = OfKind<Kind> & Props;\n\n/**\n * Unknown Obj or Relation (reactive).\n */\nexport interface Unknown extends OfKind<Kind> {}\n\n/**\n * Snapshot of an Obj or Relation.\n * Branded with SnapshotKindId instead of KindId.\n */\nexport interface Snapshot extends SnapshotOfKind<Kind> {}\n\n/**\n * Object with arbitrary properties.\n *\n * NOTE: Due to how typescript works, this type is not assignable to a specific schema type.\n * In that case, use `Obj.instanceOf` to check if an object is of a specific type.\n *\n * This type is very permissive and allows accessing any property on the object.\n * We should move to Obj.Unknown that is not permissive and requires explicit instanceof checks..\n */\nexport interface Any extends OfKind<Kind> {\n [key: string]: unknown;\n}\n\nexport const getKind = getEntityKind;\n\n//\n// Entity-level functions that work on any entity (object or relation).\n// Use these when you don't know or care about the specific entity kind.\n// For kind-specific functions, use Obj.* or Relation.*.\n//\n\n/**\n * JSON representation of an entity.\n */\nexport type JSON = ObjectJSON;\n\n/**\n * Get the DXN of an entity (object or relation).\n */\nexport const getDXN = (entity: Unknown | Snapshot): DXN => getDXN$(entity);\n\n/**\n * Get the DXN of an entity's type.\n */\nexport const getTypeDXN = getTypeDXN$;\n\n/**\n * Get the typename of an entity's type.\n */\nexport const getTypename = (entity: Unknown | Snapshot): string | undefined => getTypename$(entity);\n\n/**\n * Get the database an entity belongs to.\n */\nexport const getDatabase = (entity: Unknown | Snapshot): any | undefined => getDatabase$(entity);\n\n/**\n * Get the metadata for an entity.\n * Returns mutable meta when passed a mutable entity (inside change callback).\n * Returns read-only meta when passed a regular entity or snapshot.\n */\n// TODO(wittjosiah): When passed a Snapshot, should return a snapshot of meta, not the live meta proxy.\nexport function getMeta(entity: Mutable<Unknown>): ObjectMeta;\nexport function getMeta(entity: Unknown | Snapshot): ReadonlyMeta;\nexport function getMeta(entity: Unknown | Snapshot | Mutable<Unknown>): ObjectMeta | ReadonlyMeta {\n return getMeta$(entity);\n}\n\n/**\n * Get foreign keys for an entity from the specified source.\n */\nexport const getKeys = (entity: Unknown | Snapshot, source: string): ForeignKey[] => getKeys$(entity, source);\n\n/**\n * Check if an entity is deleted.\n */\nexport const isDeleted = (entity: Unknown | Snapshot): boolean => isDeleted$(entity);\n\n/**\n * Get the label of an entity.\n */\nexport const getLabel = (entity: Unknown | Snapshot): string | undefined => getLabel$(entity);\n\n/**\n * Get the description of an entity.\n */\nexport const getDescription = (entity: Unknown | Snapshot): string | undefined => getDescription$(entity);\n\n/**\n * Convert an entity to its JSON representation.\n */\nexport const toJSON = (entity: Unknown | Snapshot): JSON => toJSON$(entity);\n\n/**\n * Subscribe to changes on an entity (object or relation).\n * @returns Unsubscribe function.\n */\nexport const subscribe = (entity: Unknown, callback: () => void): (() => void) => {\n return subscribe$(entity, callback);\n};\n\n//\n// Change\n//\n\n/**\n * Used to provide a mutable view of an entity within `Entity.change`.\n */\nexport type { Mutable };\n\n/**\n * Perform mutations on an entity (object or relation) within a change context.\n *\n * Entities are read-only by default. Mutations are batched and notifications fire\n * when the callback completes. Direct mutations outside of `Entity.change` will throw\n * at runtime.\n *\n * @param entity - The echo entity (object or relation) to mutate.\n * @param callback - Receives a mutable view of the entity. All mutations must occur here.\n *\n * @example\n * ```typescript\n * // Mutate within Entity.change\n * Entity.change(entity, (e) => {\n * e.name = 'Updated';\n * e.count = 42;\n * });\n *\n * // Direct mutation throws\n * entity.name = 'Bob'; // Error: Cannot modify outside Entity.change()\n * ```\n *\n * Note: For type-specific operations, prefer `Obj.change` or `Relation.change`.\n */\nexport const change = <T extends Unknown>(entity: T, callback: ChangeCallback<T>): void => {\n change$(entity, callback);\n};\n\n/**\n * Add a tag to an entity.\n * Must be called within an `Entity.change`, `Obj.change`, or `Relation.change` callback.\n */\nexport const addTag = (entity: Mutable<Unknown>, tag: string): void => addTag$(entity, tag);\n\n/**\n * Remove a tag from an entity.\n * Must be called within an `Entity.change`, `Obj.change`, or `Relation.change` callback.\n */\nexport const removeTag = (entity: Mutable<Unknown>, tag: string): void => removeTag$(entity, tag);\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;gBAAAA;EAAA,cAAAC;EAAA,cAAAC;EAAA,mBAAAC;EAAA,sBAAAC;EAAA,eAAAC;EAAA;kBAAAC;EAAA;oBAAAC;EAAA,mBAAAC;EAAA,iBAAAC;EAAA,iBAAAC;EAAA,iBAAAC;EAAA;;AAyCO,IAAMC,OAAOC;AAEb,IAAMC,aAAaC;AAgDnB,IAAMC,UAAUC;AAgBhB,IAAMC,UAAS,CAACC,WAAoCC,OAAQD,MAAAA;AAK5D,IAAME,cAAaC;AAKnB,IAAMC,eAAc,CAACJ,WAAmDK,YAAaL,MAAAA;AAKrF,IAAMM,eAAc,CAACN,WAAgDO,YAAaP,MAAAA;AAUlF,SAASQ,QAAQR,QAA6C;AACnE,SAAOS,eAAST,MAAAA;AAClB;AAKO,IAAMU,WAAU,CAACV,QAA4BW,WAAiCC,QAASZ,QAAQW,MAAAA;AAK/F,IAAME,aAAY,CAACb,WAAwCc,UAAWd,MAAAA;AAKtE,IAAMe,YAAW,CAACf,WAAmDgB,SAAUhB,MAAAA;AAK/E,IAAMiB,kBAAiB,CAACjB,WAAmDkB,eAAgBlB,MAAAA;AAK3F,IAAMmB,SAAS,CAACnB,WAAqCoB,aAAQpB,MAAAA;AAM7D,IAAMqB,aAAY,CAACrB,QAAiBsB,aAAAA;AACzC,SAAOC,UAAWvB,QAAQsB,QAAAA;AAC5B;AAmCO,IAAME,UAAS,CAAoBxB,QAAWsB,aAAAA;AACnDG,SAAQzB,QAAQsB,QAAAA;AAClB;AAMO,IAAMI,UAAS,CAAC1B,QAA0B2B,QAAsBC,OAAQ5B,QAAQ2B,GAAAA;AAMhF,IAAME,aAAY,CAAC7B,QAA0B2B,QAAsBG,UAAW9B,QAAQ2B,GAAAA;",
6
+ "names": ["addTag", "change", "getDXN", "getDatabase", "getDescription", "getKeys", "getLabel", "getTypeDXN", "getTypename", "isDeleted", "removeTag", "subscribe", "Kind", "EntityKind", "KindSchema", "EntityKindSchema", "getKind", "getEntityKind", "getDXN", "entity", "getDXN$", "getTypeDXN", "getTypeDXN$", "getTypename", "getTypename$", "getDatabase", "getDatabase$", "getMeta", "getMeta$", "getKeys", "source", "getKeys$", "isDeleted", "isDeleted$", "getLabel", "getLabel$", "getDescription", "getDescription$", "toJSON", "toJSON$", "subscribe", "callback", "subscribe$", "change", "change$", "addTag", "tag", "addTag$", "removeTag", "removeTag$"]
7
+ }
@@ -0,0 +1,21 @@
1
+ import {
2
+ __export
3
+ } from "./chunk-J5LGTIGS.mjs";
4
+
5
+ // src/Key.ts
6
+ var Key_exports = {};
7
+ __export(Key_exports, {
8
+ ForeignKey: () => ForeignKey,
9
+ ObjectId: () => ObjectId,
10
+ SpaceId: () => SpaceId
11
+ });
12
+ import { ForeignKey } from "@dxos/echo-protocol";
13
+ import { SpaceId, ObjectId } from "@dxos/keys";
14
+
15
+ export {
16
+ Key_exports,
17
+ ForeignKey,
18
+ SpaceId,
19
+ ObjectId
20
+ };
21
+ //# sourceMappingURL=chunk-ANHVGJI4.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/Key.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\n// TODO(wittjosiah): Should this be a subset of Type?\n\nexport { ForeignKey } from '@dxos/echo-protocol';\nexport { SpaceId, ObjectId } from '@dxos/keys';\n"],
5
+ "mappings": ";;;;;AAAA;;;;;;AAMA,SAASA,kBAAkB;AAC3B,SAASC,SAASC,gBAAgB;",
6
+ "names": ["ForeignKey", "SpaceId", "ObjectId"]
7
+ }