datahike 0.7.1661 → 0.8.1806

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 (162) hide show
  1. package/LICENSE +203 -0
  2. package/README.md +123 -8
  3. package/THIRD_PARTY_LICENSES.md +35 -0
  4. package/boring.core.js +3 -0
  5. package/boring.data.js +8 -0
  6. package/boring.frame.js +0 -0
  7. package/boring.options.js +18 -0
  8. package/boring.reader.js +5 -0
  9. package/boring.writer.js +3 -0
  10. package/browser/datahike.js +4165 -2756
  11. package/browser/index.mjs +26 -0
  12. package/cljs.cache.js +11 -15
  13. package/cljs.cache.wrapped.js +7 -3
  14. package/cljs.core.async.impl.channels.js +10 -14
  15. package/cljs.core.async.impl.dispatch.js +4 -4
  16. package/cljs.core.async.impl.ioc_helpers.js +3 -3
  17. package/cljs.core.async.impl.protocols.js +0 -2
  18. package/cljs.core.async.impl.timers.js +7 -7
  19. package/cljs.core.async.js +16 -14
  20. package/cljs.core.js +610 -593
  21. package/cljs.nodejs.js +1 -1
  22. package/cljs.reader.js +10 -10
  23. package/cljs.spec.alpha.js +71 -74
  24. package/cljs.tools.reader.edn.js +26 -27
  25. package/cljs.tools.reader.impl.commons.js +7 -7
  26. package/cljs.tools.reader.impl.errors.js +10 -10
  27. package/cljs.tools.reader.impl.inspect.js +4 -4
  28. package/cljs.tools.reader.impl.utils.js +3 -3
  29. package/cljs.tools.reader.js +2 -1
  30. package/cljs.tools.reader.reader_types.js +1 -1
  31. package/cljs_env.js +24 -27
  32. package/cljs_node_io.core.js +12 -8
  33. package/cljs_node_io.file.js +27 -26
  34. package/cljs_node_io.fs.js +2 -2
  35. package/clojure.data.js +14 -14
  36. package/clojure.set.js +1 -1
  37. package/clojure.string.js +11 -6
  38. package/clojure.walk.js +28 -22
  39. package/datahike.api.impl.js +35 -12
  40. package/datahike.api.js +16 -0
  41. package/datahike.api.specification.js +90 -53
  42. package/datahike.api.types.js +18 -14
  43. package/datahike.array.js +9 -1
  44. package/datahike.attr_preds.js +2 -0
  45. package/datahike.bitemporal.platform.js +0 -0
  46. package/datahike.bitemporal.predicate.js +2 -0
  47. package/datahike.config.js +50 -35
  48. package/datahike.connections.js +1 -1
  49. package/datahike.connector.js +68 -39
  50. package/datahike.constants.js +21 -12
  51. package/datahike.core.js +1 -1
  52. package/datahike.datom.js +22 -18
  53. package/datahike.db.interface.js +13 -11
  54. package/datahike.db.js +95 -85
  55. package/datahike.db.search.js +50 -46
  56. package/datahike.db.transaction.js +12 -7
  57. package/datahike.db.utils.js +50 -30
  58. package/datahike.gc.js +12 -7
  59. package/datahike.gc_guard.js +2 -0
  60. package/datahike.gc_roots.js +3 -0
  61. package/datahike.impl.entity.js +16 -16
  62. package/datahike.index.audit.js +0 -0
  63. package/datahike.index.entity_set.js +0 -0
  64. package/datahike.index.interface.js +13 -13
  65. package/datahike.index.js +1 -1
  66. package/datahike.index.persistent_set.js +175 -357
  67. package/datahike.index.persistent_set.warm.js +2 -0
  68. package/datahike.index.secondary.js +3 -0
  69. package/datahike.js.api.js +238 -67
  70. package/datahike.lru.js +8 -6
  71. package/datahike.migrate.ids.js +2 -0
  72. package/datahike.online_gc.js +3 -2
  73. package/datahike.optimistic.js +13 -0
  74. package/datahike.pull_api.js +7 -8
  75. package/datahike.query.analyze.js +5 -0
  76. package/datahike.query.estimate.js +3 -0
  77. package/datahike.query.execute.js +8 -0
  78. package/datahike.query.ir.js +6 -0
  79. package/datahike.query.js +1387 -618
  80. package/datahike.query.logical.js +3 -0
  81. package/datahike.query.lower.js +3 -0
  82. package/datahike.query.plan.js +12 -0
  83. package/datahike.query.relation.js +2 -0
  84. package/datahike.query_stats.js +1 -1
  85. package/datahike.readers.js +12 -31
  86. package/datahike.schema.js +49 -37
  87. package/datahike.schema_cache.js +3 -4
  88. package/datahike.store.js +62 -69
  89. package/datahike.tools.js +7 -7
  90. package/datahike.tx_preds.js +2 -0
  91. package/datahike.versioning.js +4 -0
  92. package/datahike.warm.js +0 -0
  93. package/datahike.writer.js +750 -316
  94. package/datahike.writing.js +55 -57
  95. package/datalog.parser.impl.js +4 -4
  96. package/datalog.parser.impl.proto.js +1 -1
  97. package/datalog.parser.impl.util.js +1 -1
  98. package/datalog.parser.js +1 -1
  99. package/datalog.parser.pull.js +3 -3
  100. package/datalog.parser.type.js +32 -32
  101. package/environ.core.js +6 -6
  102. package/fress.api.js +1 -1
  103. package/fress.impl.adler32.js +4 -4
  104. package/fress.impl.bigdec.js +3 -0
  105. package/fress.impl.buffer.js +4 -4
  106. package/fress.impl.raw_input.js +1 -1
  107. package/fress.impl.raw_output.js +4 -4
  108. package/fress.impl.table.js +1 -1
  109. package/fress.reader.js +16 -16
  110. package/fress.util.js +11 -10
  111. package/fress.writer.js +25 -27
  112. package/geheimnis.aes.js +1 -1
  113. package/hasch.benc.js +3 -2
  114. package/hasch.core.js +11 -10
  115. package/hasch.platform.js +18 -16
  116. package/index.d.ts +428 -48
  117. package/is.simm.partial_cps.sequence.js +5 -4
  118. package/konserve.compressor.js +16 -10
  119. package/konserve.core.js +46 -25
  120. package/konserve.encryptor.js +11 -11
  121. package/konserve.gc.js +1 -1
  122. package/konserve.impl.defaults.js +16 -10
  123. package/konserve.impl.storage_layout.js +3 -2
  124. package/konserve.memory.js +2 -2
  125. package/konserve.node_filestore.js +592 -361
  126. package/konserve.protocols.js +6 -4
  127. package/konserve.serializers.js +21 -13
  128. package/konserve.store.js +89 -75
  129. package/konserve.tiered.js +11 -4
  130. package/konserve.utils.js +4 -3
  131. package/malli.core.js +301 -295
  132. package/malli.error.js +34 -32
  133. package/malli.impl.regex.js +1 -1
  134. package/malli.impl.util.js +1 -1
  135. package/malli.registry.js +1 -1
  136. package/malli.sci.js +1 -1
  137. package/malli.util.js +2 -0
  138. package/org.replikativ.persistent_sorted_set.branch.js +4 -2
  139. package/org.replikativ.persistent_sorted_set.btset.js +370 -2
  140. package/org.replikativ.persistent_sorted_set.fressian.js +6 -0
  141. package/org.replikativ.persistent_sorted_set.impl.boundary.js +2 -0
  142. package/org.replikativ.persistent_sorted_set.impl.nodes.js +3 -0
  143. package/org.replikativ.persistent_sorted_set.js +1 -1
  144. package/org.replikativ.persistent_sorted_set.leaf.js +2 -0
  145. package/org.replikativ.persistent_sorted_set.util.js +1 -1
  146. package/org.replikativ.persistent_sorted_set.warm.js +2 -0
  147. package/package.json +16 -7
  148. package/replikativ.logging.js +0 -0
  149. package/s3/datahike.js +4843 -0
  150. package/s3/index.js +4 -0
  151. package/s3/index.mjs +71 -0
  152. package/superv.async.js +26 -29
  153. package/tailrecursion.priority_map.js +17 -17
  154. package/taoensso.trove.console.js +2 -0
  155. package/taoensso.trove.js +4 -0
  156. package/taoensso.trove.utils.js +0 -0
  157. package/taoensso.encore.js +0 -43
  158. package/taoensso.timbre.appenders.core.js +0 -7
  159. package/taoensso.timbre.js +0 -46
  160. package/taoensso.truss.impl.js +0 -2
  161. package/taoensso.truss.js +0 -4
  162. package/test.js +0 -552
