@rocicorp/zero 0.5.2024110200 → 0.6.2024111700

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 (333) hide show
  1. package/out/{internal.js → advanced.js} +2 -2
  2. package/out/{chunk-YCMA66NH.js → chunk-5UY46OAF.js} +5 -2
  3. package/out/{chunk-YCMA66NH.js.map → chunk-5UY46OAF.js.map} +2 -2
  4. package/out/{chunk-INJ4WJHS.js → chunk-PIFWXXO2.js} +1209 -586
  5. package/out/chunk-PIFWXXO2.js.map +7 -0
  6. package/out/react.js.map +2 -2
  7. package/out/shared/src/browser-env.d.ts +17 -0
  8. package/out/shared/src/browser-env.d.ts.map +1 -1
  9. package/out/shared/src/expand.d.ts +7 -0
  10. package/out/shared/src/expand.d.ts.map +1 -0
  11. package/out/solid.js +5 -5
  12. package/out/solid.js.map +2 -2
  13. package/out/zero-cache/src/auth/load-authorization.d.ts +3 -0
  14. package/out/zero-cache/src/auth/load-authorization.d.ts.map +1 -0
  15. package/out/zero-cache/src/auth/load-authorization.js +21 -0
  16. package/out/zero-cache/src/auth/load-authorization.js.map +1 -0
  17. package/out/zero-cache/src/config/config.d.ts +112 -0
  18. package/out/zero-cache/src/config/config.d.ts.map +1 -0
  19. package/out/zero-cache/src/config/config.js +246 -0
  20. package/out/zero-cache/src/config/config.js.map +1 -0
  21. package/out/zero-cache/src/config/zero-config.d.ts +145 -964
  22. package/out/zero-cache/src/config/zero-config.d.ts.map +1 -1
  23. package/out/zero-cache/src/config/zero-config.js +242 -115
  24. package/out/zero-cache/src/config/zero-config.js.map +1 -1
  25. package/out/zero-cache/src/db/delete-lite-db.d.ts +2 -0
  26. package/out/zero-cache/src/db/delete-lite-db.d.ts.map +1 -0
  27. package/out/zero-cache/src/db/delete-lite-db.js +7 -0
  28. package/out/zero-cache/src/db/delete-lite-db.js.map +1 -0
  29. package/out/zero-cache/src/db/migration.d.ts +1 -0
  30. package/out/zero-cache/src/db/migration.d.ts.map +1 -1
  31. package/out/zero-cache/src/db/migration.js +17 -7
  32. package/out/zero-cache/src/db/migration.js.map +1 -1
  33. package/out/zero-cache/src/db/pg-to-lite.d.ts +1 -1
  34. package/out/zero-cache/src/db/pg-to-lite.d.ts.map +1 -1
  35. package/out/zero-cache/src/db/pg-to-lite.js +7 -3
  36. package/out/zero-cache/src/db/pg-to-lite.js.map +1 -1
  37. package/out/zero-cache/src/db/short-lived-client.d.ts +16 -0
  38. package/out/zero-cache/src/db/short-lived-client.d.ts.map +1 -0
  39. package/out/zero-cache/src/db/short-lived-client.js +50 -0
  40. package/out/zero-cache/src/db/short-lived-client.js.map +1 -0
  41. package/out/zero-cache/src/db/specs.d.ts +12 -3
  42. package/out/zero-cache/src/db/specs.d.ts.map +1 -1
  43. package/out/zero-cache/src/db/specs.js +6 -1
  44. package/out/zero-cache/src/db/specs.js.map +1 -1
  45. package/out/zero-cache/src/db/transaction-pool.d.ts +8 -2
  46. package/out/zero-cache/src/db/transaction-pool.d.ts.map +1 -1
  47. package/out/zero-cache/src/db/transaction-pool.js +43 -9
  48. package/out/zero-cache/src/db/transaction-pool.js.map +1 -1
  49. package/out/zero-cache/src/server/change-streamer.d.ts.map +1 -1
  50. package/out/zero-cache/src/server/change-streamer.js +34 -9
  51. package/out/zero-cache/src/server/change-streamer.js.map +1 -1
  52. package/out/zero-cache/src/server/life-cycle.d.ts +1 -1
  53. package/out/zero-cache/src/server/life-cycle.d.ts.map +1 -1
  54. package/out/zero-cache/src/server/life-cycle.js +2 -3
  55. package/out/zero-cache/src/server/life-cycle.js.map +1 -1
  56. package/out/zero-cache/src/server/logging.d.ts.map +1 -1
  57. package/out/zero-cache/src/server/logging.js +2 -15
  58. package/out/zero-cache/src/server/logging.js.map +1 -1
  59. package/out/zero-cache/src/server/main.js +28 -10
  60. package/out/zero-cache/src/server/main.js.map +1 -1
  61. package/out/zero-cache/src/server/replicator.d.ts.map +1 -1
  62. package/out/zero-cache/src/server/replicator.js +6 -5
  63. package/out/zero-cache/src/server/replicator.js.map +1 -1
  64. package/out/zero-cache/src/server/syncer.d.ts.map +1 -1
  65. package/out/zero-cache/src/server/syncer.js +16 -12
  66. package/out/zero-cache/src/server/syncer.js.map +1 -1
  67. package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts +2 -3
  68. package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts.map +1 -1
  69. package/out/zero-cache/src/services/change-streamer/change-streamer-http.js +2 -3
  70. package/out/zero-cache/src/services/change-streamer/change-streamer-http.js.map +1 -1
  71. package/out/zero-cache/src/services/change-streamer/change-streamer-service.d.ts +153 -2
  72. package/out/zero-cache/src/services/change-streamer/change-streamer-service.d.ts.map +1 -1
  73. package/out/zero-cache/src/services/change-streamer/change-streamer-service.js +136 -19
  74. package/out/zero-cache/src/services/change-streamer/change-streamer-service.js.map +1 -1
  75. package/out/zero-cache/src/services/change-streamer/change-streamer.d.ts +17 -9
  76. package/out/zero-cache/src/services/change-streamer/change-streamer.d.ts.map +1 -1
  77. package/out/zero-cache/src/services/change-streamer/change-streamer.js +4 -2
  78. package/out/zero-cache/src/services/change-streamer/change-streamer.js.map +1 -1
  79. package/out/zero-cache/src/services/change-streamer/forwarder.d.ts +1 -0
  80. package/out/zero-cache/src/services/change-streamer/forwarder.d.ts.map +1 -1
  81. package/out/zero-cache/src/services/change-streamer/forwarder.js +9 -2
  82. package/out/zero-cache/src/services/change-streamer/forwarder.js.map +1 -1
  83. package/out/zero-cache/src/services/change-streamer/pg/change-source.d.ts +10 -0
  84. package/out/zero-cache/src/services/change-streamer/pg/change-source.d.ts.map +1 -1
  85. package/out/zero-cache/src/services/change-streamer/pg/change-source.js +171 -24
  86. package/out/zero-cache/src/services/change-streamer/pg/change-source.js.map +1 -1
  87. package/out/zero-cache/src/services/change-streamer/pg/initial-sync.d.ts.map +1 -1
  88. package/out/zero-cache/src/services/change-streamer/pg/initial-sync.js +33 -19
  89. package/out/zero-cache/src/services/change-streamer/pg/initial-sync.js.map +1 -1
  90. package/out/zero-cache/src/services/change-streamer/pg/schema/ddl.d.ts +62 -39
  91. package/out/zero-cache/src/services/change-streamer/pg/schema/ddl.d.ts.map +1 -1
  92. package/out/zero-cache/src/services/change-streamer/pg/schema/ddl.js +8 -40
  93. package/out/zero-cache/src/services/change-streamer/pg/schema/ddl.js.map +1 -1
  94. package/out/zero-cache/src/services/change-streamer/pg/schema/init.d.ts +8 -0
  95. package/out/zero-cache/src/services/change-streamer/pg/schema/init.d.ts.map +1 -1
  96. package/out/zero-cache/src/services/change-streamer/pg/schema/init.js +41 -8
  97. package/out/zero-cache/src/services/change-streamer/pg/schema/init.js.map +1 -1
  98. package/out/zero-cache/src/services/change-streamer/pg/schema/published.d.ts +83 -13
  99. package/out/zero-cache/src/services/change-streamer/pg/schema/published.d.ts.map +1 -1
  100. package/out/zero-cache/src/services/change-streamer/pg/schema/published.js +15 -5
  101. package/out/zero-cache/src/services/change-streamer/pg/schema/published.js.map +1 -1
  102. package/out/zero-cache/src/services/change-streamer/pg/schema/shard.d.ts +39 -3
  103. package/out/zero-cache/src/services/change-streamer/pg/schema/shard.d.ts.map +1 -1
  104. package/out/zero-cache/src/services/change-streamer/pg/schema/shard.js +67 -36
  105. package/out/zero-cache/src/services/change-streamer/pg/schema/shard.js.map +1 -1
  106. package/out/zero-cache/src/services/change-streamer/pg/schema/validation.d.ts +8 -0
  107. package/out/zero-cache/src/services/change-streamer/pg/schema/validation.d.ts.map +1 -0
  108. package/out/zero-cache/src/services/change-streamer/pg/schema/validation.js +33 -0
  109. package/out/zero-cache/src/services/change-streamer/pg/schema/validation.js.map +1 -0
  110. package/out/zero-cache/src/services/change-streamer/schema/change.d.ts +5 -1
  111. package/out/zero-cache/src/services/change-streamer/schema/change.d.ts.map +1 -1
  112. package/out/zero-cache/src/services/change-streamer/schema/change.js +3 -0
  113. package/out/zero-cache/src/services/change-streamer/schema/change.js.map +1 -1
  114. package/out/zero-cache/src/services/change-streamer/schema/init.d.ts.map +1 -1
  115. package/out/zero-cache/src/services/change-streamer/schema/init.js +4 -6
  116. package/out/zero-cache/src/services/change-streamer/schema/init.js.map +1 -1
  117. package/out/zero-cache/src/services/change-streamer/schema/tables.d.ts +6 -1
  118. package/out/zero-cache/src/services/change-streamer/schema/tables.d.ts.map +1 -1
  119. package/out/zero-cache/src/services/change-streamer/schema/tables.js +19 -4
  120. package/out/zero-cache/src/services/change-streamer/schema/tables.js.map +1 -1
  121. package/out/zero-cache/src/services/change-streamer/storer.d.ts +29 -2
  122. package/out/zero-cache/src/services/change-streamer/storer.d.ts.map +1 -1
  123. package/out/zero-cache/src/services/change-streamer/storer.js +90 -8
  124. package/out/zero-cache/src/services/change-streamer/storer.js.map +1 -1
  125. package/out/zero-cache/src/services/change-streamer/subscriber.d.ts +1 -0
  126. package/out/zero-cache/src/services/change-streamer/subscriber.d.ts.map +1 -1
  127. package/out/zero-cache/src/services/change-streamer/subscriber.js +18 -3
  128. package/out/zero-cache/src/services/change-streamer/subscriber.js.map +1 -1
  129. package/out/zero-cache/src/services/dispatcher/dispatcher.d.ts +5 -3
  130. package/out/zero-cache/src/services/dispatcher/dispatcher.d.ts.map +1 -1
  131. package/out/zero-cache/src/services/dispatcher/dispatcher.js +20 -5
  132. package/out/zero-cache/src/services/dispatcher/dispatcher.js.map +1 -1
  133. package/out/zero-cache/src/services/mutagen/mutagen.d.ts +6 -5
  134. package/out/zero-cache/src/services/mutagen/mutagen.d.ts.map +1 -1
  135. package/out/zero-cache/src/services/mutagen/mutagen.js +26 -20
  136. package/out/zero-cache/src/services/mutagen/mutagen.js.map +1 -1
  137. package/out/zero-cache/src/services/mutagen/write-authorizer.d.ts +7 -6
  138. package/out/zero-cache/src/services/mutagen/write-authorizer.d.ts.map +1 -1
  139. package/out/zero-cache/src/services/mutagen/write-authorizer.js +10 -18
  140. package/out/zero-cache/src/services/mutagen/write-authorizer.js.map +1 -1
  141. package/out/zero-cache/src/services/replicator/incremental-sync.d.ts +1 -1
  142. package/out/zero-cache/src/services/replicator/incremental-sync.d.ts.map +1 -1
  143. package/out/zero-cache/src/services/replicator/incremental-sync.js +8 -8
  144. package/out/zero-cache/src/services/replicator/incremental-sync.js.map +1 -1
  145. package/out/zero-cache/src/services/replicator/schema/replication-state.d.ts.map +1 -1
  146. package/out/zero-cache/src/services/replicator/schema/replication-state.js +1 -10
  147. package/out/zero-cache/src/services/replicator/schema/replication-state.js.map +1 -1
  148. package/out/zero-cache/src/services/running-state.d.ts +6 -1
  149. package/out/zero-cache/src/services/running-state.d.ts.map +1 -1
  150. package/out/zero-cache/src/services/running-state.js +23 -5
  151. package/out/zero-cache/src/services/running-state.js.map +1 -1
  152. package/out/zero-cache/src/services/view-syncer/schema/types.d.ts +49 -29
  153. package/out/zero-cache/src/services/view-syncer/schema/types.d.ts.map +1 -1
  154. package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts.map +1 -1
  155. package/out/zero-cache/src/services/view-syncer/view-syncer.js +2 -1
  156. package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -1
  157. package/out/zero-cache/src/types/lexi-version.d.ts +3 -2
  158. package/out/zero-cache/src/types/lexi-version.d.ts.map +1 -1
  159. package/out/zero-cache/src/types/lexi-version.js +8 -6
  160. package/out/zero-cache/src/types/lexi-version.js.map +1 -1
  161. package/out/zero-cache/src/types/processes.d.ts.map +1 -1
  162. package/out/zero-cache/src/types/processes.js +1 -0
  163. package/out/zero-cache/src/types/processes.js.map +1 -1
  164. package/out/zero-cache/src/workers/replicator.d.ts.map +1 -1
  165. package/out/zero-cache/src/workers/replicator.js +2 -4
  166. package/out/zero-cache/src/workers/replicator.js.map +1 -1
  167. package/out/zero-cache/src/workers/syncer.js +1 -1
  168. package/out/zero-cache/src/workers/syncer.js.map +1 -1
  169. package/out/zero-client/src/client/crud.d.ts +56 -25
  170. package/out/zero-client/src/client/crud.d.ts.map +1 -1
  171. package/out/zero-client/src/client/http-string.d.ts +1 -0
  172. package/out/zero-client/src/client/http-string.d.ts.map +1 -1
  173. package/out/zero-client/src/client/log-options.d.ts +2 -1
  174. package/out/zero-client/src/client/log-options.d.ts.map +1 -1
  175. package/out/zero-client/src/client/options.d.ts +8 -8
  176. package/out/zero-client/src/client/options.d.ts.map +1 -1
  177. package/out/zero-client/src/client/protocol-version.d.ts +2 -0
  178. package/out/zero-client/src/client/protocol-version.d.ts.map +1 -0
  179. package/out/zero-client/src/client/server-option.d.ts.map +1 -1
  180. package/out/zero-client/src/client/zero-poke-handler.d.ts +1 -1
  181. package/out/zero-client/src/client/zero-poke-handler.d.ts.map +1 -1
  182. package/out/zero-client/src/client/zero.d.ts +26 -14
  183. package/out/zero-client/src/client/zero.d.ts.map +1 -1
  184. package/out/zero-client/src/mod.d.ts +4 -2
  185. package/out/zero-client/src/mod.d.ts.map +1 -1
  186. package/out/zero-protocol/src/ast.d.ts +37 -21
  187. package/out/zero-protocol/src/ast.d.ts.map +1 -1
  188. package/out/zero-protocol/src/ast.js +21 -6
  189. package/out/zero-protocol/src/ast.js.map +1 -1
  190. package/out/zero-protocol/src/change-desired-queries.d.ts +16 -8
  191. package/out/zero-protocol/src/change-desired-queries.d.ts.map +1 -1
  192. package/out/zero-protocol/src/connect.d.ts +16 -8
  193. package/out/zero-protocol/src/connect.d.ts.map +1 -1
  194. package/out/zero-protocol/src/down.d.ts +16 -8
  195. package/out/zero-protocol/src/down.d.ts.map +1 -1
  196. package/out/zero-protocol/src/poke.d.ts +32 -16
  197. package/out/zero-protocol/src/poke.d.ts.map +1 -1
  198. package/out/zero-protocol/src/push.d.ts +18 -18
  199. package/out/zero-protocol/src/push.d.ts.map +1 -1
  200. package/out/zero-protocol/src/push.js +5 -5
  201. package/out/zero-protocol/src/push.js.map +1 -1
  202. package/out/zero-protocol/src/queries-patch.d.ts +24 -12
  203. package/out/zero-protocol/src/queries-patch.d.ts.map +1 -1
  204. package/out/zero-protocol/src/up.d.ts +18 -10
  205. package/out/zero-protocol/src/up.d.ts.map +1 -1
  206. package/out/zero-react/src/use-zero.d.ts.map +1 -1
  207. package/out/zero-schema/src/authorization.d.ts +25 -0
  208. package/out/zero-schema/src/authorization.d.ts.map +1 -0
  209. package/out/zero-schema/src/compiled-authorization.d.ts +379 -0
  210. package/out/zero-schema/src/compiled-authorization.d.ts.map +1 -0
  211. package/out/zero-schema/src/compiled-authorization.js +15 -0
  212. package/out/zero-schema/src/compiled-authorization.js.map +1 -0
  213. package/out/zero-schema/src/mod.d.ts +1 -0
  214. package/out/zero-schema/src/mod.d.ts.map +1 -1
  215. package/out/{zero-client/src/client → zero-schema/src}/normalized-schema.d.ts +2 -2
  216. package/out/zero-schema/src/normalized-schema.d.ts.map +1 -0
  217. package/out/zero-schema/src/table-schema.d.ts +15 -7
  218. package/out/zero-schema/src/table-schema.d.ts.map +1 -1
  219. package/out/zero-schema/src/table-schema.js.map +1 -1
  220. package/out/zero.js +10 -14
  221. package/out/zql/src/builder/builder.d.ts +1 -1
  222. package/out/zql/src/builder/builder.d.ts.map +1 -1
  223. package/out/zql/src/builder/builder.js +136 -30
  224. package/out/zql/src/builder/builder.js.map +1 -1
  225. package/out/zql/src/builder/filter.d.ts +2 -1
  226. package/out/zql/src/builder/filter.d.ts.map +1 -1
  227. package/out/zql/src/builder/filter.js +18 -0
  228. package/out/zql/src/builder/filter.js.map +1 -1
  229. package/out/zql/src/builder/like.d.ts +2 -2
  230. package/out/zql/src/builder/like.d.ts.map +1 -1
  231. package/out/zql/src/ivm/change.d.ts +1 -0
  232. package/out/zql/src/ivm/change.d.ts.map +1 -1
  233. package/out/zql/src/ivm/change.js +4 -1
  234. package/out/zql/src/ivm/change.js.map +1 -1
  235. package/out/zql/src/ivm/exists.d.ts +18 -0
  236. package/out/zql/src/ivm/exists.d.ts.map +1 -0
  237. package/out/zql/src/ivm/exists.js +186 -0
  238. package/out/zql/src/ivm/exists.js.map +1 -0
  239. package/out/zql/src/ivm/fan-in.d.ts +1 -1
  240. package/out/zql/src/ivm/fan-in.d.ts.map +1 -1
  241. package/out/zql/src/ivm/fan-in.js +3 -3
  242. package/out/zql/src/ivm/fan-in.js.map +1 -1
  243. package/out/zql/src/ivm/fan-out.d.ts.map +1 -1
  244. package/out/zql/src/ivm/fan-out.js +4 -7
  245. package/out/zql/src/ivm/fan-out.js.map +1 -1
  246. package/out/zql/src/ivm/filter.js +1 -1
  247. package/out/zql/src/ivm/filter.js.map +1 -1
  248. package/out/zql/src/ivm/memory-source.d.ts +10 -6
  249. package/out/zql/src/ivm/memory-source.d.ts.map +1 -1
  250. package/out/zql/src/ivm/memory-source.js +60 -75
  251. package/out/zql/src/ivm/memory-source.js.map +1 -1
  252. package/out/zql/src/ivm/skip.js +1 -1
  253. package/out/zql/src/ivm/skip.js.map +1 -1
  254. package/out/zql/src/ivm/take.d.ts +1 -1
  255. package/out/zql/src/ivm/take.d.ts.map +1 -1
  256. package/out/zql/src/ivm/take.js +11 -7
  257. package/out/zql/src/ivm/take.js.map +1 -1
  258. package/out/zql/src/ivm/view-apply-change.d.ts.map +1 -1
  259. package/out/zql/src/query/auth-query.d.ts +7 -3
  260. package/out/zql/src/query/auth-query.d.ts.map +1 -1
  261. package/out/zql/src/query/dnf.d.ts +10 -0
  262. package/out/zql/src/query/dnf.d.ts.map +1 -0
  263. package/out/zql/src/query/expression.d.ts +40 -23
  264. package/out/zql/src/query/expression.d.ts.map +1 -1
  265. package/out/zql/src/query/query-impl.d.ts +7 -6
  266. package/out/zql/src/query/query-impl.d.ts.map +1 -1
  267. package/out/zql/src/query/query.d.ts +17 -46
  268. package/out/zql/src/query/query.d.ts.map +1 -1
  269. package/out/zqlite/src/db.d.ts.map +1 -1
  270. package/out/zqlite/src/db.js +19 -6
  271. package/out/zqlite/src/db.js.map +1 -1
  272. package/out/zqlite/src/table-source.d.ts +12 -3
  273. package/out/zqlite/src/table-source.d.ts.map +1 -1
  274. package/out/zqlite/src/table-source.js +81 -2
  275. package/out/zqlite/src/table-source.js.map +1 -1
  276. package/package.json +7 -11
  277. package/out/chunk-INJ4WJHS.js.map +0 -7
  278. package/out/datadog/src/datadog-log-sink.js +0 -231
  279. package/out/datadog/src/datadog-log-sink.js.map +0 -1
  280. package/out/datadog/src/mod.js +0 -2
  281. package/out/datadog/src/mod.js.map +0 -1
  282. package/out/shared/src/immutable.js +0 -2
  283. package/out/shared/src/immutable.js.map +0 -1
  284. package/out/shared/src/sorted-entries.js +0 -6
  285. package/out/shared/src/sorted-entries.js.map +0 -1
  286. package/out/shared/src/writable.js +0 -2
  287. package/out/shared/src/writable.js.map +0 -1
  288. package/out/zero/src/config.d.ts +0 -2
  289. package/out/zero/src/config.d.ts.map +0 -1
  290. package/out/zero/src/config.js +0 -2
  291. package/out/zero/src/config.js.map +0 -1
  292. package/out/zero-cache/src/config/config-query.d.ts +0 -19
  293. package/out/zero-cache/src/config/config-query.d.ts.map +0 -1
  294. package/out/zero-cache/src/config/config-query.js +0 -22
  295. package/out/zero-cache/src/config/config-query.js.map +0 -1
  296. package/out/zero-cache/src/config/define-config.d.ts +0 -43
  297. package/out/zero-cache/src/config/define-config.d.ts.map +0 -1
  298. package/out/zero-cache/src/config/define-config.js +0 -121
  299. package/out/zero-cache/src/config/define-config.js.map +0 -1
  300. package/out/zero-cache/src/config/refs.d.ts +0 -3
  301. package/out/zero-cache/src/config/refs.d.ts.map +0 -1
  302. package/out/zero-cache/src/config/refs.js +0 -14
  303. package/out/zero-cache/src/config/refs.js.map +0 -1
  304. package/out/zero-client/src/client/normalized-schema.d.ts.map +0 -1
  305. package/out/zero-client/src/client/normalized-schema.js +0 -31
  306. package/out/zero-client/src/client/normalized-schema.js.map +0 -1
  307. package/out/zero-protocol/src/ast-hash.js +0 -14
  308. package/out/zero-protocol/src/ast-hash.js.map +0 -1
  309. package/out/zero-schema/src/mod.js +0 -4
  310. package/out/zero-schema/src/mod.js.map +0 -1
  311. package/out/zero-schema/src/normalize-table-schema.js +0 -116
  312. package/out/zero-schema/src/normalize-table-schema.js.map +0 -1
  313. package/out/zero-schema/src/schema.js +0 -4
  314. package/out/zero-schema/src/schema.js.map +0 -1
  315. package/out/zql/src/ivm/array-view.js +0 -70
  316. package/out/zql/src/ivm/array-view.js.map +0 -1
  317. package/out/zql/src/ivm/view-apply-change.js +0 -156
  318. package/out/zql/src/ivm/view-apply-change.js.map +0 -1
  319. package/out/zql/src/ivm/view.js +0 -2
  320. package/out/zql/src/ivm/view.js.map +0 -1
  321. package/out/zql/src/query/auth-query.js +0 -26
  322. package/out/zql/src/query/auth-query.js.map +0 -1
  323. package/out/zql/src/query/expression.js +0 -121
  324. package/out/zql/src/query/expression.js.map +0 -1
  325. package/out/zql/src/query/query-impl.js +0 -291
  326. package/out/zql/src/query/query-impl.js.map +0 -1
  327. package/out/zql/src/query/query-internal.js +0 -2
  328. package/out/zql/src/query/query-internal.js.map +0 -1
  329. package/out/zql/src/query/query.js +0 -3
  330. package/out/zql/src/query/query.js.map +0 -1
  331. package/out/zql/src/query/typed-view.js +0 -2
  332. package/out/zql/src/query/typed-view.js.map +0 -1
  333. /package/out/{internal.js.map → advanced.js.map} +0 -0
