camusdb 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (220) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +950 -0
  3. package/dist/auth/credentials.d.ts +30 -0
  4. package/dist/auth/credentials.d.ts.map +1 -0
  5. package/dist/auth/credentials.js +23 -0
  6. package/dist/auth/credentials.js.map +1 -0
  7. package/dist/auth/login-client.d.ts +37 -0
  8. package/dist/auth/login-client.d.ts.map +1 -0
  9. package/dist/auth/login-client.js +8 -0
  10. package/dist/auth/login-client.js.map +1 -0
  11. package/dist/auth/rest-login-client.d.ts +17 -0
  12. package/dist/auth/rest-login-client.d.ts.map +1 -0
  13. package/dist/auth/rest-login-client.js +71 -0
  14. package/dist/auth/rest-login-client.js.map +1 -0
  15. package/dist/auth/token-provider.d.ts +123 -0
  16. package/dist/auth/token-provider.d.ts.map +1 -0
  17. package/dist/auth/token-provider.js +209 -0
  18. package/dist/auth/token-provider.js.map +1 -0
  19. package/dist/backup.d.ts +98 -0
  20. package/dist/backup.d.ts.map +1 -0
  21. package/dist/backup.js +153 -0
  22. package/dist/backup.js.map +1 -0
  23. package/dist/cache.d.ts +90 -0
  24. package/dist/cache.d.ts.map +1 -0
  25. package/dist/cache.js +121 -0
  26. package/dist/cache.js.map +1 -0
  27. package/dist/client.d.ts +406 -0
  28. package/dist/client.d.ts.map +1 -0
  29. package/dist/client.js +724 -0
  30. package/dist/client.js.map +1 -0
  31. package/dist/column-type.d.ts +33 -0
  32. package/dist/column-type.d.ts.map +1 -0
  33. package/dist/column-type.js +50 -0
  34. package/dist/column-type.js.map +1 -0
  35. package/dist/column-value.d.ts +77 -0
  36. package/dist/column-value.d.ts.map +1 -0
  37. package/dist/column-value.js +60 -0
  38. package/dist/column-value.js.map +1 -0
  39. package/dist/config.d.ts +181 -0
  40. package/dist/config.d.ts.map +1 -0
  41. package/dist/config.js +315 -0
  42. package/dist/config.js.map +1 -0
  43. package/dist/connection-string.d.ts +45 -0
  44. package/dist/connection-string.d.ts.map +1 -0
  45. package/dist/connection-string.js +170 -0
  46. package/dist/connection-string.js.map +1 -0
  47. package/dist/endpoint-pool.d.ts +70 -0
  48. package/dist/endpoint-pool.d.ts.map +1 -0
  49. package/dist/endpoint-pool.js +120 -0
  50. package/dist/endpoint-pool.js.map +1 -0
  51. package/dist/error-codes.d.ts +44 -0
  52. package/dist/error-codes.d.ts.map +1 -0
  53. package/dist/error-codes.js +43 -0
  54. package/dist/error-codes.js.map +1 -0
  55. package/dist/errors.d.ts +24 -0
  56. package/dist/errors.d.ts.map +1 -0
  57. package/dist/errors.js +33 -0
  58. package/dist/errors.js.map +1 -0
  59. package/dist/hlc.d.ts +19 -0
  60. package/dist/hlc.d.ts.map +1 -0
  61. package/dist/hlc.js +11 -0
  62. package/dist/hlc.js.map +1 -0
  63. package/dist/index.d.ts +55 -0
  64. package/dist/index.d.ts.map +1 -0
  65. package/dist/index.js +51 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/json.d.ts +41 -0
  68. package/dist/json.d.ts.map +1 -0
  69. package/dist/json.js +345 -0
  70. package/dist/json.js.map +1 -0
  71. package/dist/object-id.d.ts +39 -0
  72. package/dist/object-id.d.ts.map +1 -0
  73. package/dist/object-id.js +99 -0
  74. package/dist/object-id.js.map +1 -0
  75. package/dist/options.d.ts +77 -0
  76. package/dist/options.d.ts.map +1 -0
  77. package/dist/options.js +68 -0
  78. package/dist/options.js.map +1 -0
  79. package/dist/prepared/binder.d.ts +20 -0
  80. package/dist/prepared/binder.d.ts.map +1 -0
  81. package/dist/prepared/binder.js +32 -0
  82. package/dist/prepared/binder.js.map +1 -0
  83. package/dist/prepared/policy.d.ts +81 -0
  84. package/dist/prepared/policy.d.ts.map +1 -0
  85. package/dist/prepared/policy.js +164 -0
  86. package/dist/prepared/policy.js.map +1 -0
  87. package/dist/query-stream.d.ts +55 -0
  88. package/dist/query-stream.d.ts.map +1 -0
  89. package/dist/query-stream.js +94 -0
  90. package/dist/query-stream.js.map +1 -0
  91. package/dist/result-set.d.ts +62 -0
  92. package/dist/result-set.d.ts.map +1 -0
  93. package/dist/result-set.js +100 -0
  94. package/dist/result-set.js.map +1 -0
  95. package/dist/retry.d.ts +38 -0
  96. package/dist/retry.d.ts.map +1 -0
  97. package/dist/retry.js +93 -0
  98. package/dist/retry.js.map +1 -0
  99. package/dist/routing/advice.d.ts +63 -0
  100. package/dist/routing/advice.d.ts.map +1 -0
  101. package/dist/routing/advice.js +61 -0
  102. package/dist/routing/advice.js.map +1 -0
  103. package/dist/routing/route-cache.d.ts +53 -0
  104. package/dist/routing/route-cache.d.ts.map +1 -0
  105. package/dist/routing/route-cache.js +123 -0
  106. package/dist/routing/route-cache.js.map +1 -0
  107. package/dist/routing/router.d.ts +53 -0
  108. package/dist/routing/router.d.ts.map +1 -0
  109. package/dist/routing/router.js +89 -0
  110. package/dist/routing/router.js.map +1 -0
  111. package/dist/row-source.d.ts +48 -0
  112. package/dist/row-source.d.ts.map +1 -0
  113. package/dist/row-source.js +35 -0
  114. package/dist/row-source.js.map +1 -0
  115. package/dist/runtime.d.ts +58 -0
  116. package/dist/runtime.d.ts.map +1 -0
  117. package/dist/runtime.js +137 -0
  118. package/dist/runtime.js.map +1 -0
  119. package/dist/shared-registry.d.ts +32 -0
  120. package/dist/shared-registry.d.ts.map +1 -0
  121. package/dist/shared-registry.js +48 -0
  122. package/dist/shared-registry.js.map +1 -0
  123. package/dist/sql-syntax.d.ts +44 -0
  124. package/dist/sql-syntax.d.ts.map +1 -0
  125. package/dist/sql-syntax.js +83 -0
  126. package/dist/sql-syntax.js.map +1 -0
  127. package/dist/statements.d.ts +15 -0
  128. package/dist/statements.d.ts.map +1 -0
  129. package/dist/statements.js +90 -0
  130. package/dist/statements.js.map +1 -0
  131. package/dist/transaction.d.ts +117 -0
  132. package/dist/transaction.d.ts.map +1 -0
  133. package/dist/transaction.js +204 -0
  134. package/dist/transaction.js.map +1 -0
  135. package/dist/transport/authenticating-transport.d.ts +63 -0
  136. package/dist/transport/authenticating-transport.d.ts.map +1 -0
  137. package/dist/transport/authenticating-transport.js +119 -0
  138. package/dist/transport/authenticating-transport.js.map +1 -0
  139. package/dist/transport/branch-statements.d.ts +39 -0
  140. package/dist/transport/branch-statements.d.ts.map +1 -0
  141. package/dist/transport/branch-statements.js +74 -0
  142. package/dist/transport/branch-statements.js.map +1 -0
  143. package/dist/transport/error-text.d.ts +26 -0
  144. package/dist/transport/error-text.d.ts.map +1 -0
  145. package/dist/transport/error-text.js +75 -0
  146. package/dist/transport/error-text.js.map +1 -0
  147. package/dist/transport/grpc/batcher.d.ts +127 -0
  148. package/dist/transport/grpc/batcher.d.ts.map +1 -0
  149. package/dist/transport/grpc/batcher.js +399 -0
  150. package/dist/transport/grpc/batcher.js.map +1 -0
  151. package/dist/transport/grpc/codec.d.ts +40 -0
  152. package/dist/transport/grpc/codec.d.ts.map +1 -0
  153. package/dist/transport/grpc/codec.js +231 -0
  154. package/dist/transport/grpc/codec.js.map +1 -0
  155. package/dist/transport/grpc/grpc-transport.d.ts +115 -0
  156. package/dist/transport/grpc/grpc-transport.d.ts.map +1 -0
  157. package/dist/transport/grpc/grpc-transport.js +577 -0
  158. package/dist/transport/grpc/grpc-transport.js.map +1 -0
  159. package/dist/transport/grpc/messages.d.ts +221 -0
  160. package/dist/transport/grpc/messages.d.ts.map +1 -0
  161. package/dist/transport/grpc/messages.js +56 -0
  162. package/dist/transport/grpc/messages.js.map +1 -0
  163. package/dist/transport/grpc/proto.d.ts +71 -0
  164. package/dist/transport/grpc/proto.d.ts.map +1 -0
  165. package/dist/transport/grpc/proto.js +67 -0
  166. package/dist/transport/grpc/proto.js.map +1 -0
  167. package/dist/transport/http.d.ts +62 -0
  168. package/dist/transport/http.d.ts.map +1 -0
  169. package/dist/transport/http.js +169 -0
  170. package/dist/transport/http.js.map +1 -0
  171. package/dist/transport/ndjson-row-source.d.ts +38 -0
  172. package/dist/transport/ndjson-row-source.d.ts.map +1 -0
  173. package/dist/transport/ndjson-row-source.js +197 -0
  174. package/dist/transport/ndjson-row-source.js.map +1 -0
  175. package/dist/transport/rest-decode.d.ts +33 -0
  176. package/dist/transport/rest-decode.d.ts.map +1 -0
  177. package/dist/transport/rest-decode.js +162 -0
  178. package/dist/transport/rest-decode.js.map +1 -0
  179. package/dist/transport/rest-prepared-cache.d.ts +50 -0
  180. package/dist/transport/rest-prepared-cache.d.ts.map +1 -0
  181. package/dist/transport/rest-prepared-cache.js +101 -0
  182. package/dist/transport/rest-prepared-cache.js.map +1 -0
  183. package/dist/transport/rest-transport.d.ts +88 -0
  184. package/dist/transport/rest-transport.d.ts.map +1 -0
  185. package/dist/transport/rest-transport.js +388 -0
  186. package/dist/transport/rest-transport.js.map +1 -0
  187. package/dist/transport/transport-pool.d.ts +40 -0
  188. package/dist/transport/transport-pool.d.ts.map +1 -0
  189. package/dist/transport/transport-pool.js +48 -0
  190. package/dist/transport/transport-pool.js.map +1 -0
  191. package/dist/transport/transport.d.ts +199 -0
  192. package/dist/transport/transport.d.ts.map +1 -0
  193. package/dist/transport/transport.js +11 -0
  194. package/dist/transport/transport.js.map +1 -0
  195. package/dist/values/decode.d.ts +39 -0
  196. package/dist/values/decode.d.ts.map +1 -0
  197. package/dist/values/decode.js +75 -0
  198. package/dist/values/decode.js.map +1 -0
  199. package/dist/values/encode.d.ts +45 -0
  200. package/dist/values/encode.d.ts.map +1 -0
  201. package/dist/values/encode.js +271 -0
  202. package/dist/values/encode.js.map +1 -0
  203. package/dist/values/ticks.d.ts +31 -0
  204. package/dist/values/ticks.d.ts.map +1 -0
  205. package/dist/values/ticks.js +52 -0
  206. package/dist/values/ticks.js.map +1 -0
  207. package/dist/values/typed.d.ts +67 -0
  208. package/dist/values/typed.d.ts.map +1 -0
  209. package/dist/values/typed.js +134 -0
  210. package/dist/values/typed.js.map +1 -0
  211. package/dist/values/uuid.d.ts +27 -0
  212. package/dist/values/uuid.d.ts.map +1 -0
  213. package/dist/values/uuid.js +76 -0
  214. package/dist/values/uuid.js.map +1 -0
  215. package/dist/vector.d.ts +26 -0
  216. package/dist/vector.d.ts.map +1 -0
  217. package/dist/vector.js +48 -0
  218. package/dist/vector.js.map +1 -0
  219. package/package.json +86 -0
  220. package/proto/camus_sql.proto +566 -0