package/LICENSE ADDED
@@ -0,0 +1,203 @@
1
+ Eclipse Public License - v 1.0
2
+
3
+ THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC
4
+ LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM
5
+ CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
6
+
7
+ 1. DEFINITIONS
8
+
9
+ "Contribution" means:
10
+
11
+ a) in the case of the initial Contributor, the initial code and documentation
12
+ distributed under this Agreement, and
13
+ b) in the case of each subsequent Contributor:
14
+ i) changes to the Program, and
15
+ ii) additions to the Program;
16
+
17
+ where such changes and/or additions to the Program originate from and are
18
+ distributed by that particular Contributor. A Contribution 'originates'
19
+ from a Contributor if it was added to the Program by such Contributor
20
+ itself or anyone acting on such Contributor's behalf. Contributions do not
21
+ include additions to the Program which: (i) are separate modules of
22
+ software distributed in conjunction with the Program under their own
23
+ license agreement, and (ii) are not derivative works of the Program.
24
+
25
+ "Contributor" means any person or entity that distributes the Program.
26
+
27
+ "Licensed Patents" mean patent claims licensable by a Contributor which are
28
+ necessarily infringed by the use or sale of its Contribution alone or when
29
+ combined with the Program.
30
+
31
+ "Program" means the Contributions distributed in accordance with this
32
+ Agreement.
33
+
34
+ "Recipient" means anyone who receives the Program under this Agreement,
35
+ including all Contributors.
36
+
37
+ 2. GRANT OF RIGHTS
38
+ a) Subject to the terms of this Agreement, each Contributor hereby grants
39
+ Recipient a non-exclusive, worldwide, royalty-free copyright license to
40
+ reproduce, prepare derivative works of, publicly display, publicly
41
+ perform, distribute and sublicense the Contribution of such Contributor,
42
+ if any, and such derivative works, in source code and object code form.
43
+ b) Subject to the terms of this Agreement, each Contributor hereby grants
44
+ Recipient a non-exclusive, worldwide, royalty-free patent license under
45
+ Licensed Patents to make, use, sell, offer to sell, import and otherwise
46
+ transfer the Contribution of such Contributor, if any, in source code and
47
+ object code form. This patent license shall apply to the combination of
48
+ the Contribution and the Program if, at the time the Contribution is
49
+ added by the Contributor, such addition of the Contribution causes such
50
+ combination to be covered by the Licensed Patents. The patent license
51
+ shall not apply to any other combinations which include the Contribution.
52
+ No hardware per se is licensed hereunder.
53
+ c) Recipient understands that although each Contributor grants the licenses
54
+ to its Contributions set forth herein, no assurances are provided by any
55
+ Contributor that the Program does not infringe the patent or other
56
+ intellectual property rights of any other entity. Each Contributor
57
+ disclaims any liability to Recipient for claims brought by any other
58
+ entity based on infringement of intellectual property rights or
59
+ otherwise. As a condition to exercising the rights and licenses granted
60
+ hereunder, each Recipient hereby assumes sole responsibility to secure
61
+ any other intellectual property rights needed, if any. For example, if a
62
+ third party patent license is required to allow Recipient to distribute
63
+ the Program, it is Recipient's responsibility to acquire that license
64
+ before distributing the Program.
65
+ d) Each Contributor represents that to its knowledge it has sufficient
66
+ copyright rights in its Contribution, if any, to grant the copyright
67
+ license set forth in this Agreement.
68
+
69
+ 3. REQUIREMENTS
70
+
71
+ A Contributor may choose to distribute the Program in object code form under
72
+ its own license agreement, provided that:
73
+
74
+ a) it complies with the terms and conditions of this Agreement; and
75
+ b) its license agreement:
76
+ i) effectively disclaims on behalf of all Contributors all warranties
77
+ and conditions, express and implied, including warranties or
78
+ conditions of title and non-infringement, and implied warranties or
79
+ conditions of merchantability and fitness for a particular purpose;
80
+ ii) effectively excludes on behalf of all Contributors all liability for
81
+ damages, including direct, indirect, special, incidental and
82
+ consequential damages, such as lost profits;
83
+ iii) states that any provisions which differ from this Agreement are
84
+ offered by that Contributor alone and not by any other party; and
85
+ iv) states that source code for the Program is available from such
86
+ Contributor, and informs licensees how to obtain it in a reasonable
87
+ manner on or through a medium customarily used for software exchange.
88
+
89
+ When the Program is made available in source code form:
90
+
91
+ a) it must be made available under this Agreement; and
92
+ b) a copy of this Agreement must be included with each copy of the Program.
93
+ Contributors may not remove or alter any copyright notices contained
94
+ within the Program.
95
+
96
+ Each Contributor must identify itself as the originator of its Contribution,
97
+ if
98
+ any, in a manner that reasonably allows subsequent Recipients to identify the
99
+ originator of the Contribution.
100
+
101
+ 4. COMMERCIAL DISTRIBUTION
102
+
103
+ Commercial distributors of software may accept certain responsibilities with
104
+ respect to end users, business partners and the like. While this license is
105
+ intended to facilitate the commercial use of the Program, the Contributor who
106
+ includes the Program in a commercial product offering should do so in a manner
107
+ which does not create potential liability for other Contributors. Therefore,
108
+ if a Contributor includes the Program in a commercial product offering, such
109
+ Contributor ("Commercial Contributor") hereby agrees to defend and indemnify
110
+ every other Contributor ("Indemnified Contributor") against any losses,
111
+ damages and costs (collectively "Losses") arising from claims, lawsuits and
112
+ other legal actions brought by a third party against the Indemnified
113
+ Contributor to the extent caused by the acts or omissions of such Commercial
114
+ Contributor in connection with its distribution of the Program in a commercial
115
+ product offering. The obligations in this section do not apply to any claims
116
+ or Losses relating to any actual or alleged intellectual property
117
+ infringement. In order to qualify, an Indemnified Contributor must:
118
+ a) promptly notify the Commercial Contributor in writing of such claim, and
119
+ b) allow the Commercial Contributor to control, and cooperate with the
120
+ Commercial Contributor in, the defense and any related settlement
121
+ negotiations. The Indemnified Contributor may participate in any such claim at
122
+ its own expense.
123
+
124
+ For example, a Contributor might include the Program in a commercial product
125
+ offering, Product X. That Contributor is then a Commercial Contributor. If
126
+ that Commercial Contributor then makes performance claims, or offers
127
+ warranties related to Product X, those performance claims and warranties are
128
+ such Commercial Contributor's responsibility alone. Under this section, the
129
+ Commercial Contributor would have to defend claims against the other
130
+ Contributors related to those performance claims and warranties, and if a
131
+ court requires any other Contributor to pay any damages as a result, the
132
+ Commercial Contributor must pay those damages.
133
+
134
+ 5. NO WARRANTY
135
+
136
+ EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN
137
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
138
+ IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,
139
+ NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each
140
+ Recipient is solely responsible for determining the appropriateness of using
141
+ and distributing the Program and assumes all risks associated with its
142
+ exercise of rights under this Agreement , including but not limited to the
143
+ risks and costs of program errors, compliance with applicable laws, damage to
144
+ or loss of data, programs or equipment, and unavailability or interruption of
145
+ operations.
146
+
147
+ 6. DISCLAIMER OF LIABILITY
148
+
149
+ EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY
150
+ CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
151
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION
152
+ LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
153
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
154
+ ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
155
+ EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY
156
+ OF SUCH DAMAGES.
157
+
158
+ 7. GENERAL
159
+
160
+ If any provision of this Agreement is invalid or unenforceable under
161
+ applicable law, it shall not affect the validity or enforceability of the
162
+ remainder of the terms of this Agreement, and without further action by the
163
+ parties hereto, such provision shall be reformed to the minimum extent
164
+ necessary to make such provision valid and enforceable.
165
+
166
+ If Recipient institutes patent litigation against any entity (including a
167
+ cross-claim or counterclaim in a lawsuit) alleging that the Program itself
168
+ (excluding combinations of the Program with other software or hardware)
169
+ infringes such Recipient's patent(s), then such Recipient's rights granted
170
+ under Section 2(b) shall terminate as of the date such litigation is filed.
171
+
172
+ All Recipient's rights under this Agreement shall terminate if it fails to
173
+ comply with any of the material terms or conditions of this Agreement and does
174
+ not cure such failure in a reasonable period of time after becoming aware of
175
+ such noncompliance. If all Recipient's rights under this Agreement terminate,
176
+ Recipient agrees to cease use and distribution of the Program as soon as
177
+ reasonably practicable. However, Recipient's obligations under this Agreement
178
+ and any licenses granted by Recipient relating to the Program shall continue
179
+ and survive.
180
+
181
+ Everyone is permitted to copy and distribute copies of this Agreement, but in
182
+ order to avoid inconsistency the Agreement is copyrighted and may only be
183
+ modified in the following manner. The Agreement Steward reserves the right to
184
+ publish new versions (including revisions) of this Agreement from time to
185
+ time. No one other than the Agreement Steward has the right to modify this
186
+ Agreement. The Eclipse Foundation is the initial Agreement Steward. The
187
+ Eclipse Foundation may assign the responsibility to serve as the Agreement
188
+ Steward to a suitable separate entity. Each new version of the Agreement will
189
+ be given a distinguishing version number. The Program (including
190
+ Contributions) may always be distributed subject to the version of the
191
+ Agreement under which it was received. In addition, after a new version of the
192
+ Agreement is published, Contributor may elect to distribute the Program
193
+ (including its Contributions) under the new version. Except as expressly
194
+ stated in Sections 2(a) and 2(b) above, Recipient receives no rights or
195
+ licenses to the intellectual property of any Contributor under this Agreement,
196
+ whether expressly, by implication, estoppel or otherwise. All rights in the
197
+ Program not expressly granted under this Agreement are reserved.
198
+
199
+ This Agreement is governed by the laws of the State of New York and the
200
+ intellectual property laws of the United States of America. No party to this
201
+ Agreement will bring a legal action under this Agreement more than one year
202
+ after the cause of action arose. Each party waives its rights to a jury trial in
203
+ any resulting litigation.
package/README.md CHANGED
@@ -8,6 +8,7 @@ Durable Datalog database for JavaScript and Node.js, powered by ClojureScript.
8
8
  - **Schema Support**: Optional schema with validation