package/out/react.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../zero-react/src/use-query.tsx", "../../shared/src/deep-clone.ts", "../../zero-react/src/use-zero.tsx"],
4
- "sourcesContent": ["import {useSyncExternalStore} from 'react';\nimport {deepClone} from '../../shared/src/deep-clone.js';\nimport type {Immutable} from '../../shared/src/immutable.js';\nimport type {\n Query,\n QueryType,\n ReadonlyJSONValue,\n Smash,\n TypedView,\n} from '../../zero-client/src/mod.js';\nimport type {AdvancedQuery} from '../../zql/src/query/query-internal.js';\nimport {useZero} from './use-zero.js';\nimport type {TableSchema} from '../../zero-schema/src/table-schema.js';\n\nexport function useQuery<\n TSchema extends TableSchema,\n TReturn extends QueryType,\n>(q: Query<TSchema, TReturn>, enable: boolean = true): Smash<TReturn> {\n const z = useZero();\n const view = viewStore.getView(\n z.clientID,\n q as AdvancedQuery<TSchema, TReturn>,\n enable,\n );\n // https://react.dev/reference/react/useSyncExternalStore\n return useSyncExternalStore(view.subscribeReactInternals, view.getSnapshot);\n}\n\nconst emptyArray: unknown[] = [];\nconst disabledSubscriber = () => () => {};\n\n/**\n * A global store of all active views.\n *\n * React subscribes and unsubscribes to these views\n * via `useSyncExternalStore`.\n *\n * Managing views through `useEffect` or `useLayoutEffect` causes\n * inconsistencies because effects run after render.\n *\n * For example, if useQuery used use*Effect in the component below:\n * ```ts\n * function Foo({issueID}) {\n * const issue = useQuery(z.query.issue.where('id', issueID).one());\n * if (issue?.id !== undefined && issue.id !== issueID) {\n * console.log('MISMATCH!', issue.id, issueID);\n * }\n * }\n * ```\n *\n * `MISMATCH` will be printed whenever the `issueID` prop changes.\n *\n * This is because the component will render once with\n * the old state returned from `useQuery`. Then the effect inside\n * `useQuery` will run. The component will render again with the new\n * state. This inconsistent transition can cause unexpected results.\n *\n * Emulating `useEffect` via `useState` and `if` causes resource leaks.\n * That is:\n *\n * ```ts\n * function useQuery(q) {\n * const [oldHash, setOldHash] = useState();\n * if (hash(q) !== oldHash) {\n * // make new view\n * }\n *\n * useEffect(() => {\n * return () => view.destroy();\n * }, []);\n * }\n * ```\n *\n * I'm not sure why but in strict mode the cleanup function\n * fails to be called for the first instance of the view and only\n * cleans up later instances.\n *\n * Swapping `useState` to `useRef` has similar problems.\n */\nclass ViewStore {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n #views = new Map<string, ViewWrapper<any, any>>();\n\n getView<TSchema extends TableSchema, TReturn extends QueryType>(\n clientID: string,\n query: AdvancedQuery<TSchema, TReturn>,\n enabled: boolean,\n ): {\n getSnapshot: () => Smash<TReturn>;\n subscribeReactInternals: (internals: () => void) => () => void;\n } {\n if (!enabled) {\n return {\n getSnapshot: () =>\n (query.format.singular ? undefined : emptyArray) as Smash<TReturn>,\n subscribeReactInternals: disabledSubscriber,\n };\n }\n\n const hash = query.hash() + clientID;\n let existing = this.#views.get(hash);\n if (!existing) {\n existing = new ViewWrapper(\n query,\n view => {\n const lastView = this.#views.get(hash);\n // I don't think this can happen\n // but lets guard against it so we don't\n // leak resources.\n if (lastView && lastView !== view) {\n throw new Error('View already exists');\n }\n this.#views.set(hash, view);\n },\n () => {\n this.#views.delete(hash);\n },\n ) as ViewWrapper<TSchema, TReturn>;\n this.#views.set(hash, existing);\n }\n return existing;\n }\n}\n\nconst viewStore = new ViewStore();\n\n/**\n * This wraps and ref counts a view.\n *\n * The only signal we have from React as to whether or not it is\n * done with a view is when it calls `unsubscribe`.\n *\n * In non-strict-mode we can clean up the view as soon\n * as the listener count goes to 0.\n *\n * In strict-mode, the listener cound will go to 0 then a\n * new listener for the same view is immeidatiely added back.\n *\n * This is why the `onMaterialized` and `onDematerialized` callbacks exist --\n * they allow a view which React is still referencing to be added\n * back into the store when React re-subscribes to it.\n *\n * This wrapper also exists to deal with the various\n * `useSyncExternalStore` caveats that cause excessive\n * re-renders and materializations.\n *\n * See: https://react.dev/reference/react/useSyncExternalStore#caveats\n * Especially:\n * 1. The store snapshot returned by getSnapshot must be immutable. If the underlying store has mutable data, return a new immutable snapshot if the data has changed. Otherwise, return a cached last snapshot.\n * 2. If a different subscribe function is passed during a re-render, React will re-subscribe to the store using the newly passed subscribe function. You can prevent this by declaring subscribe outside the component.\n */\nclass ViewWrapper<TSchema extends TableSchema, TReturn extends QueryType> {\n #view: TypedView<Smash<TReturn>> | undefined;\n readonly #defaultSnapshot: Smash<TReturn>;\n readonly #onDematerialized;\n readonly #onMaterialized;\n readonly #query: AdvancedQuery<TSchema, TReturn>;\n #snapshot: Smash<TReturn>;\n #reactInternals: Set<() => void>;\n\n constructor(\n query: AdvancedQuery<TSchema, TReturn>,\n onMaterialized: (view: ViewWrapper<TSchema, TReturn>) => void,\n onDematerialized: () => void,\n ) {\n this.#defaultSnapshot = (query.format.singular\n ? undefined\n : emptyArray) as unknown as Smash<TReturn>;\n this.#snapshot = this.#defaultSnapshot;\n this.#onMaterialized = onMaterialized;\n this.#onDematerialized = onDematerialized;\n this.#reactInternals = new Set();\n this.#query = query;\n }\n\n #onData = (snap: Immutable<Smash<TReturn>>) => {\n this.#snapshot = (\n snap === undefined ? snap : deepClone(snap as ReadonlyJSONValue)\n ) as Smash<TReturn>;\n for (const internals of this.#reactInternals) {\n internals();\n }\n };\n\n #materializeIfNeeded = () => {\n if (this.#view) {\n return;\n }\n\n this.#view = this.#query.materialize();\n this.#view.addListener(this.#onData);\n\n this.#onMaterialized(this);\n };\n\n getSnapshot = () => this.#snapshot;\n\n subscribeReactInternals = (internals: () => void): (() => void) => {\n this.#reactInternals.add(internals);\n this.#materializeIfNeeded();\n return () => {\n this.#reactInternals.delete(internals);\n if (this.#reactInternals.size === 0) {\n this.#view?.destroy();\n this.#view = undefined;\n this.#onDematerialized();\n }\n };\n };\n}\n", "import {hasOwn} from './has-own.js';\nimport type {JSONValue, ReadonlyJSONValue} from './json.js';\n\nexport function deepClone(value: ReadonlyJSONValue): JSONValue {\n const seen: Array<ReadonlyJSONValue> = [];\n return internalDeepClone(value, seen);\n}\n\nexport function internalDeepClone(\n value: ReadonlyJSONValue,\n seen: Array<ReadonlyJSONValue>,\n): JSONValue {\n switch (typeof value) {\n case 'boolean':\n case 'number':\n case 'string':\n case 'undefined':\n return value;\n case 'object': {\n if (value === null) {\n return null;\n }\n if (seen.includes(value)) {\n throw new Error('Cyclic object');\n }\n seen.push(value);\n if (Array.isArray(value)) {\n const rv = value.map(v => internalDeepClone(v, seen));\n seen.pop();\n return rv;\n }\n\n const obj: JSONValue = {};\n\n for (const k in value) {\n if (hasOwn(value, k)) {\n const v = (value as Record<string, ReadonlyJSONValue>)[k];\n if (v !== undefined) {\n obj[k] = internalDeepClone(v, seen);\n }\n }\n }\n seen.pop();\n return obj;\n }\n\n default:\n throw new Error(`Invalid type: ${typeof value}`);\n }\n}\n", "import {createContext, useContext} from 'react';\nimport type {Zero} from '../../zero-client/src/mod.js';\nimport type {Schema} from '../../zero-schema/src/mod.js';\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nconst ZeroContext = createContext<Zero<Schema> | undefined>(undefined);\n\nexport function useZero<S extends Schema>(): Zero<S> {\n const zero = useContext(ZeroContext);\n if (zero === undefined) {\n throw new Error('useZero must be used within a ZeroProvider');\n }\n return zero as Zero<S>;\n}\n\nexport function createUseZero<S extends Schema>() {\n return () => useZero<S>();\n}\n\nexport function ZeroProvider<S extends Schema>({\n children,\n zero,\n}: {\n children: React.ReactNode;\n zero: Zero<S>;\n}) {\n return (\n <ZeroContext.Provider value={zero as Zero<Schema>}>\n {children}\n </ZeroContext.Provider>\n );\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import {useSyncExternalStore} from 'react';\nimport {deepClone} from '../../shared/src/deep-clone.js';\nimport type {Immutable} from '../../shared/src/immutable.js';\nimport type {\n Query,\n QueryType,\n ReadonlyJSONValue,\n Smash,\n TypedView,\n} from '../../zero-client/src/mod.js';\nimport type {AdvancedQuery} from '../../zql/src/query/query-internal.js';\nimport {useZero} from './use-zero.js';\nimport type {TableSchema} from '../../zero-schema/src/table-schema.js';\n\nexport function useQuery<\n TSchema extends TableSchema,\n TReturn extends QueryType,\n>(q: Query<TSchema, TReturn>, enable: boolean = true): Smash<TReturn> {\n const z = useZero();\n const view = viewStore.getView(\n z.clientID,\n q as AdvancedQuery<TSchema, TReturn>,\n enable,\n );\n // https://react.dev/reference/react/useSyncExternalStore\n return useSyncExternalStore(view.subscribeReactInternals, view.getSnapshot);\n}\n\nconst emptyArray: unknown[] = [];\nconst disabledSubscriber = () => () => {};\n\n/**\n * A global store of all active views.\n *\n * React subscribes and unsubscribes to these views\n * via `useSyncExternalStore`.\n *\n * Managing views through `useEffect` or `useLayoutEffect` causes\n * inconsistencies because effects run after render.\n *\n * For example, if useQuery used use*Effect in the component below:\n * ```ts\n * function Foo({issueID}) {\n * const issue = useQuery(z.query.issue.where('id', issueID).one());\n * if (issue?.id !== undefined && issue.id !== issueID) {\n * console.log('MISMATCH!', issue.id, issueID);\n * }\n * }\n * ```\n *\n * `MISMATCH` will be printed whenever the `issueID` prop changes.\n *\n * This is because the component will render once with\n * the old state returned from `useQuery`. Then the effect inside\n * `useQuery` will run. The component will render again with the new\n * state. This inconsistent transition can cause unexpected results.\n *\n * Emulating `useEffect` via `useState` and `if` causes resource leaks.\n * That is:\n *\n * ```ts\n * function useQuery(q) {\n * const [oldHash, setOldHash] = useState();\n * if (hash(q) !== oldHash) {\n * // make new view\n * }\n *\n * useEffect(() => {\n * return () => view.destroy();\n * }, []);\n * }\n * ```\n *\n * I'm not sure why but in strict mode the cleanup function\n * fails to be called for the first instance of the view and only\n * cleans up later instances.\n *\n * Swapping `useState` to `useRef` has similar problems.\n */\nclass ViewStore {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n #views = new Map<string, ViewWrapper<any, any>>();\n\n getView<TSchema extends TableSchema, TReturn extends QueryType>(\n clientID: string,\n query: AdvancedQuery<TSchema, TReturn>,\n enabled: boolean,\n ): {\n getSnapshot: () => Smash<TReturn>;\n subscribeReactInternals: (internals: () => void) => () => void;\n } {\n if (!enabled) {\n return {\n getSnapshot: () =>\n (query.format.singular ? undefined : emptyArray) as Smash<TReturn>,\n subscribeReactInternals: disabledSubscriber,\n };\n }\n\n const hash = query.hash() + clientID;\n let existing = this.#views.get(hash);\n if (!existing) {\n existing = new ViewWrapper(\n query,\n view => {\n const lastView = this.#views.get(hash);\n // I don't think this can happen\n // but lets guard against it so we don't\n // leak resources.\n if (lastView && lastView !== view) {\n throw new Error('View already exists');\n }\n this.#views.set(hash, view);\n },\n () => {\n this.#views.delete(hash);\n },\n ) as ViewWrapper<TSchema, TReturn>;\n this.#views.set(hash, existing);\n }\n return existing as ViewWrapper<TSchema, TReturn>;\n }\n}\n\nconst viewStore = new ViewStore();\n\n/**\n * This wraps and ref counts a view.\n *\n * The only signal we have from React as to whether or not it is\n * done with a view is when it calls `unsubscribe`.\n *\n * In non-strict-mode we can clean up the view as soon\n * as the listener count goes to 0.\n *\n * In strict-mode, the listener cound will go to 0 then a\n * new listener for the same view is immeidatiely added back.\n *\n * This is why the `onMaterialized` and `onDematerialized` callbacks exist --\n * they allow a view which React is still referencing to be added\n * back into the store when React re-subscribes to it.\n *\n * This wrapper also exists to deal with the various\n * `useSyncExternalStore` caveats that cause excessive\n * re-renders and materializations.\n *\n * See: https://react.dev/reference/react/useSyncExternalStore#caveats\n * Especially:\n * 1. The store snapshot returned by getSnapshot must be immutable. If the underlying store has mutable data, return a new immutable snapshot if the data has changed. Otherwise, return a cached last snapshot.\n * 2. If a different subscribe function is passed during a re-render, React will re-subscribe to the store using the newly passed subscribe function. You can prevent this by declaring subscribe outside the component.\n */\nclass ViewWrapper<TSchema extends TableSchema, TReturn extends QueryType> {\n #view: TypedView<Smash<TReturn>> | undefined;\n readonly #defaultSnapshot: Smash<TReturn>;\n readonly #onDematerialized;\n readonly #onMaterialized;\n readonly #query: AdvancedQuery<TSchema, TReturn>;\n #snapshot: Smash<TReturn>;\n #reactInternals: Set<() => void>;\n\n constructor(\n query: AdvancedQuery<TSchema, TReturn>,\n onMaterialized: (view: ViewWrapper<TSchema, TReturn>) => void,\n onDematerialized: () => void,\n ) {\n this.#defaultSnapshot = (query.format.singular\n ? undefined\n : emptyArray) as unknown as Smash<TReturn>;\n this.#snapshot = this.#defaultSnapshot;\n this.#onMaterialized = onMaterialized;\n this.#onDematerialized = onDematerialized;\n this.#reactInternals = new Set();\n this.#query = query;\n }\n\n #onData = (snap: Immutable<Smash<TReturn>>) => {\n this.#snapshot = (\n snap === undefined ? snap : deepClone(snap as ReadonlyJSONValue)\n ) as Smash<TReturn>;\n for (const internals of this.#reactInternals) {\n internals();\n }\n };\n\n #materializeIfNeeded = () => {\n if (this.#view) {\n return;\n }\n\n this.#view = this.#query.materialize();\n this.#view.addListener(this.#onData);\n\n this.#onMaterialized(this);\n };\n\n getSnapshot = () => this.#snapshot;\n\n subscribeReactInternals = (internals: () => void): (() => void) => {\n this.#reactInternals.add(internals);\n this.#materializeIfNeeded();\n return () => {\n this.#reactInternals.delete(internals);\n if (this.#reactInternals.size === 0) {\n this.#view?.destroy();\n this.#view = undefined;\n this.#onDematerialized();\n }\n };\n };\n}\n", "import {hasOwn} from './has-own.js';\nimport type {JSONValue, ReadonlyJSONValue} from './json.js';\n\nexport function deepClone(value: ReadonlyJSONValue): JSONValue {\n const seen: Array<ReadonlyJSONValue> = [];\n return internalDeepClone(value, seen);\n}\n\nexport function internalDeepClone(\n value: ReadonlyJSONValue,\n seen: Array<ReadonlyJSONValue>,\n): JSONValue {\n switch (typeof value) {\n case 'boolean':\n case 'number':\n case 'string':\n case 'undefined':\n return value;\n case 'object': {\n if (value === null) {\n return null;\n }\n if (seen.includes(value)) {\n throw new Error('Cyclic object');\n }\n seen.push(value);\n if (Array.isArray(value)) {\n const rv = value.map(v => internalDeepClone(v, seen));\n seen.pop();\n return rv;\n }\n\n const obj: JSONValue = {};\n\n for (const k in value) {\n if (hasOwn(value, k)) {\n const v = (value as Record<string, ReadonlyJSONValue>)[k];\n if (v !== undefined) {\n obj[k] = internalDeepClone(v, seen);\n }\n }\n }\n seen.pop();\n return obj;\n }\n\n default:\n throw new Error(`Invalid type: ${typeof value}`);\n }\n}\n", "import {createContext, useContext} from 'react';\nimport type {Zero} from '../../zero-client/src/mod.js';\nimport type {Schema} from '../../zero-schema/src/mod.js';\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nconst ZeroContext = createContext<unknown | undefined>(undefined);\n\nexport function useZero<S extends Schema>(): Zero<S> {\n const zero = useContext(ZeroContext);\n if (zero === undefined) {\n throw new Error('useZero must be used within a ZeroProvider');\n }\n return zero as Zero<S>;\n}\n\nexport function createUseZero<S extends Schema>() {\n return () => useZero<S>();\n}\n\nexport function ZeroProvider<S extends Schema>({\n children,\n zero,\n}: {\n children: React.ReactNode;\n zero: Zero<S>;\n}) {\n return <ZeroContext.Provider value={zero}>{children}</ZeroContext.Provider>;\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,5 +1,22 @@
1
1
  type GlobalThis = typeof globalThis;
2
2
  export declare function getBrowserGlobal<T extends keyof GlobalThis>(name: T): GlobalThis[T] | undefined;
3
+ /**
4
+ * Returns the global method with the given name, bound to the global object.
5
+ * This is important because some methods (e.g. `requestAnimationFrame`) are not
6
+ * bound to the global object by default.
7
+ *
8
+ * If you end up using {@linkcode getBrowserGlobal} instead in a case like this:
9
+ *
10
+ * ```js
11
+ * this.#raf = getBrowserGlobal('requestAnimationFrame') ?? rafFallback;
12
+ * ...
13
+ * this.#raf(() => ...);
14
+ * ```
15
+ *
16
+ * You will end up with `Uncaught TypeError: Illegal invocation` because `this`
17
+ * is not bound to the global object
18
+ */
19
+ export declare function getBrowserGlobalMethod<T extends keyof GlobalThis>(name: T): GlobalThis[T] | undefined;
3
20
  export declare function mustGetBrowserGlobal<T extends keyof GlobalThis>(name: T): GlobalThis[T];
4
21
  export {};
5
22
  //# sourceMappingURL=browser-env.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"browser-env.d.ts","sourceRoot":"","sources":["../../../../shared/src/browser-env.ts"],"names":[],"mappings":"AAIA,KAAK,UAAU,GAAG,OAAO,UAAU,CAAC;AAEpC,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,UAAU,EACzD,IAAI,EAAE,CAAC,GACN,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS,CAE3B;AAED,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,MAAM,UAAU,EAC7D,IAAI,EAAE,CAAC,GACN,UAAU,CAAC,CAAC,CAAC,CAQf"}
1
+ {"version":3,"file":"browser-env.d.ts","sourceRoot":"","sources":["../../../../shared/src/browser-env.ts"],"names":[],"mappings":"AAIA,KAAK,UAAU,GAAG,OAAO,UAAU,CAAC;AAEpC,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,UAAU,EACzD,IAAI,EAAE,CAAC,GACN,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS,CAE3B;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,MAAM,UAAU,EAC/D,IAAI,EAAE,CAAC,GACN,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS,CAE3B;AAED,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,MAAM,UAAU,EAC7D,IAAI,EAAE,CAAC,GACN,UAAU,CAAC,CAAC,CAAC,CAQf"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Expand/simplifies a type for display in Intellisense.
3
+ */
4
+ export type Expand<T> = T extends infer O ? {
5
+ [K in keyof O]: O[K];
6
+ } : never;
7
+ //# sourceMappingURL=expand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expand.d.ts","sourceRoot":"","sources":["../../../../shared/src/expand.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,GAAG;KAAE,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAC,GAAG,KAAK,CAAC"}
package/out/solid.js CHANGED
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  Zero
3
- } from "./chunk-INJ4WJHS.js";
3
+ } from "./chunk-PIFWXXO2.js";
4
4
  import "./chunk-HARIWJ2J.js";