@@ -0,0 +1,271 @@
1
+ /**
2
+ * This file is part of CamusDB
3
+ *
4
+ * For the full copyright and license information, please view the LICENSE.txt
5
+ * file that was distributed with this source code.
6
+ */
7
+ import { ColumnType, columnTypeName } from '../column-type.js';
8
+ import { CamusError } from '../errors.js';
9
+ import { CamusErrorCode } from '../error-codes.js';
10
+ import { CamusObjectId } from '../object-id.js';
11
+ import { dateToDayTicks, dateToTicks } from './ticks.js';
12
+ import { isUuid, uuidToHalves } from './uuid.js';
13
+ import { isTypedParameter, registerArrayEncoder } from './typed.js';
14
+ /**
15
+ * The wire form of one bound parameter.
16
+ *
17
+ * A `camus.*` helper carries its own column type. Anything else is inferred from the JavaScript
18
+ * value:
19
+ *
20
+ * - `null` and `undefined` — `Null`.
21
+ * - `boolean` — `Bool`.
22
+ * - `number` — `Integer64` when it is an integer, `Float64` otherwise.
23
+ * - `bigint` — `Integer64`.
24
+ * - `string` — `String`. A UUID string is **not** detected: state it with `camus.uuid`.
25
+ * - `Date` — `DateTime`. Use `camus.date` for a date-only column.
26
+ * - `Uint8Array`, `Buffer`, `ArrayBuffer` — `Bytes`.
27
+ * - `Float32Array` — `Bytes`, packed as a vector. It is the natural JavaScript form of an
28
+ * embedding, and a packed float32 buffer has no other meaning in CamusDB.
29
+ * - `CamusObjectId` — `Id`.
30
+ * - an array — `Array`, with the element type inferred from the first element that is not null.
31
+ */
32
+ export function encodeParameter(value) {
33
+ if (isTypedParameter(value))
34
+ return value.value;
35
+ return encodeInferred(value);
36
+ }
37
+ /**
38
+ * Builds the wire dictionary for a statement's parameters, or `undefined` when there are none.
39
+ *
40
+ * Placeholder names reach the server with a leading `@`, which is how the server publishes them
41
+ * for a prepared statement. A caller may write the name either way: `{ year: 1974 }` and
42
+ * `{ '@year': 1974 }` produce the same request.
43
+ */
44
+ export function encodeParameters(parameters) {
45
+ if (parameters === undefined)
46
+ return undefined;
47
+ const names = Object.keys(parameters);
48
+ if (names.length === 0)
49
+ return undefined;
50
+ const encoded = new Map();
51
+ for (const name of names) {
52
+ if (name.length === 0) {
53
+ throw new CamusError(CamusErrorCode.InvalidParameter, 'A parameter name cannot be empty.');
54
+ }
55
+ const wireName = name.startsWith('@') ? name : `@${name}`;
56
+ if (encoded.has(wireName)) {
57
+ throw new CamusError(CamusErrorCode.InvalidParameter, `The parameter '${wireName}' is bound twice. A name with and without its leading '@' is the same parameter.`);
58
+ }
59
+ encoded.set(wireName, encodeParameter(parameters[name]));
60
+ }
61
+ return encoded;
62
+ }
63
+ /** Encodes one value against a declared column type. Used for array elements. */
64
+ export function encodeAs(value, declared) {
65
+ if (value === null || value === undefined)
66
+ return { type: ColumnType.Null };
67
+ if (isTypedParameter(value))
68
+ return value.value;
69
+ switch (declared) {
70
+ case ColumnType.Null:
71
+ return { type: ColumnType.Null };
72
+ case ColumnType.Id:
73
+ return { type: ColumnType.Id, strValue: asIdString(value) };
74
+ case ColumnType.String:
75
+ return { type: ColumnType.String, strValue: asString(value) };
76
+ case ColumnType.Uuid:
77
+ return encodeUuid(asString(value));
78
+ case ColumnType.Integer64:
79
+ return { type: ColumnType.Integer64, longValue: asBigInt(value) };
80
+ case ColumnType.Float64:
81
+ case ColumnType.Float32:
82
+ return { type: declared, floatValue: asNumber(value) };
83
+ case ColumnType.Bool:
84
+ return { type: ColumnType.Bool, boolValue: asBoolean(value) };
85
+ case ColumnType.Bytes:
86
+ return { type: ColumnType.Bytes, bytesValue: asBytes(value) };
87
+ case ColumnType.Date:
88
+ return { type: ColumnType.Date, longValue: dateToDayTicks(asDate(value)) };
89
+ case ColumnType.DateTime:
90
+ return { type: ColumnType.DateTime, longValue: dateToTicks(asDate(value)) };
91
+ case ColumnType.Array:
92
+ return encodeArray(value, ColumnType.Null);
93
+ default:
94
+ return invalid(`Cannot encode a value as ${columnTypeName(declared)}.`);
95
+ }
96
+ }
97
+ registerArrayEncoder(encodeAs);
98
+ function encodeInferred(value) {
99
+ if (value === null || value === undefined)
100
+ return { type: ColumnType.Null };
101
+ switch (typeof value) {
102
+ case 'boolean':
103
+ return { type: ColumnType.Bool, boolValue: value };
104
+ case 'bigint':
105
+ return { type: ColumnType.Integer64, longValue: value };
106
+ case 'string':
107
+ return { type: ColumnType.String, strValue: value };
108
+ case 'number':
109
+ return Number.isInteger(value)
110
+ ? { type: ColumnType.Integer64, longValue: BigInt(value) }
111
+ : { type: ColumnType.Float64, floatValue: value };
112
+ case 'object':
113
+ break;
114
+ default:
115
+ return invalid(`Cannot bind a value of type ${typeof value}.`);
116
+ }
117
+ if (value instanceof Date) {
118
+ return { type: ColumnType.DateTime, longValue: dateToTicks(value) };
119
+ }
120
+ if (value instanceof CamusObjectId) {
121
+ return { type: ColumnType.Id, strValue: value.toString() };
122
+ }
123
+ if (value instanceof Float32Array) {
124
+ return { type: ColumnType.Bytes, bytesValue: packVector(value) };
125
+ }
126
+ if (value instanceof Uint8Array) {
127
+ return { type: ColumnType.Bytes, bytesValue: value };
128
+ }
129
+ if (value instanceof ArrayBuffer) {
130
+ return { type: ColumnType.Bytes, bytesValue: new Uint8Array(value) };
131
+ }
132
+ if (ArrayBuffer.isView(value)) {
133
+ return {
134
+ type: ColumnType.Bytes,
135
+ bytesValue: new Uint8Array(value.buffer, value.byteOffset, value.byteLength),
136
+ };
137
+ }
138
+ if (Array.isArray(value)) {
139
+ return encodeArray(value, ColumnType.Null);
140
+ }
141
+ return invalid(`Cannot bind a value of type ${describe(value)}.`);
142
+ }
143
+ function encodeArray(value, declaredElementType) {
144
+ if (!Array.isArray(value)) {
145
+ return invalid(`An array parameter needs an array; got ${describe(value)}.`);
146
+ }
147
+ let elementType = declaredElementType;
148
+ if (elementType === ColumnType.Null) {
149
+ for (const item of value) {
150
+ if (item === null || item === undefined)
151
+ continue;
152
+ elementType = inferElementType(item);
153
+ break;
154
+ }
155
+ if (elementType === ColumnType.Null && value.length > 0) {
156
+ return invalid('Cannot infer the element type of an array parameter whose elements are all null. ' +
157
+ 'State it with camus.array(items, ColumnType.…).');
158
+ }
159
+ }
160
+ const items = new Array(value.length);
161
+ for (let i = 0; i < value.length; i++) {
162
+ const item = value[i];
163
+ items[i] = item === null || item === undefined ? { type: ColumnType.Null } : encodeAs(item, elementType);
164
+ }
165
+ return { type: ColumnType.Array, arrayElementType: elementType, arrayValues: items };
166
+ }
167
+ function inferElementType(item) {
168
+ if (isTypedParameter(item))
169
+ return item.value.type;
170
+ return encodeInferred(item).type;
171
+ }
172
+ function encodeUuid(value) {
173
+ if (!isUuid(value)) {
174
+ return invalid(`'${value}' is not a canonical UUID string.`);
175
+ }
176
+ const { high, low } = uuidToHalves(value);
177
+ return { type: ColumnType.Uuid, strValue: value, uuidHigh: high, longValue: low };
178
+ }
179
+ function packVector(vector) {
180
+ const bytes = new Uint8Array(vector.length * 4);
181
+ const view = new DataView(bytes.buffer);
182
+ for (let i = 0; i < vector.length; i++) {
183
+ view.setFloat32(i * 4, vector[i], true);
184
+ }
185
+ return bytes;
186
+ }
187
+ function asString(value) {
188
+ if (typeof value === 'string')
189
+ return value;
190
+ if (typeof value === 'number' || typeof value === 'bigint' || typeof value === 'boolean') {
191
+ return String(value);
192
+ }
193
+ return invalid(`Cannot use ${describe(value)} as a string value.`);
194
+ }
195
+ function asIdString(value) {
196
+ if (value instanceof CamusObjectId)
197
+ return value.toString();
198
+ return asString(value);
199
+ }
200
+ function asBigInt(value) {
201
+ if (typeof value === 'bigint')
202
+ return value;
203
+ if (typeof value === 'number') {
204
+ if (!Number.isInteger(value)) {
205
+ return invalid(`An int64 parameter needs an integer; got ${String(value)}.`);
206
+ }
207
+ return BigInt(value);
208
+ }
209
+ if (typeof value === 'boolean')
210
+ return value ? 1n : 0n;
211
+ return invalid(`Cannot use ${describe(value)} as an int64 value.`);
212
+ }
213
+ function asNumber(value) {
214
+ if (typeof value === 'number')
215
+ return value;
216
+ if (typeof value === 'bigint')
217
+ return Number(value);
218
+ if (typeof value === 'boolean')
219
+ return value ? 1 : 0;
220
+ return invalid(`Cannot use ${describe(value)} as a float value.`);
221
+ }
222
+ function asBoolean(value) {
223
+ if (typeof value === 'boolean')
224
+ return value;
225
+ if (typeof value === 'number')
226
+ return value !== 0;
227
+ if (typeof value === 'bigint')
228
+ return value !== 0n;
229
+ return invalid(`Cannot use ${describe(value)} as a bool value.`);
230
+ }
231
+ function asBytes(value) {
232
+ if (value instanceof Float32Array)
233
+ return packVector(value);
234
+ if (value instanceof Uint8Array)
235
+ return value;
236
+ if (value instanceof ArrayBuffer)
237
+ return new Uint8Array(value);
238
+ if (ArrayBuffer.isView(value)) {
239
+ return new Uint8Array(value.buffer, value.byteOffset, value.byteLength);
240
+ }
241
+ if (Array.isArray(value))
242
+ return Uint8Array.from(value);
243
+ return invalid(`Cannot use ${describe(value)} as a bytes value.`);
244
+ }
245
+ function asDate(value) {
246
+ if (value instanceof Date)
247
+ return value;
248
+ if (typeof value === 'number')
249
+ return new Date(value);
250
+ if (typeof value === 'string') {
251
+ const parsed = new Date(value);
252
+ if (Number.isNaN(parsed.getTime())) {
253
+ return invalid(`'${value}' is not a date this driver can read.`);
254
+ }
255
+ return parsed;
256
+ }
257
+ return invalid(`Cannot use ${describe(value)} as a date value.`);
258
+ }
259
+ function describe(value) {
260
+ if (value === null)
261
+ return 'null';
262
+ if (value === undefined)
263
+ return 'undefined';
264
+ if (typeof value !== 'object')
265
+ return typeof value;
266
+ return value.constructor?.name ?? 'object';
267
+ }
268
+ function invalid(message) {
269
+ throw new CamusError(CamusErrorCode.InvalidParameter, message);
270
+ }
271
+ //# sourceMappingURL=encode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encode.js","sourceRoot":"","sources":["../../src/values/encode.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAE/D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAWpE;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,eAAe,CAAC,KAAqB;IACnD,IAAI,gBAAgB,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC;IAEhD,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAAkC;IACjE,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAE/C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACtC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAEzC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAuB,CAAC;IAE/C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,UAAU,CAAC,cAAc,CAAC,gBAAgB,EAAE,mCAAmC,CAAC,CAAC;QAC7F,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;QAE1D,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,UAAU,CAClB,cAAc,CAAC,gBAAgB,EAC/B,kBAAkB,QAAQ,kFAAkF,CAC7G,CAAC;QACJ,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,QAAQ,CAAC,KAAc,EAAE,QAAoB;IAC3D,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC;IAC5E,IAAI,gBAAgB,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC;IAEhD,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,UAAU,CAAC,IAAI;YAClB,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC;QAEnC,KAAK,UAAU,CAAC,EAAE;YAChB,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,EAAE,EAAE,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAE9D,KAAK,UAAU,CAAC,MAAM;YACpB,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAEhE,KAAK,UAAU,CAAC,IAAI;YAClB,OAAO,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAErC,KAAK,UAAU,CAAC,SAAS;YACvB,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAEpE,KAAK,UAAU,CAAC,OAAO,CAAC;QACxB,KAAK,UAAU,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAEzD,KAAK,UAAU,CAAC,IAAI;YAClB,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QAEhE,KAAK,UAAU,CAAC,KAAK;YACnB,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAEhE,KAAK,UAAU,CAAC,IAAI;YAClB,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QAE7E,KAAK,UAAU,CAAC,QAAQ;YACtB,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QAE9E,KAAK,UAAU,CAAC,KAAK;YACnB,OAAO,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;QAE7C;YACE,OAAO,OAAO,CAAC,4BAA4B,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC5E,CAAC;AACH,CAAC;AAED,oBAAoB,CAAC,QAAQ,CAAC,CAAC;AAE/B,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC;IAE5E,QAAQ,OAAO,KAAK,EAAE,CAAC;QACrB,KAAK,SAAS;YACZ,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAErD,KAAK,QAAQ;YACX,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAE1D,KAAK,QAAQ;YACX,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QAEtD,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;gBAC5B,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE;gBAC1D,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;QAEtD,KAAK,QAAQ;YACX,MAAM;QAER;YACE,OAAO,OAAO,CAAC,+BAA+B,OAAO,KAAK,GAAG,CAAC,CAAC;IACnE,CAAC;IAED,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;QAC1B,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;IACtE,CAAC;IAED,IAAI,KAAK,YAAY,aAAa,EAAE,CAAC;QACnC,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC7D,CAAC;IAED,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;QAClC,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;IACnE,CAAC;IAED,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;QAChC,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IACvD,CAAC;IAED,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;QACjC,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;IACvE,CAAC;IAED,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO;YACL,IAAI,EAAE,UAAU,CAAC,KAAK;YACtB,UAAU,EAAE,IAAI,UAAU,CAAC,KAAK,CAAC,MAAqB,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC;SAC5F,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,OAAO,CAAC,+BAA+B,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,WAAW,CAAC,KAAc,EAAE,mBAA+B;IAClE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,OAAO,CAAC,0CAA0C,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/E,CAAC;IAED,IAAI,WAAW,GAAG,mBAAmB,CAAC;IAEtC,IAAI,WAAW,KAAK,UAAU,CAAC,IAAI,EAAE,CAAC;QACpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS;gBAAE,SAAS;YAClD,WAAW,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;YACrC,MAAM;QACR,CAAC;QAED,IAAI,WAAW,KAAK,UAAU,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxD,OAAO,OAAO,CACZ,mFAAmF;gBACjF,iDAAiD,CACpD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAkB,IAAI,KAAK,CAAc,KAAK,CAAC,MAAM,CAAC,CAAC;IAElE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAY,CAAC;QACjC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC3G,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;AACvF,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAa;IACrC,IAAI,gBAAgB,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IAEnD,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;AACnC,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QACnB,OAAO,OAAO,CAAC,IAAI,KAAK,mCAAmC,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAC1C,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;AACpF,CAAC;AAED,SAAS,UAAU,CAAC,MAAoB;IACtC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAExC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAW,EAAE,IAAI,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QACzF,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,OAAO,OAAO,CAAC,cAAc,QAAQ,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,IAAI,KAAK,YAAY,aAAa;QAAE,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC5D,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAE5C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7B,OAAO,OAAO,CAAC,4CAA4C,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/E,CAAC;QAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAEvD,OAAO,OAAO,CAAC,cAAc,QAAQ,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACpD,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAErD,OAAO,OAAO,CAAC,cAAc,QAAQ,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,KAAK,CAAC,CAAC;IAClD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,KAAK,EAAE,CAAC;IAEnD,OAAO,OAAO,CAAC,cAAc,QAAQ,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,OAAO,CAAC,KAAc;IAC7B,IAAI,KAAK,YAAY,YAAY;QAAE,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;IAC5D,IAAI,KAAK,YAAY,UAAU;QAAE,OAAO,KAAK,CAAC;IAC9C,IAAI,KAAK,YAAY,WAAW;QAAE,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;IAE/D,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,MAAqB,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IACzF,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,UAAU,CAAC,IAAI,CAAC,KAA8B,CAAC,CAAC;IAEjF,OAAO,OAAO,CAAC,cAAc,QAAQ,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,MAAM,CAAC,KAAc;IAC5B,IAAI,KAAK,YAAY,IAAI;QAAE,OAAO,KAAK,CAAC;IAExC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;IAEtD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;QAE/B,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YACnC,OAAO,OAAO,CAAC,IAAI,KAAK,uCAAuC,CAAC,CAAC;QACnE,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,OAAO,CAAC,cAAc,QAAQ,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IAClC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,WAAW,CAAC;IAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,OAAO,KAAK,CAAC;IAEnD,OAAO,KAAK,CAAC,WAAW,EAAE,IAAI,IAAI,QAAQ,CAAC;AAC7C,CAAC;AAED,SAAS,OAAO,CAAC,OAAe;IAC9B,MAAM,IAAI,UAAU,CAAC,cAAc,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;AACjE,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * This file is part of CamusDB
3
+ *
4
+ * For the full copyright and license information, please view the LICENSE.txt
5
+ * file that was distributed with this source code.
6
+ */
7
+ /**
8
+ * Converts between a JavaScript `Date` and the .NET tick count CamusDB stores for a `Date` or a
9
+ * `DateTime` column.
10
+ *
11
+ * A tick is 100 nanoseconds. Tick zero is 0001-01-01T00:00:00 UTC. A `Date` holds whole
12
+ * milliseconds since 1970-01-01T00:00:00 UTC, so the two differ by a fixed offset and by
13
+ * resolution: 10,000 ticks make one millisecond.
14
+ *
15
+ * The conversion to a `Date` therefore discards sub-millisecond precision. That loss is one-way
16
+ * and unavoidable in JavaScript. Read `ColumnValue.longValue` from the raw row when you need the
17
+ * exact stored instant.
18
+ */
19
+ /** Ticks in one millisecond. */
20
+ export declare const TICKS_PER_MILLISECOND = 10000n;
21
+ /** Ticks in one day. */
22
+ export declare const TICKS_PER_DAY = 864000000000n;
23
+ /** Ticks between 0001-01-01 and the Unix epoch. */
24
+ export declare const UNIX_EPOCH_TICKS = 621355968000000000n;
25
+ /** The UTC `Date` a tick count names. Sub-millisecond precision is truncated toward the past. */
26
+ export declare function ticksToDate(ticks: bigint): Date;
27
+ /** The tick count for an instant. */
28
+ export declare function dateToTicks(date: Date): bigint;
29
+ /** The tick count for an instant, truncated to UTC midnight — what a `Date` column stores. */
30
+ export declare function dateToDayTicks(date: Date): bigint;
31
+ //# sourceMappingURL=ticks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ticks.d.ts","sourceRoot":"","sources":["../../src/values/ticks.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;;;;GAWG;AAEH,gCAAgC;AAChC,eAAO,MAAM,qBAAqB,SAAU,CAAC;AAE7C,wBAAwB;AACxB,eAAO,MAAM,aAAa,gBAAmB,CAAC;AAE9C,mDAAmD;AACnD,eAAO,MAAM,gBAAgB,sBAA2B,CAAC;AAEzD,iGAAiG;AACjG,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAG/C;AAED,qCAAqC;AACrC,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAQ9C;AAED,8FAA8F;AAC9F,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAGjD"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * This file is part of CamusDB
3
+ *
4
+ * For the full copyright and license information, please view the LICENSE.txt
5
+ * file that was distributed with this source code.
6
+ */
7
+ /**
8
+ * Converts between a JavaScript `Date` and the .NET tick count CamusDB stores for a `Date` or a
9
+ * `DateTime` column.
10
+ *
11
+ * A tick is 100 nanoseconds. Tick zero is 0001-01-01T00:00:00 UTC. A `Date` holds whole
12
+ * milliseconds since 1970-01-01T00:00:00 UTC, so the two differ by a fixed offset and by
13
+ * resolution: 10,000 ticks make one millisecond.
14
+ *
15
+ * The conversion to a `Date` therefore discards sub-millisecond precision. That loss is one-way
16
+ * and unavoidable in JavaScript. Read `ColumnValue.longValue` from the raw row when you need the
17
+ * exact stored instant.
18
+ */
19
+ /** Ticks in one millisecond. */
20
+ export const TICKS_PER_MILLISECOND = 10000n;
21
+ /** Ticks in one day. */
22
+ export const TICKS_PER_DAY = 864000000000n;
23
+ /** Ticks between 0001-01-01 and the Unix epoch. */
24
+ export const UNIX_EPOCH_TICKS = 621355968000000000n;
25
+ /** The UTC `Date` a tick count names. Sub-millisecond precision is truncated toward the past. */
26
+ export function ticksToDate(ticks) {
27
+ const millis = floorDiv(ticks - UNIX_EPOCH_TICKS, TICKS_PER_MILLISECOND);
28
+ return new Date(Number(millis));
29
+ }
30
+ /** The tick count for an instant. */
31
+ export function dateToTicks(date) {
32
+ const millis = date.getTime();
33
+ if (!Number.isFinite(millis)) {
34
+ throw new RangeError('An invalid Date has no tick value.');
35
+ }
36
+ return BigInt(millis) * TICKS_PER_MILLISECOND + UNIX_EPOCH_TICKS;
37
+ }
38
+ /** The tick count for an instant, truncated to UTC midnight — what a `Date` column stores. */
39
+ export function dateToDayTicks(date) {
40
+ const ticks = dateToTicks(date);
41
+ return ticks - floorMod(ticks, TICKS_PER_DAY);
42
+ }
43
+ // BigInt division truncates toward zero, so a pre-epoch instant would round the wrong way.
44
+ function floorDiv(a, b) {
45
+ const quotient = a / b;
46
+ return a % b !== 0n && a < 0n !== b < 0n ? quotient - 1n : quotient;
47
+ }
48
+ function floorMod(a, b) {
49
+ const remainder = a % b;
50
+ return remainder !== 0n && remainder < 0n !== b < 0n ? remainder + b : remainder;
51
+ }
52
+ //# sourceMappingURL=ticks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ticks.js","sourceRoot":"","sources":["../../src/values/ticks.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;;;;GAWG;AAEH,gCAAgC;AAChC,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAO,CAAC;AAE7C,wBAAwB;AACxB,MAAM,CAAC,MAAM,aAAa,GAAG,aAAgB,CAAC;AAE9C,mDAAmD;AACnD,MAAM,CAAC,MAAM,gBAAgB,GAAG,mBAAwB,CAAC;AAEzD,iGAAiG;AACjG,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,GAAG,gBAAgB,EAAE,qBAAqB,CAAC,CAAC;IACzE,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AAClC,CAAC;AAED,qCAAqC;AACrC,MAAM,UAAU,WAAW,CAAC,IAAU;IACpC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAE9B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,UAAU,CAAC,oCAAoC,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,qBAAqB,GAAG,gBAAgB,CAAC;AACnE,CAAC;AAED,8FAA8F;AAC9F,MAAM,UAAU,cAAc,CAAC,IAAU;IACvC,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAChC,OAAO,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;AAChD,CAAC;AAED,2FAA2F;AAC3F,SAAS,QAAQ,CAAC,CAAS,EAAE,CAAS;IACpC,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC;IACvB,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;AACtE,CAAC;AAED,SAAS,QAAQ,CAAC,CAAS,EAAE,CAAS;IACpC,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC;IACxB,OAAO,SAAS,KAAK,EAAE,IAAI,SAAS,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACnF,CAAC"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * This file is part of CamusDB
3
+ *
4
+ * For the full copyright and license information, please view the LICENSE.txt
5
+ * file that was distributed with this source code.
6
+ */
7
+ import { ColumnType } from '../column-type.js';
8
+ import type { ColumnValue } from '../column-value.js';
9
+ declare const TYPED: unique symbol;
10
+ /**
11
+ * A parameter whose column type the caller stated, rather than one the driver inferred from the
12
+ * JavaScript value. Build one with a helper from `camus` below and pass it as a parameter value.
13
+ */
14
+ export interface TypedParameter {
15
+ readonly [TYPED]: true;
16
+ readonly value: ColumnValue;
17
+ }
18
+ /** True when `value` came from one of the `camus.*` helpers. */
19
+ export declare function isTypedParameter(value: unknown): value is TypedParameter;
20
+ /**
21
+ * Explicit column types for parameters.
22
+ *
23
+ * The driver infers a column type from the JavaScript value, which is right for most parameters. A
24
+ * helper here states the type instead, for the cases inference cannot reach: a `uuid` column (a
25
+ * UUID is an ordinary string in JavaScript), an `id` column, a `float32` column, a date-only
26
+ * column, and an empty array, whose element type nothing can be read from.
27
+ */
28
+ export declare const camus: {
29
+ /** An `id` column value: an ObjectId as its 24-character string. */
30
+ readonly id: (value: string) => TypedParameter;
31
+ /** A `uuid` column value, from the canonical hyphenated string. */
32
+ readonly uuid: (value: string) => TypedParameter;
33
+ /** An `int64` column value. */
34
+ readonly int64: (value: number | bigint) => TypedParameter;
35
+ /** A `float64` column value. */
36
+ readonly float64: (value: number) => TypedParameter;
37
+ /** A `float32` column value. The server narrows it to single precision. */
38
+ readonly float32: (value: number) => TypedParameter;
39
+ /** A `bool` column value. */
40
+ readonly bool: (value: boolean) => TypedParameter;
41
+ /** A `string` column value. */
42
+ readonly string: (value: string) => TypedParameter;
43
+ /** A `bytes` column value. */
44
+ readonly bytes: (value: Uint8Array | ArrayBuffer) => TypedParameter;
45
+ /**
46
+ * A `bytes` column value holding an embedding: tightly packed little-endian float32 elements.
47
+ * The same layout `CamusVector` reads back.
48
+ */
49
+ readonly vector: (value: ArrayLike<number>) => TypedParameter;
50
+ /** A `date` column value. The instant is truncated to UTC midnight, as the column stores it. */
51
+ readonly date: (value: Date) => TypedParameter;
52
+ /** A `datetime` column value. */
53
+ readonly dateTime: (value: Date) => TypedParameter;
54
+ /**
55
+ * An array column value with a stated element type. Use it for an empty array, whose element
56
+ * type cannot be inferred, and whenever the element type is not the one inference would pick.
57
+ */
58
+ readonly array: (items: readonly unknown[], elementType: ColumnType) => TypedParameter;
59
+ /** A typed `NULL`. */
60
+ readonly null: () => TypedParameter;
61
+ /** A value built by hand, sent as written. The escape hatch when nothing above fits. */
62
+ readonly raw: (value: ColumnValue) => TypedParameter;
63
+ };
64
+ /** @internal */
65
+ export declare function registerArrayEncoder(encode: (value: unknown, declared: ColumnType) => ColumnValue): void;
66
+ export {};
67
+ //# sourceMappingURL=typed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typed.d.ts","sourceRoot":"","sources":["../../src/values/typed.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAMtD,QAAA,MAAM,KAAK,eAAuC,CAAC;AAEnD;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;CAC7B;AAED,gEAAgE;AAChE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAExE;AAUD;;;;;;;GAOG;AACH,eAAO,MAAM,KAAK;IAChB,oEAAoE;yBAC1D,MAAM,KAAG,cAAc;IAIjC,mEAAmE;2BACvD,MAAM,KAAG,cAAc;IASnC,+BAA+B;4BAClB,MAAM,GAAG,MAAM,KAAG,cAAc;IAI7C,gCAAgC;8BACjB,MAAM,KAAG,cAAc;IAItC,2EAA2E;8BAC5D,MAAM,KAAG,cAAc;IAItC,6BAA6B;2BACjB,OAAO,KAAG,cAAc;IAIpC,+BAA+B;6BACjB,MAAM,KAAG,cAAc;IAIrC,8BAA8B;4BACjB,UAAU,GAAG,WAAW,KAAG,cAAc;IAItD;;;OAGG;6BACW,SAAS,CAAC,MAAM,CAAC,KAAG,cAAc;IAWhD,gGAAgG;2BACpF,IAAI,KAAG,cAAc;IAIjC,iCAAiC;+BACjB,IAAI,KAAG,cAAc;IAIrC;;;OAGG;4BACU,SAAS,OAAO,EAAE,eAAe,UAAU,KAAG,cAAc;IAiBzE,sBAAsB;yBACd,cAAc;IAItB,wFAAwF;0BAC7E,WAAW,KAAG,cAAc;CAG/B,CAAC;AASX,gBAAgB;AAChB,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,KAAK,WAAW,GAAG,IAAI,CAExG"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * This file is part of CamusDB
3
+ *
4
+ * For the full copyright and license information, please view the LICENSE.txt
5
+ * file that was distributed with this source code.
6
+ */
7
+ import { ColumnType } from '../column-type.js';
8
+ import { CamusError } from '../errors.js';
9
+ import { CamusErrorCode } from '../error-codes.js';
10
+ import { dateToDayTicks, dateToTicks } from './ticks.js';
11
+ import { isUuid, uuidToHalves } from './uuid.js';
12
+ const TYPED = Symbol.for('camusdb.typedParameter');
13
+ /** True when `value` came from one of the `camus.*` helpers. */
14
+ export function isTypedParameter(value) {
15
+ return typeof value === 'object' && value !== null && value[TYPED] === true;
16
+ }
17
+ function typed(value) {
18
+ return { [TYPED]: true, value };
19
+ }
20
+ function invalid(message) {
21
+ throw new CamusError(CamusErrorCode.InvalidParameter, message);
22
+ }
23
+ /**
24
+ * Explicit column types for parameters.
25
+ *
26
+ * The driver infers a column type from the JavaScript value, which is right for most parameters. A
27
+ * helper here states the type instead, for the cases inference cannot reach: a `uuid` column (a
28
+ * UUID is an ordinary string in JavaScript), an `id` column, a `float32` column, a date-only
29
+ * column, and an empty array, whose element type nothing can be read from.
30
+ */
31
+ export const camus = {
32
+ /** An `id` column value: an ObjectId as its 24-character string. */
33
+ id(value) {
34
+ return typed({ type: ColumnType.Id, strValue: value });
35
+ },
36
+ /** A `uuid` column value, from the canonical hyphenated string. */
37
+ uuid(value) {
38
+ if (!isUuid(value)) {
39
+ invalid(`'${value}' is not a canonical UUID string.`);
40
+ }
41
+ const { high, low } = uuidToHalves(value);
42
+ return typed({ type: ColumnType.Uuid, strValue: value, uuidHigh: high, longValue: low });
43
+ },
44
+ /** An `int64` column value. */
45
+ int64(value) {
46
+ return typed({ type: ColumnType.Integer64, longValue: toBigInt(value) });
47
+ },
48
+ /** A `float64` column value. */
49
+ float64(value) {
50
+ return typed({ type: ColumnType.Float64, floatValue: value });
51
+ },
52
+ /** A `float32` column value. The server narrows it to single precision. */
53
+ float32(value) {
54
+ return typed({ type: ColumnType.Float32, floatValue: value });
55
+ },
56
+ /** A `bool` column value. */
57
+ bool(value) {
58
+ return typed({ type: ColumnType.Bool, boolValue: value });
59
+ },
60
+ /** A `string` column value. */
61
+ string(value) {
62
+ return typed({ type: ColumnType.String, strValue: value });
63
+ },
64
+ /** A `bytes` column value. */
65
+ bytes(value) {
66
+ return typed({ type: ColumnType.Bytes, bytesValue: toBytes(value) });
67
+ },
68
+ /**
69
+ * A `bytes` column value holding an embedding: tightly packed little-endian float32 elements.
70
+ * The same layout `CamusVector` reads back.
71
+ */
72
+ vector(value) {
73
+ const bytes = new Uint8Array(value.length * 4);
74
+ const view = new DataView(bytes.buffer);
75
+ for (let i = 0; i < value.length; i++) {
76
+ view.setFloat32(i * 4, value[i], true);
77
+ }
78
+ return typed({ type: ColumnType.Bytes, bytesValue: bytes });
79
+ },
80
+ /** A `date` column value. The instant is truncated to UTC midnight, as the column stores it. */
81
+ date(value) {
82
+ return typed({ type: ColumnType.Date, longValue: dateToDayTicks(value) });
83
+ },
84
+ /** A `datetime` column value. */
85
+ dateTime(value) {
86
+ return typed({ type: ColumnType.DateTime, longValue: dateToTicks(value) });
87
+ },
88
+ /**
89
+ * An array column value with a stated element type. Use it for an empty array, whose element
90
+ * type cannot be inferred, and whenever the element type is not the one inference would pick.
91
+ */
92
+ array(items, elementType) {
93
+ // Imported lazily to break the cycle with the encoder, which imports this module.
94
+ const encode = arrayEncoder;
95
+ if (encode === undefined) {
96
+ throw new Error('The value encoder is not registered yet.');
97
+ }
98
+ return typed({
99
+ type: ColumnType.Array,
100
+ arrayElementType: elementType,
101
+ arrayValues: items.map((item) => item === null || item === undefined ? { type: ColumnType.Null } : encode(item, elementType)),
102
+ });
103
+ },
104
+ /** A typed `NULL`. */
105
+ null() {
106
+ return typed({ type: ColumnType.Null });
107
+ },
108
+ /** A value built by hand, sent as written. The escape hatch when nothing above fits. */
109
+ raw(value) {
110
+ return typed(value);
111
+ },
112
+ };
113
+ /**
114
+ * The element encoder `camus.array` uses, registered by the encoder module at load time. The two
115
+ * modules genuinely need each other — an array holds values, and a value can be an array — and a
116
+ * one-way registration is clearer than a cycle the bundler has to resolve.
117
+ */
118
+ let arrayEncoder;
119
+ /** @internal */
120
+ export function registerArrayEncoder(encode) {
121
+ arrayEncoder = encode;
122
+ }
123
+ function toBigInt(value) {
124
+ if (typeof value === 'bigint')
125
+ return value;
126
+ if (!Number.isInteger(value)) {
127
+ invalid(`An int64 parameter needs an integer; got ${String(value)}.`);
128
+ }
129
+ return BigInt(value);
130
+ }
131
+ function toBytes(value) {
132
+ return value instanceof Uint8Array ? value : new Uint8Array(value);
133
+ }
134
+ //# sourceMappingURL=typed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typed.js","sourceRoot":"","sources":["../../src/values/typed.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * This file is part of CamusDB
3
+ *
4
+ * For the full copyright and license information, please view the LICENSE.txt
5
+ * file that was distributed with this source code.
6
+ */
7
+ /** True when `value` is a canonical hyphenated UUID string. Matching ignores case. */
8
+ export declare function isUuid(value: string): boolean;
9
+ /** The 16 big-endian bytes of a canonical UUID string. */
10
+ export declare function uuidToBytes(uuid: string): Uint8Array;
11
+ /** The canonical string for 16 big-endian bytes. */
12
+ export declare function bytesToUuid(bytes: Uint8Array): string;
13
+ /** The two big-endian 64-bit halves of a canonical UUID string. */
14
+ export declare function uuidToHalves(uuid: string): {
15
+ high: bigint;
16
+ low: bigint;
17
+ };
18
+ /** The two big-endian 64-bit halves of 16 bytes. */
19
+ export declare function bytesToHalves(bytes: Uint8Array): {
20
+ high: bigint;
21
+ low: bigint;
22
+ };
23
+ /** The 16 big-endian bytes of two 64-bit halves. */
24
+ export declare function halvesToBytes(high: bigint, low: bigint): Uint8Array;
25
+ /** The canonical string for two 64-bit halves. */
26
+ export declare function halvesToUuid(high: bigint, low: bigint): string;
27
+ //# sourceMappingURL=uuid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uuid.d.ts","sourceRoot":"","sources":["../../src/values/uuid.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgBH,sFAAsF;AACtF,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE7C;AAED,0DAA0D;AAC1D,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAoBpD;AAED,oDAAoD;AACpD,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAcrD;AAED,mEAAmE;AACnE,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAExE;AAED,oDAAoD;AACpD,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAM9E;AAED,oDAAoD;AACpD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,CAMnE;AAED,kDAAkD;AAClD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE9D"}