9
9
  - **Time Travel**: Access database history and temporal queries
10
10
  - **Pluggable Backends**: Memory, file, or custom storage
11
+ - **Optional S3 Browser Backend**: Direct access to S3-compatible buckets
11
12
  - **Promise-based API**: Native JavaScript async/await support
12
13
  - **TypeScript Support**: Complete type definitions included
13
14
 
@@ -21,14 +22,13 @@ npm install datahike
21
22
 
22
23
  ```javascript
23
24
  const d = require('datahike');
24
- const crypto = require('crypto');
25
25
 
26
26
  async function example() {
27
27
  // Create database configuration (requires UUID for :id)
28
28
  const config = {
29
29
  store: {
30
30
  backend: ':memory',
31
- id: crypto.randomUUID()
31
+ id: d.randomUuid()
32
32
  }
33
33
  };
34
34
 
@@ -78,20 +78,74 @@ example();
78
78
 
79
79
  ## Documentation
80
80
 
81
+ ### S3-compatible storage in browsers
82
+
83
+ Import the opt-in build when a browser should persist Datahike directly to
84
+ Amazon S3, Cloudflare R2, MinIO, or another S3-compatible service:
85
+
86
+ ```javascript
87
+ import * as d from 'datahike/s3';
88
+
89
+ const storeId = d.randomUuid();
90
+ const config = {
91
+ store: {
92
+ backend: ':tiered',
93
+ id: storeId,
94
+ 'frontend-config': { backend: ':memory', id: storeId },
95
+ 'backend-config': {
96
+ backend: ':s3',
97
+ endpoint: 'https://s3.us-west-1.amazonaws.com',
98
+ bucket: 'my-datahike-bucket',
99
+ region: 'us-west-1',
100
+ 'access-key': temporaryCredentials.accessKeyId,
101
+ secret: temporaryCredentials.secretAccessKey,
102
+ 'session-token': temporaryCredentials.sessionToken,
103
+ id: storeId
104
+ }
105
+ },
106
+ writer: {
107
+ backend: ':self',
108
+ 'writer-ownership': ':shared',
109
+ 'require-fencing': ':global'
110
+ }
111
+ };
112
+
113
+ await d.createDatabase(config);
114
+ const conn = await d.connect(config);
115
+ ```
116
+
117
+ The memory frontend is required: Datahike's query engine is synchronous, while
118
+ browser S3 is asynchronous. Connection and shared-writer refreshes materialize
119
+ the durable snapshot locally before returning it, after which `q`, `pull`, and
120
+ the other read APIs remain synchronous over that immutable DB value. A bare
121
+ `:s3` store is deliberately unsupported for browser Datahike.
122
+
123
+ The bucket must provide strongly consistent object GET and LIST semantics,
124
+ allow the browser origin through CORS, and expose the `ETag` response header.
125
+ Use narrowly scoped, short-lived session credentials; never ship long-lived
126
+ bucket credentials in browser code. `:require-fencing :global` makes a missing
127
+ or unusable conditional-write guarantee a connection error instead of silently
128
+ risking lost updates. Keep the store ID stable when reopening a database. The
129
+ regular `datahike` entry does not include S3 code.
130
+
131
+ This direct-S3 mode is currently intended for small and medium databases. When
132
+ another writer moves the head, the beta refresh path lists the durable store and
133
+ copies only objects missing from the local tier; its remote request cost can
134
+ therefore grow with the number of stored objects. Prefer a server-owned S3 store
135
+ plus Kabel replication for large databases or sustained write contention.
136
+
81
137
  ### Configuration
82
138
 
83
139
  **⚠️ Note:** Keyword syntax may change in future versions to simplify the API.
84
140
 
85
141
  ```javascript