5
5
  import "./chunk-ULOTOBTC.js";
6
6
  import {
7
7
  applyChange
8
- } from "./chunk-YCMA66NH.js";
8
+ } from "./chunk-5UY46OAF.js";
9
9
  import "./chunk-F5QR3K72.js";
10
10
 
11
11
  // ../zero-solid/src/create-zero.ts
@@ -36,17 +36,17 @@ var SolidView = class {
36
36
  this.#input = input;
37
37
  this.#format = format;
38
38
  this.#onDestroy = onDestroy;
39
- this.#input.setOutput(this);
40
39
  [this.#root, this.#setRoot] = createStore({
41
40
  "": format.singular ? void 0 : []
42
41
  });
42
+ input.setOutput(this);
43
43
  this.#setRoot(
44
44
  produce((draftRoot) => {
45
- for (const node of this.#input.fetch({})) {
45
+ for (const node of input.fetch({})) {
46
46
  applyChange(
47
47
  draftRoot,
48
48
  { type: "add", node },
49
- this.#input.getSchema(),
49
+ input.getSchema(),
50
50
  "",
51
51
  this.#format
52
52
  );
package/out/solid.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../zero-solid/src/create-zero.ts", "../../zero-solid/src/use-query.ts", "../../zero-solid/src/solid-view.ts"],
4
- "sourcesContent": ["import {batch} from 'solid-js';\nimport {Zero, type ZeroOptions} from '../../zero-client/src/mod.js';\nimport type {ZeroAdvancedOptions} from '../../zero-advanced/src/mod.js';\nimport type {Schema} from '../../zero-schema/src/mod.js';\n\nexport function createZero<S extends Schema>(options: ZeroOptions<S>): Zero<S> {\n const opts: ZeroAdvancedOptions<S> = {\n ...options,\n batchViewUpdates: batch,\n };\n return new Zero(opts);\n}\n", "import {type Accessor, createMemo, onCleanup} from 'solid-js';\nimport type {\n Query,\n AdvancedQuery,\n QueryType,\n Smash,\n TableSchema,\n} from '../../zero-advanced/src/mod.js';\nimport {solidViewFactory} from './solid-view.js';\n\nexport function useQuery<\n TSchema extends TableSchema,\n TReturn extends QueryType,\n>(querySignal: () => Query<TSchema, TReturn>): Accessor<Smash<TReturn>> {\n return createMemo(() => {\n const query = querySignal();\n const view = (query as AdvancedQuery<TSchema, TReturn>).materialize(\n solidViewFactory,\n );\n\n onCleanup(() => {\n view.destroy();\n });\n\n return view.data;\n });\n}\n", "import {createStore, produce, type SetStoreFunction} from 'solid-js/store';\nimport {\n applyChange,\n type Change,\n type Entry,\n type Format,\n type Input,\n type Output,\n type Query,\n type QueryType,\n type Smash,\n type TableSchema,\n type View,\n} from '../../zero-advanced/src/mod.js';\n\nexport class SolidView<V extends View> implements Output {\n readonly #input: Input;\n readonly #format: Format;\n readonly #onDestroy: () => void;\n\n // Synthetic \"root\" entry that has a single \"\" relationship, so that we can\n // treat all changes, including the root change, generically.\n readonly #root: Entry;\n readonly #setRoot: SetStoreFunction<Entry>;\n\n constructor(\n input: Input,\n format: Format = {singular: false, relationships: {}},\n onDestroy: () => void = () => {},\n ) {\n this.#input = input;\n this.#format = format;\n this.#onDestroy = onDestroy;\n this.#input.setOutput(this);\n [this.#root, this.#setRoot] = createStore({\n '': format.singular ? undefined : [],\n });\n\n this.#setRoot(\n produce(draftRoot => {\n for (const node of this.#input.fetch({})) {\n applyChange(\n draftRoot,\n {type: 'add', node},\n this.#input.getSchema(),\n '',\n this.#format,\n );\n }\n }),\n );\n }\n\n get data() {\n return this.#root[''] as V;\n }\n\n destroy() {\n this.#onDestroy();\n }\n\n push(change: Change): void {\n this.#setRoot(\n produce(draftRoot => {\n applyChange(\n draftRoot,\n change,\n this.#input.getSchema(),\n '',\n this.#format,\n );\n }),\n );\n }\n}\n\nexport function solidViewFactory<\n TSchema extends TableSchema,\n TReturn extends QueryType,\n>(\n _query: Query<TSchema, TReturn>,\n input: Input,\n format: Format,\n onDestroy: () => void,\n): SolidView<Smash<TReturn>> {\n const v = new SolidView<Smash<TReturn>>(input, format, onDestroy);\n\n return v;\n}\n"],
5
- "mappings": ";;;;;;;;;;;AAAA,SAAQ,aAAY;AAKb,SAAS,WAA6B,SAAkC;AAC7E,QAAM,OAA+B;AAAA,IACnC,GAAG;AAAA,IACH,kBAAkB;AAAA,EACpB;AACA,SAAO,IAAI,KAAK,IAAI;AACtB;;;ACXA,SAAuB,YAAY,iBAAgB;;;ACAnD,SAAQ,aAAa,eAAqC;AAenD,IAAM,YAAN,MAAkD;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA,EAIA;AAAA,EACA;AAAA,EAET,YACE,OACA,SAAiB,EAAC,UAAU,OAAO,eAAe,CAAC,EAAC,GACpD,YAAwB,MAAM;AAAA,EAAC,GAC/B;AACA,SAAK,SAAS;AACd,SAAK,UAAU;AACf,SAAK,aAAa;AAClB,SAAK,OAAO,UAAU,IAAI;AAC1B,KAAC,KAAK,OAAO,KAAK,QAAQ,IAAI,YAAY;AAAA,MACxC,IAAI,OAAO,WAAW,SAAY,CAAC;AAAA,IACrC,CAAC;AAED,SAAK;AAAA,MACH,QAAQ,eAAa;AACnB,mBAAW,QAAQ,KAAK,OAAO,MAAM,CAAC,CAAC,GAAG;AACxC;AAAA,YACE;AAAA,YACA,EAAC,MAAM,OAAO,KAAI;AAAA,YAClB,KAAK,OAAO,UAAU;AAAA,YACtB;AAAA,YACA,KAAK;AAAA,UACP;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,IAAI,OAAO;AACT,WAAO,KAAK,MAAM,EAAE;AAAA,EACtB;AAAA,EAEA,UAAU;AACR,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,KAAK,QAAsB;AACzB,SAAK;AAAA,MACH,QAAQ,eAAa;AACnB;AAAA,UACE;AAAA,UACA;AAAA,UACA,KAAK,OAAO,UAAU;AAAA,UACtB;AAAA,UACA,KAAK;AAAA,QACP;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEO,SAAS,iBAId,QACA,OACA,QACA,WAC2B;AAC3B,QAAM,IAAI,IAAI,UAA0B,OAAO,QAAQ,SAAS;AAEhE,SAAO;AACT;;;AD9EO,SAAS,SAGd,aAAsE;AACtE,SAAO,WAAW,MAAM;AACtB,UAAM,QAAQ,YAAY;AAC1B,UAAM,OAAQ,MAA0C;AAAA,MACtD;AAAA,IACF;AAEA,cAAU,MAAM;AACd,WAAK,QAAQ;AAAA,IACf,CAAC;AAED,WAAO,KAAK;AAAA,EACd,CAAC;AACH;",
4
+ "sourcesContent": ["import {batch} from 'solid-js';\nimport {Zero, type ZeroOptions} from '../../zero-client/src/mod.js';\nimport type {ZeroAdvancedOptions} from '../../zero-advanced/src/mod.js';\nimport type {Schema} from '../../zero-schema/src/mod.js';\n\nexport function createZero<S extends Schema>(options: ZeroOptions<S>): Zero<S> {\n const opts: ZeroAdvancedOptions<S> = {\n ...options,\n batchViewUpdates: batch,\n };\n return new Zero(opts);\n}\n", "import {type Accessor, createMemo, onCleanup} from 'solid-js';\nimport type {\n Query,\n AdvancedQuery,\n QueryType,\n Smash,\n TableSchema,\n} from '../../zero-advanced/src/mod.js';\nimport {solidViewFactory} from './solid-view.js';\n\nexport function useQuery<\n TSchema extends TableSchema,\n TReturn extends QueryType,\n>(querySignal: () => Query<TSchema, TReturn>): Accessor<Smash<TReturn>> {\n return createMemo(() => {\n const query = querySignal();\n const view = (query as AdvancedQuery<TSchema, TReturn>).materialize(\n solidViewFactory,\n );\n\n onCleanup(() => {\n view.destroy();\n });\n\n return view.data;\n });\n}\n", "import {createStore, produce, type SetStoreFunction} from 'solid-js/store';\nimport {\n applyChange,\n type Change,\n type Entry,\n type Format,\n type Input,\n type Output,\n type Query,\n type QueryType,\n type Smash,\n type TableSchema,\n type View,\n} from '../../zero-advanced/src/mod.js';\n\nexport class SolidView<V extends View> implements Output {\n readonly #input: Input;\n readonly #format: Format;\n readonly #onDestroy: () => void;\n\n // Synthetic \"root\" entry that has a single \"\" relationship, so that we can\n // treat all changes, including the root change, generically.\n readonly #root: Entry;\n readonly #setRoot: SetStoreFunction<Entry>;\n\n constructor(\n input: Input,\n format: Format = {singular: false, relationships: {}},\n onDestroy: () => void = () => {},\n ) {\n this.#input = input;\n this.#format = format;\n this.#onDestroy = onDestroy;\n [this.#root, this.#setRoot] = createStore({\n '': format.singular ? undefined : [],\n });\n input.setOutput(this);\n\n this.#setRoot(\n produce(draftRoot => {\n for (const node of input.fetch({})) {\n applyChange(\n draftRoot,\n {type: 'add', node},\n input.getSchema(),\n '',\n this.#format,\n );\n }\n }),\n );\n }\n\n get data() {\n return this.#root[''] as V;\n }\n\n destroy() {\n this.#onDestroy();\n }\n\n push(change: Change): void {\n this.#setRoot(\n produce(draftRoot => {\n applyChange(\n draftRoot,\n change,\n this.#input.getSchema(),\n '',\n this.#format,\n );\n }),\n );\n }\n}\n\nexport function solidViewFactory<\n TSchema extends TableSchema,\n TReturn extends QueryType,\n>(\n _query: Query<TSchema, TReturn>,\n input: Input,\n format: Format,\n onDestroy: () => void,\n): SolidView<Smash<TReturn>> {\n const v = new SolidView<Smash<TReturn>>(input, format, onDestroy);\n\n return v;\n}\n"],
5
+ "mappings": ";;;;;;;;;;;AAAA,SAAQ,aAAY;AAKb,SAAS,WAA6B,SAAkC;AAC7E,QAAM,OAA+B;AAAA,IACnC,GAAG;AAAA,IACH,kBAAkB;AAAA,EACpB;AACA,SAAO,IAAI,KAAK,IAAI;AACtB;;;ACXA,SAAuB,YAAY,iBAAgB;;;ACAnD,SAAQ,aAAa,eAAqC;AAenD,IAAM,YAAN,MAAkD;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA,EAIA;AAAA,EACA;AAAA,EAET,YACE,OACA,SAAiB,EAAC,UAAU,OAAO,eAAe,CAAC,EAAC,GACpD,YAAwB,MAAM;AAAA,EAAC,GAC/B;AACA,SAAK,SAAS;AACd,SAAK,UAAU;AACf,SAAK,aAAa;AAClB,KAAC,KAAK,OAAO,KAAK,QAAQ,IAAI,YAAY;AAAA,MACxC,IAAI,OAAO,WAAW,SAAY,CAAC;AAAA,IACrC,CAAC;AACD,UAAM,UAAU,IAAI;AAEpB,SAAK;AAAA,MACH,QAAQ,eAAa;AACnB,mBAAW,QAAQ,MAAM,MAAM,CAAC,CAAC,GAAG;AAClC;AAAA,YACE;AAAA,YACA,EAAC,MAAM,OAAO,KAAI;AAAA,YAClB,MAAM,UAAU;AAAA,YAChB;AAAA,YACA,KAAK;AAAA,UACP;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,IAAI,OAAO;AACT,WAAO,KAAK,MAAM,EAAE;AAAA,EACtB;AAAA,EAEA,UAAU;AACR,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,KAAK,QAAsB;AACzB,SAAK;AAAA,MACH,QAAQ,eAAa;AACnB;AAAA,UACE;AAAA,UACA;AAAA,UACA,KAAK,OAAO,UAAU;AAAA,UACtB;AAAA,UACA,KAAK;AAAA,QACP;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEO,SAAS,iBAId,QACA,OACA,QACA,WAC2B;AAC3B,QAAM,IAAI,IAAI,UAA0B,OAAO,QAAQ,SAAS;AAEhE,SAAO;AACT;;;AD9EO,SAAS,SAGd,aAAsE;AACtE,SAAO,WAAW,MAAM;AACtB,UAAM,QAAQ,YAAY;AAC1B,UAAM,OAAQ,MAA0C;AAAA,MACtD;AAAA,IACF;AAEA,cAAU,MAAM;AACd,WAAK,QAAQ;AAAA,IACf,CAAC;AAED,WAAO,KAAK;AAAA,EACd,CAAC;AACH;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,3 @@
1
+ import type { AuthorizationConfig } from '../../../zero-schema/src/compiled-authorization.js';
2
+ export declare function getAuthorizationConfig(): Promise<AuthorizationConfig>;
3
+ //# sourceMappingURL=load-authorization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-authorization.d.ts","sourceRoot":"","sources":["../../../../../zero-cache/src/auth/load-authorization.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,oDAAoD,CAAC;AAM5F,wBAAgB,sBAAsB,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAsBrE"}
@@ -0,0 +1,21 @@
1
+ import path from 'node:path';
2
+ import { fileURLToPath } from 'node:url';
3
+ import { tsImport } from 'tsx/esm/api';
4
+ let loadedConfig;
5
+ export function getAuthorizationConfig() {
6
+ if (loadedConfig) {
7
+ return loadedConfig;
8
+ }
9
+ const dirname = path.dirname(fileURLToPath(import.meta.url));
10
+ const configFile = process.env['ZERO_CONFIG_PATH'] ?? './schema.ts';
11
+ const absoluteConfigPath = path.resolve(configFile);
12
+ const relativePath = path.join(path.relative(dirname, path.dirname(absoluteConfigPath)), path.basename(absoluteConfigPath));
13
+ loadedConfig = tsImport(relativePath, import.meta.url)
14
+ .then(async (module) => (await module.authorization))
15
+ .catch(e => {
16
+ console.error(`Failed to load zero schema from ${absoluteConfigPath}: ${e}`);
17
+ throw e;
18
+ });
19
+ return loadedConfig;
20
+ }
21
+ //# sourceMappingURL=load-authorization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-authorization.js","sourceRoot":"","sources":["../../../../../zero-cache/src/auth/load-authorization.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAC,aAAa,EAAC,MAAM,UAAU,CAAC;AACvC,OAAO,EAAC,QAAQ,EAAC,MAAM,aAAa,CAAC;AAErC,IAAI,YAAsD,CAAC;AAE3D,MAAM,UAAU,sBAAsB;IACpC,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7D,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,aAAa,CAAC;IACpE,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACpD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAC5B,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,EACxD,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAClC,CAAC;IAEF,YAAY,GAAG,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;SACnD,IAAI,CAAC,KAAK,EAAC,MAAM,EAAC,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,aAAa,CAAwB,CAAC;SACzE,KAAK,CAAC,CAAC,CAAC,EAAE;QACT,OAAO,CAAC,KAAK,CACX,mCAAmC,kBAAkB,KAAK,CAAC,EAAE,CAC9D,CAAC;QACF,MAAM,CAAC,CAAC;IACV,CAAC,CAAC,CAAC;IACL,OAAO,YAAY,CAAC;AACtB,CAAC"}
@@ -0,0 +1,112 @@
1
+ import type { OptionalLogger } from '@rocicorp/logger';
2
+ import * as v from '../../../shared/src/valita.js';
3
+ type RequiredOptionType = v.Type<string> | v.Type<number> | v.Type<boolean> | v.Type<string[]> | v.Type<number[]> | v.Type<boolean[]>;
4
+ type OptionalOptionType = v.Optional<string> | v.Optional<number> | v.Optional<boolean> | v.Optional<string[]> | v.Optional<number[]> | v.Optional<boolean[]>;
5
+ type OptionType = RequiredOptionType | OptionalOptionType;
6
+ export type WrappedOptionType = {
7
+ type: OptionType;
8
+ /** Description lines to be displayed in --help. */
9
+ desc?: string[];
10
+ /** One-character alias for getopt-style short flags, e.g. -m */
11
+ alias?: string;
12
+ /** Exclude this flag from --help text. Used for internal flags. */
13
+ hidden?: boolean;
14
+ };
15
+ export type Option = OptionType | WrappedOptionType;
16
+ type Group = Record<string, Option>;
17
+ /**
18
+ * # Options
19
+ *
20
+ * An `Options` object specifies of a set of (possibly grouped) configuration
21
+ * values that are parsed from environment variables and/or command line flags.
22
+ *
23
+ * Each option is represented by a `valita` schema object. The `Options`
24
+ * type supports one level of grouping for organizing related options.
25
+ *
26
+ * ```ts
27
+ * {
28
+ * port: v.number().default(8080),
29
+ *
30
+ * numWorkers: v.number(),
31
+ *
32
+ * log: {
33
+ * level: v.union(v.literal('debug'), v.literal('info'), ...),
34
+ * format: v.union(v.literal('text'), v.literal('json')).default('text'),
35
+ * }
36
+ * }
37
+ * ```
38
+ *
39
+ * {@link parseOptions()} will use an `Options` object to populate a {@link Config}
40
+ * instance of the corresponding shape, consulting SNAKE_CASE environment variables
41
+ * and/or camelCase command line flags, with flags taking precedence, based on the field
42
+ * (and group) names:
43
+ *
44
+ * | Option | Flag | Env |
45
+ * | -------------- | ------------- | ----------- |
46
+ * | port | --port | PORT |
47
+ * | numWorkers | --num-workers | NUM_WORKERS |
48
+ * | log: { level } | --log-level | LOG_LEVEL |
49
+ * | log: { format } | --log-format | LOG_FORMAT |
50
+ *
51
+ * `Options` supports:
52
+ * * primitive valita types `string`, `number`, `boolean`
53
+ * * single-type arrays or tuples of primitives
54
+ * * optional values
55
+ * * default values
56
+ *
57
+ * ### Additional Flag Configuration
58
+ *
59
+ * {@link parseOptions()} will generate a usage guide that is displayed for
60
+ * the `--help` or `-h` flags, displaying the flag name, env name, value
61
+ * type (or enumeration), and default values based on the valita schema.
62
+ *
63
+ * For additional configuration, each object can instead by represented by
64
+ * a {@link WrappedOptionType}, where the valita schema is held in the `type`
65
+ * field, along with additional optional fields:
66
+ * * `desc` for documentation displayed in `--help`
67
+ * * `alias` for getopt-style short flags like `-m`
68
+ */
69
+ export type Options = Record<string, Group | Option>;
70
+ /** Unwrap the Value type from an Option<V>. */
71
+ type ValueOf<T extends Option> = T extends v.Optional<infer V> ? V | undefined : T extends v.Type<infer V> ? V : T extends WrappedOptionType ? ValueOf<T['type']> : never;
72
+ type Required = RequiredOptionType | (WrappedOptionType & {
73
+ type: RequiredOptionType;
74
+ });
75
+ type Optional = OptionalOptionType | (WrappedOptionType & {
76
+ type: OptionalOptionType;
77
+ });
78
+ type ConfigGroup<G extends Group> = {
79
+ [P in keyof G as G[P] extends Required ? P : never]: ValueOf<G[P]>;
80
+ } & {
81
+ [P in keyof G as G[P] extends Optional ? P : never]?: ValueOf<G[P]>;
82
+ };
83
+ /**
84
+ * A Config is an object containing values parsed from an {@link Options} object.
85
+ *
86
+ * Example:
87
+ *
88
+ * ```ts
89
+ * {
90
+ * port: number;
91
+ *
92
+ * numWorkers: number;
93
+ *
94
+ * // The "log" group
95
+ * log: {
96
+ * level: 'debug' | 'info' | 'warn' | 'error';
97
+ * format: 'text' | 'json'
98
+ * };
99
+ * ...
100
+ * }
101
+ * ```
102
+ */
103
+ export type Config<O extends Options> = {
104
+ [P in keyof O as O[P] extends Required | Group ? P : never]: O[P] extends Required ? ValueOf<O[P]> : O[P] extends Group ? ConfigGroup<O[P]> : never;
105
+ } & {
106
+ [P in keyof O as O[P] extends Optional ? P : never]?: O[P] extends Optional ? ValueOf<O[P]> : never;
107
+ };
108
+ export declare function parseOptions<T extends Options>(options: T, argv: string[], envNamePrefix?: string, processEnv?: NodeJS.ProcessEnv, logger?: OptionalLogger): Config<T>;
109
+ export declare class ExitAfterUsage extends Error {
110
+ }
111
+ export {};
112
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../../zero-cache/src/config/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,246 @@
1
+ import { template } from 'chalk-template';
2
+ import commandLineArgs from 'command-line-args';
3
+ import commandLineUsage from 'command-line-usage';
4
+ import kebabcase from 'lodash.kebabcase';
5
+ import merge from 'lodash.merge';
6
+ import snakeCase from 'lodash.snakecase';
7
+ import stripAnsi from 'strip-ansi';
8
+ import { assert } from '../../../shared/src/asserts.js';
9
+ import { must } from '../../../shared/src/must.js';
10
+ import * as v from '../../../shared/src/valita.js';
11
+ /**
12
+ * Converts an Options instance into its corresponding {@link Config} schema.
13
+ */
14
+ function configSchema(options) {
15
+ function makeObjectType(options) {
16
+ return v.object(Object.fromEntries(Object.entries(options).map(([name, value]) => {
17
+ // OptionType
18
+ if (v.instanceOfAbstractType(value)) {
19
+ return [name, value];
20
+ }
21
+ // WrappedOptionType
22
+ const { type } = value;
23
+ if (v.instanceOfAbstractType(type)) {
24
+ return [name, type];
25
+ }
26
+ // OptionGroup
27
+ return [name, makeObjectType(value)];
28
+ })));
29
+ }
30
+ return makeObjectType(options);
31
+ }
32
+ export function parseOptions(options, argv, envNamePrefix = '', processEnv = process.env, logger = console) {
33
+ // The main logic for converting a valita Type spec to an Option (i.e. flag) spec.
34
+ function addOption(name, option, group) {
35
+ const { type, desc = [], alias, hidden } = option;
36
+ // The group name is prepended to the flag name.
37
+ const flag = group ? kebabcase(`${group}-${name}`) : kebabcase(name);
38
+ flagToField.set(flag, name);
39
+ const defaultResult = v.testOptional(undefined, type);
40
+ const required = !defaultResult.ok;
41
+ const defaultValue = defaultResult.ok ? defaultResult.value : undefined;
42
+ let multiple = type.name === 'array';
43
+ const literals = new Set();
44
+ const terminalTypes = new Set();
45
+ type.toTerminals(getTerminalTypes);
46
+ function getTerminalTypes(t) {
47
+ switch (t.name) {
48
+ case 'undefined':
49
+ case 'optional':
50
+ break;
51
+ case 'array': {
52
+ multiple = true;
53
+ t.prefix.forEach(t => t.toTerminals(getTerminalTypes));
54
+ t.rest?.toTerminals(getTerminalTypes);
55
+ t.suffix.forEach(t => t.toTerminals(getTerminalTypes));
56
+ break;
57
+ }
58
+ case 'literal':
59
+ literals.add(String(t.value));
60
+ terminalTypes.add(typeof t.value);
61
+ break;
62
+ default:
63
+ terminalTypes.add(t.name);
64
+ break;
65
+ }
66
+ }
67
+ if (terminalTypes.size > 1) {
68
+ throw new TypeError(`--${flag} has mixed types ${[...terminalTypes]}`);
69
+ }
70
+ assert(terminalTypes.size === 1);
71
+ const terminalType = [...terminalTypes][0];
72
+ const env = snakeCase(`${envNamePrefix}${flag}`).toUpperCase();
73
+ if (processEnv[env]) {
74
+ if (multiple) {
75
+ // Technically not water-tight; assumes values for the string[] flag don't contain commas.
76
+ envArgv.push(`--${flag}`, ...processEnv[env].split(','));
77
+ }
78
+ else {
79
+ envArgv.push(`--${flag}`, processEnv[env]);
80
+ }
81
+ }
82
+ const spec = [
83
+ (required
84
+ ? '{italic required}'
85
+ : defaultValue !== undefined
86
+ ? `default: ${JSON.stringify(defaultValue)}`
87
+ : 'optional') + '\n',
88
+ ];
89
+ if (desc) {
90
+ spec.push(...desc);
91
+ }
92
+ const typeLabel = [
93
+ literals.size
94
+ ? String([...literals].map(l => `{underline ${l}}`))
95
+ : multiple
96
+ ? `{underline ${terminalType}[]}`
97
+ : `{underline ${terminalType}}`,
98
+ ` ${env} env`,
99
+ ];
100
+ const opt = {
101
+ name: flag,
102
+ alias,
103
+ type: valueParser(flag, terminalType),
104
+ multiple,
105
+ group,
106
+ description: spec.join('\n') + '\n',
107
+ typeLabel: typeLabel.join('\n') + '\n',
108
+ hidden,
109
+ };
110
+ optsWithoutDefaults.push(opt);
111
+ optsWithDefaults.push({ ...opt, defaultValue });
112
+ }
113
+ const flagToField = new Map();
114
+ const optsWithDefaults = [];
115
+ const optsWithoutDefaults = [];
116
+ const envArgv = [];
117
+ try {
118
+ for (const [name, val] of Object.entries(options)) {
119
+ const { type } = val;
120
+ if (v.instanceOfAbstractType(val)) {
121
+ addOption(name, { type: val });
122
+ }
123
+ else if (v.instanceOfAbstractType(type)) {
124
+ addOption(name, val);
125
+ }
126
+ else {
127
+ const group = name;
128
+ for (const [name, option] of Object.entries(val)) {
129
+ const wrapped = v.instanceOfAbstractType(option)
130
+ ? { type: option }
131
+ : option;
132
+ addOption(name, wrapped, group);
133
+ }
134
+ }
135
+ }
136
+ const parsedArgs = merge(parseArgs(optsWithDefaults, argv, flagToField, logger), parseArgs(optsWithoutDefaults, envArgv, flagToField, logger), parseArgs(optsWithoutDefaults, argv, flagToField, logger));
137
+ const schema = configSchema(options);
138
+ return v.parse(parsedArgs, schema);
139
+ }
140
+ catch (e) {
141
+ if (!(e instanceof ExitAfterUsage)) {
142
+ logger.error?.(String(e));
143
+ showUsage(optsWithDefaults, logger);
144
+ }
145
+ throw e;
146
+ }
147
+ }
148
+ function valueParser(flagName, typeName) {
149
+ return (input) => {
150
+ switch (typeName) {
151
+ case 'string':
152
+ return input;
153
+ case 'boolean': {
154
+ const bool = input.toLowerCase();
155
+ if (['true', '1'].includes(bool)) {
156
+ return true;
157
+ }
158
+ else if (['false', '0'].includes(bool)) {
159
+ return false;
160
+ }
161
+ throw new TypeError(`Invalid input for --${flagName}: "${input}"`);
162
+ }
163
+ case 'number': {
164
+ const val = Number(input);
165
+ if (Number.isNaN(val)) {
166
+ throw new TypeError(`Invalid input for --${flagName}: "${input}"`);
167
+ }
168
+ return val;
169
+ }
170
+ default:
171
+ // Should be impossible given the constraints of `Option`
172
+ throw new TypeError(`--${flagName} flag has unsupported type ${typeName}`);
173
+ }
174
+ };
175
+ }
176
+ function parseArgs(optionDefs, argv, flagToField, logger) {
177
+ function normalizeFlagValue(value) {
178
+ // A --flag without value is parsed by commandLineArgs() to `null`,
179
+ // but this is a common convention to set a boolean flag to true.
180
+ return value === null ? true : value;
181
+ }
182
+ const { _all, _none: ungrouped, _unknown: unknown, ...config // initially contains groups only
183
+ } = commandLineArgs(optionDefs, {
184
+ argv,
185
+ partial: true,
186
+ });
187
+ if (unknown?.length) {
188
+ switch (unknown[0]) {
189
+ case '--help':
190
+ case '-h':
191
+ break;
192
+ default:
193
+ logger.error?.('Invalid arguments:', unknown);
194
+ }
195
+ showUsage(optionDefs, logger);
196
+ throw new ExitAfterUsage();
197
+ }
198
+ // Remap names for grouped flags.
199
+ for (const group of Object.values(config ?? {})) {
200
+ for (const [flagName, value] of Object.entries(group)) {
201
+ delete group[flagName];
202
+ const name = must(flagToField.get(flagName));
203
+ group[name] = normalizeFlagValue(value);
204
+ }
205
+ }
206
+ // Normalize and promote ungrouped flags.
207
+ for (const [flagName, value] of Object.entries(ungrouped ?? {})) {
208
+ const name = must(flagToField.get(flagName));
209
+ config[name] = normalizeFlagValue(value);
210
+ }
211
+ return config;
212
+ }
213
+ function showUsage(optionList, logger = console) {
214
+ const hide = [];
215
+ let leftWidth = 35;
216
+ let rightWidth = 70;
217
+ optionList.forEach(({ name, typeLabel, description, hidden }) => {
218
+ if (hidden) {
219
+ hide.push(name);
220
+ }
221
+ const text = template(`${name} ${typeLabel ?? ''}`);
222
+ const lines = stripAnsi(text).split('\n');
223
+ for (const l of lines) {
224
+ leftWidth = Math.max(leftWidth, l.length + 2);
225
+ }
226
+ const desc = stripAnsi(template(description ?? '')).split('\n');
227
+ for (const l of desc) {
228
+ rightWidth = Math.max(rightWidth, l.length + 2);
229
+ }
230
+ });
231
+ logger.info?.(commandLineUsage({
232
+ optionList,
233
+ reverseNameOrder: true, // Display --flag-name before -alias
234
+ hide,
235
+ tableOptions: {
236
+ columns: [
237
+ { name: 'option', width: leftWidth },
238
+ { name: 'description', width: rightWidth },
239
+ ],
240
+ noTrim: true,
241
+ },
242
+ }));
243
+ }
244
+ export class ExitAfterUsage extends Error {
245
+ }
246
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../../zero-cache/src/config/config.ts"],"names":[],"mappings":"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"}