86
- const crypto = require('crypto');
87
-
88
142
  const config = {
89
143
  store: {
90
144
  backend: ':memory', // or ':file'
91
- id: crypto.randomUUID() // Required: UUID identifier
145
+ id: d.randomUuid() // Required: Datahike UUID identifier
92
146
  },
93
147
  // Optional configuration:
94
- 'keep-history': true, // default: true
148
+ 'keep-history?': true, // default: true
95
149
  'schema-flexibility': ':write' // or ':read'
96
150
  };
97
151
 
@@ -167,18 +221,79 @@ await d.transact(conn, [
167
221
  ]);
168
222
  ```
169
223
 
224
+ ### Optimistic UI
225
+
226
+ Use an explicit overlay when a UI must show writes before the durable replica
227
+ catches up:
228
+
229
+ ```javascript
230
+ const overlay = d.openOptimistic(conn);
231
+ const unsubscribe = d.optimisticListen(overlay, event => {
232
+ render(event['db-after']);
233
+ });
234
+
235
+ const { result } = d.optimisticTransact(overlay, [
236
+ [':db/add', entityId, ':age', 36]
237
+ ]);
238
+ const outcome = await result; // { status: ':committed', ... } or ':rejected'
239
+
240
+ unsubscribe();
241
+ d.closeOptimistic(overlay);
242
+ ```
243
+
244
+ Operation promises always resolve to tagged outcomes; a rejected transaction is
245
+ not a rejected JavaScript Promise. Externally owned RPCs can use
246
+ `optimisticPredict`, followed by `optimisticAck` or `optimisticReject`.
247
+
170
248
  ### Temporal Queries
171
249
 
172
250
  Access database history:
173
251
 
174
252
  ```javascript
175
253
  // Database at specific time
176
- const historicalDb = d.asOf(d.db(conn), date);
254
+ const currentDb = await d.db(conn);
255
+ const historicalDb = await d.asOf(currentDb, date);
177
256
 
178
257
  // Full history
179
- const historyDb = d.history(d.db(conn));
258
+ const historyDb = await d.history(currentDb);
180
259
  ```
181
260
 
261
+ ### Versioning and garbage collection
262
+
263
+ The JavaScript API exposes Datahike's commit graph and branch operations as
264
+ Promises. Branch and merge parent collections are ordinary JavaScript arrays:
265
+
266
+ ```javascript
267
+ await d.branch(conn, ':db', ':feature');
268
+ const branchNames = await d.branches(conn); // [':db', ':feature']
269
+
270
+ const featureDb = await d.branchAsDb(conn, ':feature');
271
+ const commit = await d.commitId(featureDb); // UUID output is a string
272
+ const sameDb = await d.commitAsDb(conn, d.uuid(commit));
273
+
274
+ const report = await d.mergeDb(conn, [':feature'], [
275
+ { name: 'merged value' }
276
+ ]);
277
+ const parents = await d.parentCommitIds(report['db-after']);
278
+
279
+ await d.deleteBranch(conn, ':feature');
280
+ ```
281
+
282
+ `gcStorage` reclaims unreachable objects from persistent stores and accepts a
283
+ JavaScript `Date` or transaction time point. It returns an array of reclaimed
284
+ store keys. It is not useful for a `:memory` store, whose index trees are kept
285
+ inline rather than persisted as reclaimable objects.
286
+
287
+ ```javascript
288
+ const reclaimed = await d.gcStorage(conn, new Date(), {
289
+ 'min-age-ms': 60_000
290
+ });
291
+ ```
292
+
293
+ With shared or remote writers, size `min-age-ms` above the longest possible
294
+ values-before-head publication window plus clock skew. The default is 15
295
+ minutes for shared writers and zero for an exclusive local writer.
296
+
182
297
  ## API Reference
183
298
 
184
299
  See [TypeScript definitions](index.d.ts) for complete API documentation.
@@ -0,0 +1,35 @@
1
+ # Third-party licenses
2
+
3
+ The optional `datahike/s3` browser bundle contains code from the following
4
+ packages in addition to Datahike and its ordinary ClojureScript dependencies.
5
+
6
+ ## aws4fetch 1.0.20
7
+
8
+ Copyright 2018 Michael Hart (michael.hart.au@gmail.com)
9
+
10
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
11
+ this software and associated documentation files (the "Software"), to deal in
12
+ the Software without restriction, including without limitation the rights to
13
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
14
+ of the Software, and to permit persons to whom the Software is furnished to do
15
+ so, subject to the following conditions:
16
+
17
+ The above copyright notice and this permission notice shall be included in all
18
+ copies or substantial portions of the Software.
19
+
20
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26
+ SOFTWARE.
27
+
28
+ Source: <https://github.com/mhart/aws4fetch>
29
+
30
+ ## konserve-s3 0.1.38
31
+
32
+ `konserve-s3` is distributed under the Eclipse Public License 1.0, the same
33
+ license included in this package's top-level `LICENSE` file.
34
+
35
+ Source: <https://github.com/replikativ/konserve-s3>
package/boring.core.js ADDED
@@ -0,0 +1,3 @@
1
+ var window=global;var $CLJS=require("./cljs_env.js");require("./cljs.core.js");require("./boring.data.js");require("./boring.reader.js");require("./boring.options.js");require("./boring.writer.js");
2
+ 'use strict';$CLJS.Cla=new $CLJS.G(null,"containers","containers",-2127048083);$CLJS.SB=new $CLJS.G(null,"entries","entries",-86943161);$CLJS.Dla=new $CLJS.G("boring","bad-index","boring/bad-index",1885315165);$CLJS.Ela=new $CLJS.G(null,"counts","counts",234305892);$CLJS.Fla=new $CLJS.G("boring","bad-argument","boring/bad-argument",-32145412);$CLJS.Gla=new $CLJS.G(null,"anchors","anchors",1699348867);$CLJS.Hla=new $CLJS.G(null,"sorted","sorted",-896746253);
3
+ $CLJS.TB=new $CLJS.G(null,"base","base",185279322);$CLJS.Ila=new $CLJS.G("boring","unsupported-option","boring/unsupported-option",-248072624);$CLJS.Jla=new $CLJS.G(null,"stringrefs","stringrefs",1749364226);$CLJS.Kla=new $CLJS.G(null,"walk","walk",32921637);$CLJS.UB=new $CLJS.G(null,"stride","stride",-1172818435);$CLJS.VB=$CLJS.Gh(null);$CLJS.WB=$CLJS.Gh(null);$CLJS.Lla=new Uint8Array(0);
package/boring.data.js ADDED
@@ -0,0 +1,8 @@
1
+ var window=global;var $CLJS=require("./cljs_env.js");require("./cljs.core.js");
2
+ 'use strict';$CLJS.UA=function(a,b,c,d){this.n=a;this.u=b;this.j=c;this.A=d;this.C=2230716170;this.H=139264};$CLJS.VA=new $CLJS.G(null,"exponent","exponent",2083463617);$CLJS.vka=new $CLJS.G("boring","reserved-simple-value","boring/reserved-simple-value",-2125053892);$CLJS.WA=new $CLJS.G(null,"mantissa","mantissa",202763361);$CLJS.XA=new $CLJS.G(null,"handler","handler",-195596612);$CLJS.YA=new $CLJS.G("boring","duplicate-map-key","boring/duplicate-map-key",1916722920);
3
+ $CLJS.ZA=new $CLJS.G("boring","max-depth-exceeded","boring/max-depth-exceeded",1648120233);$CLJS.$A=new $CLJS.G(null,"numerator","numerator",-160761104);$CLJS.aB=new $CLJS.G(null,"max-depth","max-depth",127060793);$CLJS.bB=new $CLJS.G(null,"max-items","max-items",-1969244147);$CLJS.cB=new $CLJS.G(null,"fallback","fallback",761637929);$CLJS.dB=new $CLJS.G(null,"denominator","denominator",-804365096);$CLJS.eB=new $CLJS.G("boring","handler-failed","boring/handler-failed",1798888153);
4
+ $CLJS.fB=new $CLJS.G(null,"n","n",562130025);$CLJS.n=$CLJS.UA.prototype;$CLJS.n.aa=function(a,b){return this.G(null,b,null)};$CLJS.n.G=function(a,b,c){switch(b instanceof $CLJS.G?b.D:null){case "n":return this.n;default:return $CLJS.hf(this.j,b,c)}};$CLJS.n.ja=function(a,b,c){return $CLJS.ac(function(d,e){var f=$CLJS.B(e,0,null);e=$CLJS.B(e,1,null);return b.i?b.i(d,f,e):b.call(null,d,f,e)},c,this)};
5
+ $CLJS.n.P=function(a,b,c){return $CLJS.Ek(b,function(d){return $CLJS.Ek(b,$CLJS.Hk,""," ","",c,d)},"#boring.data.SimpleValue{",", ","}",c,$CLJS.Sh.h(new $CLJS.N(null,1,5,$CLJS.O,[new $CLJS.N(null,2,5,$CLJS.O,[$CLJS.fB,this.n],null)],null),this.j))};$CLJS.n.fa=function(){return new $CLJS.$i(this,1,new $CLJS.N(null,1,5,$CLJS.O,[$CLJS.fB],null),$CLJS.t(this.j)?$CLJS.Jd(this.j):$CLJS.hh())};$CLJS.n.O=function(){return this.u};$CLJS.n.X=function(){return 1+$CLJS.Te(this.j)};
6
+ $CLJS.n.Z=function(){var a=this.A;return a!=null?a:this.A=a=1404098260^$CLJS.ze(this)};$CLJS.n.U=function(a,b){return b!=null&&this.constructor===b.constructor&&$CLJS.A.h(this.n,b.n)&&$CLJS.A.h(this.j,b.j)};$CLJS.n.ia=function(a,b){return $CLJS.Rf(new $CLJS.jk(null,new $CLJS.Q(null,1,[$CLJS.fB,null],null),null),b)?$CLJS.jo.h($CLJS.Xc($CLJS.gj.h($CLJS.bh,this),this.u),b):new $CLJS.UA(this.n,this.u,$CLJS.fh($CLJS.jo.h(this.j,b)),null)};
7
+ $CLJS.n.ea=function(a,b){switch(b instanceof $CLJS.G?b.D:null){case "n":return!0;default:return $CLJS.Rf(this.j,b)}};$CLJS.n.K=function(a,b,c){return $CLJS.t($CLJS.K.h?$CLJS.K.h($CLJS.fB,b):$CLJS.K.call(null,$CLJS.fB,b))?new $CLJS.UA(c,this.u,this.j,null):new $CLJS.UA(this.n,this.u,$CLJS.ak.i(this.j,b,c),null)};$CLJS.n.V=function(){return $CLJS.y($CLJS.Sh.h(new $CLJS.N(null,1,5,$CLJS.O,[new $CLJS.cj($CLJS.fB,this.n,null)],null),this.j))};
8
+ $CLJS.n.S=function(a,b){return new $CLJS.UA(this.n,b,this.j,this.A)};$CLJS.n.ba=function(a,b){return $CLJS.Ef(b)?this.K(null,$CLJS.gf(b,0),$CLJS.gf(b,1)):$CLJS.ac($CLJS.jc,this,b)};$CLJS.gB=new $CLJS.UA(23,null,null,null);
File without changes
@@ -0,0 +1,18 @@
1
+ var window=global;var $CLJS=require("./cljs_env.js");require("./cljs.core.js");require("./boring.data.js");
2
+ 'use strict';var tB,Qka,uB,Uka,Vka,zB,Zka,dla,fla,hla,ila,GB,jla,kla,lla,nla,rla;tB=function(a,b,c){var d=(d=typeof a==="number")?Number.isInteger(a):d;return $CLJS.t(d)?a>=b&&a<=c:d};Qka=function(a){return $CLJS.Lf(a)&&!(a instanceof $CLJS.G||a instanceof $CLJS.de||$CLJS.Af(a)||$CLJS.xf(a)||$CLJS.Ef(a))};uB=function(a){return a===!0||a===!1||a==null};$CLJS.vB=new $CLJS.G(null,"conflicts","conflicts",-1219561816);$CLJS.wB=new $CLJS.G(null,"stringref","stringref",-34167229);
3
+ $CLJS.Rka=new $CLJS.G(null,"check-duplicate-keys","check-duplicate-keys",2013851698);$CLJS.xB=new $CLJS.G(null,"shapes","shapes",1897594879);$CLJS.Ska=new $CLJS.G(null,"validate-utf8","validate-utf8",848399100);$CLJS.Tka=new $CLJS.G(null,"permit-reserved-simple-values","permit-reserved-simple-values",-262127575);Uka=new $CLJS.G(null,"local-date","local-date",1829761428);Vka=new $CLJS.G(null,"instant","instant",655498374);$CLJS.Wka=new $CLJS.G(null,"placeholder","placeholder",-104873083);
4
+ $CLJS.yB=new $CLJS.G("boring","bad-option","boring/bad-option",401751413);zB=new $CLJS.G(null,"shortest","shortest",-1179719805);$CLJS.Xka=new $CLJS.G(null,"tolerate-unknown-tags","tolerate-unknown-tags",908525871);$CLJS.Yka=new $CLJS.G(null,"profile-values","profile-values",884934151);$CLJS.AB=new $CLJS.G(null,"rfc7049","rfc7049",1908648189);Zka=new $CLJS.G(null,"interop","interop",-1183783726);$CLJS.BB=new $CLJS.G(null,"clojure","clojure",438975815);
5
+ $CLJS.CB=new $CLJS.G(null,"float-policy","float-policy",-659334259);$CLJS.$ka=new $CLJS.G(null,"on-unknown-record","on-unknown-record",-187764732);$CLJS.ala=new $CLJS.G(null,"incl-metadata?","incl-metadata?",1379947465);$CLJS.bla=new $CLJS.G("boring.options","resolved","boring.options/resolved",-636872514);$CLJS.cla=new $CLJS.G("boring","unknown-profile","boring/unknown-profile",-2039977486);$CLJS.DB=new $CLJS.G(null,"canonical-order","canonical-order",-162113746);
6
+ dla=new $CLJS.G(null,"archival","archival",-1907131279);$CLJS.ela=new $CLJS.G("boring","incompatible-options","boring/incompatible-options",1740546168);fla=new $CLJS.G(null,"date-type","date-type",978105440);$CLJS.EB=new $CLJS.G(null,"profile","profile",-545963874);$CLJS.gla=new $CLJS.G(null,"repr","repr",669525472);$CLJS.FB=new $CLJS.G(null,"auto-construct-records?","auto-construct-records?",1610542755);hla=new $CLJS.G(null,"ignore","ignore",-1631542033);
7
+ ila=new $CLJS.G(null,"canonical-rfc7049","canonical-rfc7049",1248165184);GB=new $CLJS.G(null,"rfc8949","rfc8949",-1825488727);jla=new $CLJS.G(null,"date","date",-1463434462);kla=new $CLJS.G(null,"trusted","trusted",-466894262);$CLJS.HB=new $CLJS.G(null,"preserve-width","preserve-width",-1756789284);$CLJS.IB=new $CLJS.G(null,"want","want",564874520);lla=new $CLJS.G(null,"sql-date","sql-date",1102085079);$CLJS.mla=new $CLJS.G(null,"encode-fallback","encode-fallback",89051517);
8
+ nla=new $CLJS.G(null,"chunk-size","chunk-size",-205934374);$CLJS.JB=new $CLJS.G(null,"option","option",65132272);$CLJS.KB=new $CLJS.G(null,"canonical","canonical",2076499125);$CLJS.ola=new $CLJS.G(null,"index-min","index-min",-1453439423);$CLJS.pla=new $CLJS.G(null,"did-you-mean","did-you-mean",-1004254426);$CLJS.qla=new $CLJS.G(null,"instant-type","instant-type",2031817692);rla=new $CLJS.G(null,"trust-index","trust-index",-689527754);$CLJS.LB=new $CLJS.Q(null,5,[$CLJS.BB,new $CLJS.Q(null,4,[$CLJS.wB,!0,$CLJS.CB,$CLJS.HB,$CLJS.KB,!1,$CLJS.DB,GB],null),Zka,new $CLJS.Q(null,5,[$CLJS.wB,!1,$CLJS.CB,$CLJS.HB,$CLJS.KB,!1,$CLJS.xB,!1,$CLJS.DB,GB],null),dla,new $CLJS.Q(null,5,[$CLJS.wB,!1,$CLJS.CB,$CLJS.HB,$CLJS.KB,!0,$CLJS.xB,!1,$CLJS.DB,GB],null),$CLJS.KB,new $CLJS.Q(null,5,[$CLJS.wB,!1,$CLJS.CB,zB,$CLJS.KB,!0,$CLJS.xB,!1,$CLJS.DB,GB],null),ila,new $CLJS.Q(null,5,[$CLJS.wB,!1,$CLJS.CB,zB,$CLJS.KB,!0,$CLJS.xB,!1,$CLJS.DB,$CLJS.AB],null)],
9
+ null);
10
+ $CLJS.MB=new $CLJS.Q(null,5,[$CLJS.BB,new $CLJS.jk(null,new $CLJS.Q(null,2,[$CLJS.DB,null,$CLJS.KB,null],null),null),Zka,new $CLJS.jk(null,new $CLJS.Q(null,4,[$CLJS.wB,null,$CLJS.DB,null,$CLJS.KB,null,$CLJS.xB,null],null),null),dla,new $CLJS.jk(null,new $CLJS.Q(null,5,[$CLJS.wB,null,$CLJS.CB,null,$CLJS.DB,null,$CLJS.KB,null,$CLJS.xB,null],null),null),$CLJS.KB,new $CLJS.jk(null,new $CLJS.Q(null,5,[$CLJS.wB,null,$CLJS.CB,null,$CLJS.DB,null,$CLJS.KB,null,$CLJS.xB,null],null),null),ila,new $CLJS.jk(null,new $CLJS.Q(null,
11
+ 5,[$CLJS.wB,null,$CLJS.CB,null,$CLJS.DB,null,$CLJS.KB,null,$CLJS.xB,null],null),null)],null);$CLJS.sla=new $CLJS.Q(null,1,[$CLJS.bla,!0],null);$CLJS.tla=$CLJS.pf($CLJS.BB.g($CLJS.LB),$CLJS.sla);
12
+ $CLJS.NB=$CLJS.Lj([fla,$CLJS.ola,$CLJS.wB,$CLJS.FB,$CLJS.$ka,$CLJS.Sm,$CLJS.Tka,$CLJS.ala,$CLJS.rn,$CLJS.bB,$CLJS.CB,$CLJS.DB,$CLJS.Xka,$CLJS.Rka,$CLJS.KB,rla,$CLJS.aB,nla,$CLJS.Ska,$CLJS.qla,$CLJS.mla,$CLJS.EB,$CLJS.xB],[new $CLJS.Q(null,2,[$CLJS.vm,new $CLJS.jk(null,new $CLJS.Q(null,2,[Uka,null,lla,null],null),null),$CLJS.IB,":local-date or :sql-date"],null),new $CLJS.Q(null,2,[$CLJS.vm,function(a){return tB(a,0,2147483647)},$CLJS.IB,"a non-negative integer no greater than "+$CLJS.S.g(2147483647)],
13
+ null),new $CLJS.Q(null,2,[$CLJS.vm,uB,$CLJS.IB,"true or false"],null),new $CLJS.Q(null,2,[$CLJS.vm,uB,$CLJS.IB,"true or false"],null),new $CLJS.Q(null,2,[$CLJS.vm,function(a){var b=new $CLJS.jk(null,new $CLJS.Q(null,2,[$CLJS.cB,null,$CLJS.Jn,null],null),null);b=b.g?b.g(a):b.call(null,a);return $CLJS.t(b)?b:Qka(a)},$CLJS.IB,":fallback, :error, or a function of [name payload]"],null),new $CLJS.Q(null,2,[$CLJS.vm,function(a){return tB(a,0,2147483647)},$CLJS.IB,"a non-negative integer no greater than "+
14
+ $CLJS.S.g(2147483647)+" (0 turns indexing off)"],null),new $CLJS.Q(null,2,[$CLJS.vm,uB,$CLJS.IB,"true or false"],null),new $CLJS.Q(null,2,[$CLJS.vm,uB,$CLJS.IB,"true or false"],null),new $CLJS.Q(null,2,[$CLJS.vm,function(a){return a==null||$CLJS.Af(a)},$CLJS.IB,"a registry map from boring/tag-registry"],null),new $CLJS.Q(null,2,[$CLJS.vm,function(a){return tB(a,0,Number.MAX_SAFE_INTEGER)},$CLJS.IB,"a non-negative integer (0 means unlimited)"],null),new $CLJS.Q(null,2,[$CLJS.vm,new $CLJS.jk(null,new $CLJS.Q(null,
15
+ 2,[zB,null,$CLJS.HB,null],null),null),$CLJS.IB,":preserve-width or :shortest"],null),new $CLJS.Q(null,2,[$CLJS.vm,new $CLJS.jk(null,new $CLJS.Q(null,2,[GB,null,$CLJS.AB,null],null),null),$CLJS.IB,":rfc8949 or :rfc7049"],null),new $CLJS.Q(null,2,[$CLJS.vm,uB,$CLJS.IB,"true or false"],null),new $CLJS.Q(null,2,[$CLJS.vm,uB,$CLJS.IB,"true or false"],null),new $CLJS.Q(null,2,[$CLJS.vm,uB,$CLJS.IB,"true or false"],null),new $CLJS.Q(null,2,[$CLJS.vm,new $CLJS.jk(null,new $CLJS.Q(null,2,[kla,null,hla,null],
16
+ null),null),$CLJS.IB,":trusted or :ignore"],null),new $CLJS.Q(null,2,[$CLJS.vm,function(a){return tB(a,1,2048)},$CLJS.IB,"a positive integer no greater than "+$CLJS.S.g(2048)+" (the decoder recurses per level, and a limit the host stack cannot honour is not a limit)"],null),new $CLJS.Q(null,2,[$CLJS.vm,function(a){return tB(a,1,2147483647)},$CLJS.IB,"a positive integer"],null),new $CLJS.Q(null,2,[$CLJS.vm,uB,$CLJS.IB,"true or false"],null),new $CLJS.Q(null,2,[$CLJS.vm,function(a){var b=new $CLJS.jk(null,
17
+ new $CLJS.Q(null,2,[jla,null,Vka,null],null),null);b=b.g?b.g(a):b.call(null,a);return $CLJS.t(b)?b:$CLJS.nf(a)},$CLJS.IB,":date, :instant, or a function of epoch millis"],null),new $CLJS.Q(null,2,[$CLJS.vm,function(a){return a==null||$CLJS.A.h($CLJS.Wka,a)||Qka(a)},$CLJS.IB,"nil, :placeholder, or a function"],null),new $CLJS.Q(null,3,[$CLJS.vm,function(a){return $CLJS.Rf($CLJS.LB,a)},$CLJS.hm,$CLJS.cla,$CLJS.IB,"one of :clojure, :interop, :archival, :canonical, :canonical-rfc7049"],null),new $CLJS.Q(null,
18
+ 2,[$CLJS.vm,uB,$CLJS.IB,"true or false"],null)]);$CLJS.ula=$CLJS.Mg($CLJS.fg(function(a,b,c){return $CLJS.ij.i(a,b,$CLJS.vm.g(c))},$CLJS.rd($CLJS.bh),$CLJS.NB));
@@ -0,0 +1,5 @@
1
+ var window=global;var $CLJS=require("./cljs_env.js");require("./cljs.core.js");require("./boring.data.js");
2
+ 'use strict';$CLJS.hB=new $CLJS.G("boring","bad-indefinite-chunk","boring/bad-indefinite-chunk",1528427944);$CLJS.iB=new $CLJS.G("boring","bad-count","boring/bad-count",212512956);$CLJS.wka=new $CLJS.G("boring","unregistered-record","boring/unregistered-record",-1832009572);$CLJS.jB=new $CLJS.G("boring","bad-tag-content","boring/bad-tag-content",1510818416);$CLJS.xka=new $CLJS.G(null,"remaining","remaining",-138926777);$CLJS.yka=new $CLJS.G(null,"major","major",-27376078);
3
+ $CLJS.zka=new $CLJS.G("boring","bad-major","boring/bad-major",1261892718);$CLJS.kB=new $CLJS.G(null,"actual","actual",107306363);$CLJS.lB=new $CLJS.G(null,"elective","elective",-2124944059);$CLJS.Aka=new $CLJS.G("boring","unexpected-break","boring/unexpected-break",-395536798);$CLJS.mB=new $CLJS.G(null,"declared","declared",92336021);$CLJS.nB=new $CLJS.G(null,"critical","critical",-838839117);$CLJS.Bka=new $CLJS.G("boring","throwable-class","boring/throwable-class",-842102518);
4
+ $CLJS.Cka=new $CLJS.G("boring","bad-stringref","boring/bad-stringref",-1849018637);$CLJS.Dka=new $CLJS.G(null,"record-name","record-name",-541851354);$CLJS.Eka=new $CLJS.G(null,"records","records",1326822832);$CLJS.oB=new $CLJS.G("boring","invalid-utf8","boring/invalid-utf8",169374949);$CLJS.Fka=new $CLJS.G("boring","malformed-simple-value","boring/malformed-simple-value",934525816);$CLJS.Gka=new $CLJS.G("boring","duplicate-set-element","boring/duplicate-set-element",312920017);
5
+ $CLJS.Hka=new $CLJS.G("boring","reserved-info","boring/reserved-info",668296783);$CLJS.Ika=new $CLJS.G("boring","truncated-input","boring/truncated-input",860142005);$CLJS.Jka=new $CLJS.G("boring","unregistered-tag","boring/unregistered-tag",-1378426073);$CLJS.Kka=new $CLJS.G("boring","max-items-exceeded","boring/max-items-exceeded",1699221836);$CLJS.pB=new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0});$CLJS.qB=new TextDecoder("utf-8",{fatal:!1,ignoreBOM:!0});$CLJS.rB=BigInt(0);$CLJS.Lka=BigInt(1);$CLJS.sB=new $CLJS.jk(null,new $CLJS.Q(null,6,[-12,null,-6,null,-3,null,-15,null,-9,null,-18,null],null),null);$CLJS.Mka=BigInt("-9223372036854775808");$CLJS.Nka=BigInt("9223372036854775807");$CLJS.Oka=BigInt(0);$CLJS.Pka=BigInt(999999999);
@@ -0,0 +1,3 @@
1
+ var window=global;var $CLJS=require("./cljs_env.js");require("./cljs.core.js");require("./boring.data.js");
2
+ 'use strict';$CLJS.vla=new $CLJS.G(null,"writers","writers",1153823103);$CLJS.OB=new $CLJS.G("boring","bad-tag-number","boring/bad-tag-number",72551093);$CLJS.PB=new $CLJS.G("boring","unsupported-type","boring/unsupported-type",914778105);$CLJS.wla=new $CLJS.G("boring","bad-simple-value","boring/bad-simple-value",-906878979);$CLJS.xla=new $CLJS.G("boring","reserved-tag","boring/reserved-tag",-1497317967);$CLJS.QB=new $CLJS.G("boring","canonical-duplicate","boring/canonical-duplicate",-330114690);
3
+ $CLJS.yla=new $CLJS.G("boring","unrepresentable-date","boring/unrepresentable-date",-898108989);$CLJS.zla=new $CLJS.G("boring","invalid-utf16","boring/invalid-utf16",-498242034);$CLJS.Ala=$CLJS.Lj("Float64Array Int8Array BigInt64Array Uint8ClampedArray Uint16Array Int16Array Uint32Array Float32Array Int32Array BigUint64Array".split(" "),[86,72,79,68,69,77,70,85,78,71]);$CLJS.Bla=new TextEncoder;$CLJS.RB=new Float32Array(1);