@voyant-travel/db 0.108.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 (336) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +60 -0
  3. package/dist/aggregate-snapshots.d.ts +66 -0
  4. package/dist/aggregate-snapshots.d.ts.map +1 -0
  5. package/dist/aggregate-snapshots.js +110 -0
  6. package/dist/aggregate-snapshots.js.map +1 -0
  7. package/dist/columns/collection.d.ts +37 -0
  8. package/dist/columns/collection.d.ts.map +1 -0
  9. package/dist/columns/collection.js +44 -0
  10. package/dist/columns/collection.js.map +1 -0
  11. package/dist/columns/cruise.d.ts +26 -0
  12. package/dist/columns/cruise.d.ts.map +1 -0
  13. package/dist/columns/cruise.js +31 -0
  14. package/dist/columns/cruise.js.map +1 -0
  15. package/dist/columns/departure-sub-tables.d.ts +179 -0
  16. package/dist/columns/departure-sub-tables.d.ts.map +1 -0
  17. package/dist/columns/departure-sub-tables.js +214 -0
  18. package/dist/columns/departure-sub-tables.js.map +1 -0
  19. package/dist/columns/departure.d.ts +20 -0
  20. package/dist/columns/departure.d.ts.map +1 -0
  21. package/dist/columns/departure.js +23 -0
  22. package/dist/columns/departure.js.map +1 -0
  23. package/dist/columns/destinations.d.ts +21 -0
  24. package/dist/columns/destinations.d.ts.map +1 -0
  25. package/dist/columns/destinations.js +24 -0
  26. package/dist/columns/destinations.js.map +1 -0
  27. package/dist/columns/index.d.ts +31 -0
  28. package/dist/columns/index.d.ts.map +1 -0
  29. package/dist/columns/index.js +57 -0
  30. package/dist/columns/index.js.map +1 -0
  31. package/dist/columns/itinerary-sub-tables.d.ts +177 -0
  32. package/dist/columns/itinerary-sub-tables.d.ts.map +1 -0
  33. package/dist/columns/itinerary-sub-tables.js +122 -0
  34. package/dist/columns/itinerary-sub-tables.js.map +1 -0
  35. package/dist/columns/itinerary.d.ts +17 -0
  36. package/dist/columns/itinerary.d.ts.map +1 -0
  37. package/dist/columns/itinerary.js +20 -0
  38. package/dist/columns/itinerary.js.map +1 -0
  39. package/dist/columns/lodging.d.ts +143 -0
  40. package/dist/columns/lodging.d.ts.map +1 -0
  41. package/dist/columns/lodging.js +164 -0
  42. package/dist/columns/lodging.js.map +1 -0
  43. package/dist/columns/offers.d.ts +31 -0
  44. package/dist/columns/offers.d.ts.map +1 -0
  45. package/dist/columns/offers.js +43 -0
  46. package/dist/columns/offers.js.map +1 -0
  47. package/dist/columns/pricing.d.ts +60 -0
  48. package/dist/columns/pricing.d.ts.map +1 -0
  49. package/dist/columns/pricing.js +71 -0
  50. package/dist/columns/pricing.js.map +1 -0
  51. package/dist/columns/product-accommodation.d.ts +99 -0
  52. package/dist/columns/product-accommodation.d.ts.map +1 -0
  53. package/dist/columns/product-accommodation.js +65 -0
  54. package/dist/columns/product-accommodation.js.map +1 -0
  55. package/dist/columns/product-addons.d.ts +18 -0
  56. package/dist/columns/product-addons.d.ts.map +1 -0
  57. package/dist/columns/product-addons.js +21 -0
  58. package/dist/columns/product-addons.js.map +1 -0
  59. package/dist/columns/product-availability-states.d.ts +65 -0
  60. package/dist/columns/product-availability-states.d.ts.map +1 -0
  61. package/dist/columns/product-availability-states.js +81 -0
  62. package/dist/columns/product-availability-states.js.map +1 -0
  63. package/dist/columns/product-availability.d.ts +21 -0
  64. package/dist/columns/product-availability.d.ts.map +1 -0
  65. package/dist/columns/product-availability.js +24 -0
  66. package/dist/columns/product-availability.js.map +1 -0
  67. package/dist/columns/product-booking-rules.d.ts +45 -0
  68. package/dist/columns/product-booking-rules.d.ts.map +1 -0
  69. package/dist/columns/product-booking-rules.js +55 -0
  70. package/dist/columns/product-booking-rules.js.map +1 -0
  71. package/dist/columns/product-category-assignments.d.ts +17 -0
  72. package/dist/columns/product-category-assignments.d.ts.map +1 -0
  73. package/dist/columns/product-category-assignments.js +20 -0
  74. package/dist/columns/product-category-assignments.js.map +1 -0
  75. package/dist/columns/product-extensions.d.ts +24 -0
  76. package/dist/columns/product-extensions.d.ts.map +1 -0
  77. package/dist/columns/product-extensions.js +27 -0
  78. package/dist/columns/product-extensions.js.map +1 -0
  79. package/dist/columns/product-media.d.ts +19 -0
  80. package/dist/columns/product-media.d.ts.map +1 -0
  81. package/dist/columns/product-media.js +22 -0
  82. package/dist/columns/product-media.js.map +1 -0
  83. package/dist/columns/product-overrides.d.ts +19 -0
  84. package/dist/columns/product-overrides.d.ts.map +1 -0
  85. package/dist/columns/product-overrides.js +22 -0
  86. package/dist/columns/product-overrides.js.map +1 -0
  87. package/dist/columns/product-preferences.d.ts +51 -0
  88. package/dist/columns/product-preferences.d.ts.map +1 -0
  89. package/dist/columns/product-preferences.js +59 -0
  90. package/dist/columns/product-preferences.js.map +1 -0
  91. package/dist/columns/product-publish-settings.d.ts +18 -0
  92. package/dist/columns/product-publish-settings.d.ts.map +1 -0
  93. package/dist/columns/product-publish-settings.js +21 -0
  94. package/dist/columns/product-publish-settings.js.map +1 -0
  95. package/dist/columns/product-rate-plans.d.ts +28 -0
  96. package/dist/columns/product-rate-plans.d.ts.map +1 -0
  97. package/dist/columns/product-rate-plans.js +33 -0
  98. package/dist/columns/product-rate-plans.js.map +1 -0
  99. package/dist/columns/product-translations.d.ts +24 -0
  100. package/dist/columns/product-translations.d.ts.map +1 -0
  101. package/dist/columns/product-translations.js +27 -0
  102. package/dist/columns/product-translations.js.map +1 -0
  103. package/dist/columns/product-versions.d.ts +19 -0
  104. package/dist/columns/product-versions.d.ts.map +1 -0
  105. package/dist/columns/product-versions.js +22 -0
  106. package/dist/columns/product-versions.js.map +1 -0
  107. package/dist/columns/product-visibility.d.ts +16 -0
  108. package/dist/columns/product-visibility.d.ts.map +1 -0
  109. package/dist/columns/product-visibility.js +19 -0
  110. package/dist/columns/product-visibility.js.map +1 -0
  111. package/dist/columns/product.d.ts +56 -0
  112. package/dist/columns/product.d.ts.map +1 -0
  113. package/dist/columns/product.js +44 -0
  114. package/dist/columns/product.js.map +1 -0
  115. package/dist/columns/room.d.ts +117 -0
  116. package/dist/columns/room.d.ts.map +1 -0
  117. package/dist/columns/room.js +86 -0
  118. package/dist/columns/room.js.map +1 -0
  119. package/dist/columns/ship.d.ts +22 -0
  120. package/dist/columns/ship.d.ts.map +1 -0
  121. package/dist/columns/ship.js +25 -0
  122. package/dist/columns/ship.js.map +1 -0
  123. package/dist/columns/tags.d.ts +33 -0
  124. package/dist/columns/tags.d.ts.map +1 -0
  125. package/dist/columns/tags.js +38 -0
  126. package/dist/columns/tags.js.map +1 -0
  127. package/dist/columns/transport.d.ts +53 -0
  128. package/dist/columns/transport.d.ts.map +1 -0
  129. package/dist/columns/transport.js +62 -0
  130. package/dist/columns/transport.js.map +1 -0
  131. package/dist/connection-config.d.ts +101 -0
  132. package/dist/connection-config.d.ts.map +1 -0
  133. package/dist/connection-config.js +106 -0
  134. package/dist/connection-config.js.map +1 -0
  135. package/dist/crud.d.ts +87 -0
  136. package/dist/crud.d.ts.map +1 -0
  137. package/dist/crud.js +190 -0
  138. package/dist/crud.js.map +1 -0
  139. package/dist/helpers.d.ts +33 -0
  140. package/dist/helpers.d.ts.map +1 -0
  141. package/dist/helpers.js +49 -0
  142. package/dist/helpers.js.map +1 -0
  143. package/dist/index.d.ts +109 -0
  144. package/dist/index.d.ts.map +1 -0
  145. package/dist/index.js +155 -0
  146. package/dist/index.js.map +1 -0
  147. package/dist/lib/index.d.ts +3 -0
  148. package/dist/lib/index.d.ts.map +1 -0
  149. package/dist/lib/index.js +5 -0
  150. package/dist/lib/index.js.map +1 -0
  151. package/dist/lib/typeid-column.d.ts +75 -0
  152. package/dist/lib/typeid-column.d.ts.map +1 -0
  153. package/dist/lib/typeid-column.js +92 -0
  154. package/dist/lib/typeid-column.js.map +1 -0
  155. package/dist/lib/typeid-core.d.ts +36 -0
  156. package/dist/lib/typeid-core.d.ts.map +1 -0
  157. package/dist/lib/typeid-core.js +67 -0
  158. package/dist/lib/typeid-core.js.map +1 -0
  159. package/dist/lib/typeid-prefixes.d.ts +342 -0
  160. package/dist/lib/typeid-prefixes.d.ts.map +1 -0
  161. package/dist/lib/typeid-prefixes.js +379 -0
  162. package/dist/lib/typeid-prefixes.js.map +1 -0
  163. package/dist/lib/typeid-schemas.d.ts +206 -0
  164. package/dist/lib/typeid-schemas.d.ts.map +1 -0
  165. package/dist/lib/typeid-schemas.js +207 -0
  166. package/dist/lib/typeid-schemas.js.map +1 -0
  167. package/dist/lib/typeid-zod.d.ts +16 -0
  168. package/dist/lib/typeid-zod.d.ts.map +1 -0
  169. package/dist/lib/typeid-zod.js +29 -0
  170. package/dist/lib/typeid-zod.js.map +1 -0
  171. package/dist/lib/typeid.d.ts +2 -0
  172. package/dist/lib/typeid.d.ts.map +1 -0
  173. package/dist/lib/typeid.js +6 -0
  174. package/dist/lib/typeid.js.map +1 -0
  175. package/dist/lifecycle.d.ts +24 -0
  176. package/dist/lifecycle.d.ts.map +1 -0
  177. package/dist/lifecycle.js +30 -0
  178. package/dist/lifecycle.js.map +1 -0
  179. package/dist/links.d.ts +22 -0
  180. package/dist/links.d.ts.map +1 -0
  181. package/dist/links.js +281 -0
  182. package/dist/links.js.map +1 -0
  183. package/dist/operators.d.ts +9 -0
  184. package/dist/operators.d.ts.map +1 -0
  185. package/dist/operators.js +9 -0
  186. package/dist/operators.js.map +1 -0
  187. package/dist/outbox.d.ts +87 -0
  188. package/dist/outbox.d.ts.map +1 -0
  189. package/dist/outbox.js +245 -0
  190. package/dist/outbox.js.map +1 -0
  191. package/dist/primitives/catalog-schemas.d.ts +101 -0
  192. package/dist/primitives/catalog-schemas.d.ts.map +1 -0
  193. package/dist/primitives/catalog-schemas.js +69 -0
  194. package/dist/primitives/catalog-schemas.js.map +1 -0
  195. package/dist/primitives/catalog.d.ts +47 -0
  196. package/dist/primitives/catalog.d.ts.map +1 -0
  197. package/dist/primitives/catalog.js +94 -0
  198. package/dist/primitives/catalog.js.map +1 -0
  199. package/dist/primitives/index.d.ts +4 -0
  200. package/dist/primitives/index.d.ts.map +1 -0
  201. package/dist/primitives/index.js +4 -0
  202. package/dist/primitives/index.js.map +1 -0
  203. package/dist/primitives/offers.d.ts +224 -0
  204. package/dist/primitives/offers.d.ts.map +1 -0
  205. package/dist/primitives/offers.js +132 -0
  206. package/dist/primitives/offers.js.map +1 -0
  207. package/dist/queries/index.d.ts +18 -0
  208. package/dist/queries/index.d.ts.map +1 -0
  209. package/dist/queries/index.js +30 -0
  210. package/dist/queries/index.js.map +1 -0
  211. package/dist/runtime/index.d.ts +4 -0
  212. package/dist/runtime/index.d.ts.map +1 -0
  213. package/dist/runtime/index.js +5 -0
  214. package/dist/runtime/index.js.map +1 -0
  215. package/dist/runtime/locks.d.ts +5 -0
  216. package/dist/runtime/locks.d.ts.map +1 -0
  217. package/dist/runtime/locks.js +36 -0
  218. package/dist/runtime/locks.js.map +1 -0
  219. package/dist/schema/00_ensure_schemas.d.ts +5 -0
  220. package/dist/schema/00_ensure_schemas.d.ts.map +1 -0
  221. package/dist/schema/00_ensure_schemas.js +6 -0
  222. package/dist/schema/00_ensure_schemas.js.map +1 -0
  223. package/dist/schema/aggregate-snapshots.d.ts +97 -0
  224. package/dist/schema/aggregate-snapshots.d.ts.map +1 -0
  225. package/dist/schema/aggregate-snapshots.js +27 -0
  226. package/dist/schema/aggregate-snapshots.js.map +1 -0
  227. package/dist/schema/iam/apikey.d.ts +396 -0
  228. package/dist/schema/iam/apikey.d.ts.map +1 -0
  229. package/dist/schema/iam/apikey.js +41 -0
  230. package/dist/schema/iam/apikey.js.map +1 -0
  231. package/dist/schema/iam/auth.d.ts +1026 -0
  232. package/dist/schema/iam/auth.d.ts.map +1 -0
  233. package/dist/schema/iam/auth.js +138 -0
  234. package/dist/schema/iam/auth.js.map +1 -0
  235. package/dist/schema/iam/cloud_auth.d.ts +446 -0
  236. package/dist/schema/iam/cloud_auth.d.ts.map +1 -0
  237. package/dist/schema/iam/cloud_auth.js +46 -0
  238. package/dist/schema/iam/cloud_auth.js.map +1 -0
  239. package/dist/schema/iam/index.d.ts +8 -0
  240. package/dist/schema/iam/index.d.ts.map +1 -0
  241. package/dist/schema/iam/index.js +8 -0
  242. package/dist/schema/iam/index.js.map +1 -0
  243. package/dist/schema/iam/invitations.d.ts +173 -0
  244. package/dist/schema/iam/invitations.d.ts.map +1 -0
  245. package/dist/schema/iam/invitations.js +27 -0
  246. package/dist/schema/iam/invitations.js.map +1 -0
  247. package/dist/schema/iam/kms.d.ts +53 -0
  248. package/dist/schema/iam/kms.d.ts.map +1 -0
  249. package/dist/schema/iam/kms.js +40 -0
  250. package/dist/schema/iam/kms.js.map +1 -0
  251. package/dist/schema/iam/roles.d.ts +12 -0
  252. package/dist/schema/iam/roles.d.ts.map +1 -0
  253. package/dist/schema/iam/roles.js +12 -0
  254. package/dist/schema/iam/roles.js.map +1 -0
  255. package/dist/schema/iam/user_profiles.d.ts +442 -0
  256. package/dist/schema/iam/user_profiles.d.ts.map +1 -0
  257. package/dist/schema/iam/user_profiles.js +125 -0
  258. package/dist/schema/iam/user_profiles.js.map +1 -0
  259. package/dist/schema/index.d.ts +5 -0
  260. package/dist/schema/index.d.ts.map +1 -0
  261. package/dist/schema/index.js +5 -0
  262. package/dist/schema/index.js.map +1 -0
  263. package/dist/schema/infra/domains.d.ts +609 -0
  264. package/dist/schema/infra/domains.d.ts.map +1 -0
  265. package/dist/schema/infra/domains.js +108 -0
  266. package/dist/schema/infra/domains.js.map +1 -0
  267. package/dist/schema/infra/email_domain_records.d.ts +255 -0
  268. package/dist/schema/infra/email_domain_records.d.ts.map +1 -0
  269. package/dist/schema/infra/email_domain_records.js +65 -0
  270. package/dist/schema/infra/email_domain_records.js.map +1 -0
  271. package/dist/schema/infra/event_outbox.d.ts +232 -0
  272. package/dist/schema/infra/event_outbox.d.ts.map +1 -0
  273. package/dist/schema/infra/event_outbox.js +59 -0
  274. package/dist/schema/infra/event_outbox.js.map +1 -0
  275. package/dist/schema/infra/idempotency_keys.d.ts +186 -0
  276. package/dist/schema/infra/idempotency_keys.d.ts.map +1 -0
  277. package/dist/schema/infra/idempotency_keys.js +40 -0
  278. package/dist/schema/infra/idempotency_keys.js.map +1 -0
  279. package/dist/schema/infra/index.d.ts +9 -0
  280. package/dist/schema/infra/index.d.ts.map +1 -0
  281. package/dist/schema/infra/index.js +10 -0
  282. package/dist/schema/infra/index.js.map +1 -0
  283. package/dist/schema/infra/public_document_delivery_grants.d.ts +356 -0
  284. package/dist/schema/infra/public_document_delivery_grants.d.ts.map +1 -0
  285. package/dist/schema/infra/public_document_delivery_grants.js +36 -0
  286. package/dist/schema/infra/public_document_delivery_grants.js.map +1 -0
  287. package/dist/schema/infra/rate_limit_buckets.d.ts +138 -0
  288. package/dist/schema/infra/rate_limit_buckets.d.ts.map +1 -0
  289. package/dist/schema/infra/rate_limit_buckets.js +52 -0
  290. package/dist/schema/infra/rate_limit_buckets.js.map +1 -0
  291. package/dist/schema/infra/webhook_deliveries.d.ts +572 -0
  292. package/dist/schema/infra/webhook_deliveries.d.ts.map +1 -0
  293. package/dist/schema/infra/webhook_deliveries.js +136 -0
  294. package/dist/schema/infra/webhook_deliveries.js.map +1 -0
  295. package/dist/schema/infra/webhook_subscriptions.d.ts +284 -0
  296. package/dist/schema/infra/webhook_subscriptions.d.ts.map +1 -0
  297. package/dist/schema/infra/webhook_subscriptions.js +64 -0
  298. package/dist/schema/infra/webhook_subscriptions.js.map +1 -0
  299. package/dist/schema/infra/write_intents.d.ts +185 -0
  300. package/dist/schema/infra/write_intents.d.ts.map +1 -0
  301. package/dist/schema/infra/write_intents.js +50 -0
  302. package/dist/schema/infra/write_intents.js.map +1 -0
  303. package/dist/schema/voyant/bookings.d.ts +2 -0
  304. package/dist/schema/voyant/bookings.d.ts.map +1 -0
  305. package/dist/schema/voyant/bookings.js +2 -0
  306. package/dist/schema/voyant/bookings.js.map +1 -0
  307. package/dist/schema/voyant/finance.d.ts +2 -0
  308. package/dist/schema/voyant/finance.d.ts.map +1 -0
  309. package/dist/schema/voyant/finance.js +2 -0
  310. package/dist/schema/voyant/finance.js.map +1 -0
  311. package/dist/test-utils.d.ts +17 -0
  312. package/dist/test-utils.d.ts.map +1 -0
  313. package/dist/test-utils.js +56 -0
  314. package/dist/test-utils.js.map +1 -0
  315. package/dist/transaction-capability.d.ts +11 -0
  316. package/dist/transaction-capability.d.ts.map +1 -0
  317. package/dist/transaction-capability.js +17 -0
  318. package/dist/transaction-capability.js.map +1 -0
  319. package/dist/transaction.d.ts +31 -0
  320. package/dist/transaction.d.ts.map +1 -0
  321. package/dist/transaction.js +72 -0
  322. package/dist/transaction.js.map +1 -0
  323. package/dist/tsconfig.tsbuildinfo +1 -0
  324. package/dist/types.d.ts +10 -0
  325. package/dist/types.d.ts.map +1 -0
  326. package/dist/types.js +2 -0
  327. package/dist/types.js.map +1 -0
  328. package/dist/utils.d.ts +2 -0
  329. package/dist/utils.d.ts.map +1 -0
  330. package/dist/utils.js +19 -0
  331. package/dist/utils.js.map +1 -0
  332. package/dist/write-intents.d.ts +51 -0
  333. package/dist/write-intents.d.ts.map +1 -0
  334. package/dist/write-intents.js +95 -0
  335. package/dist/write-intents.js.map +1 -0
  336. package/package.json +306 -0
package/dist/index.js ADDED
@@ -0,0 +1,155 @@
1
+ import { neon, Pool } from "@neondatabase/serverless";
2
+ import { drizzle as drizzleNeon } from "drizzle-orm/neon-http";
3
+ import { drizzle as drizzleNeonServerless } from "drizzle-orm/neon-serverless";
4
+ import { withReplicas } from "drizzle-orm/pg-core";
5
+ import { drizzle as drizzlePostgres } from "drizzle-orm/postgres-js";
6
+ import postgres from "postgres";
7
+ import { resolveNodePostgresOptions, resolveServerlessPoolConfig, warnIfDirectNeonEndpoint, } from "./connection-config.js";
8
+ import { VOYANT_DB_DISPOSE, VOYANT_DB_SUPPORTS_TRANSACTIONS } from "./transaction-capability.js";
9
+ function tagTransactionCapability(db, supportsTransactions, dispose) {
10
+ Object.defineProperty(db, VOYANT_DB_SUPPORTS_TRANSACTIONS, {
11
+ value: supportsTransactions,
12
+ enumerable: false,
13
+ configurable: false,
14
+ });
15
+ if (dispose) {
16
+ Object.defineProperty(db, VOYANT_DB_DISPOSE, {
17
+ value: dispose,
18
+ enumerable: false,
19
+ configurable: false,
20
+ });
21
+ }
22
+ return db;
23
+ }
24
+ export function createDbClient(connectionString, options) {
25
+ const { adapter = process.env.DB_ADAPTER || "edge", schema, replicas = [], nodeMaxConnections, timeouts, } = options || {};
26
+ if (adapter === "node") {
27
+ const nodeOptions = resolveNodePostgresOptions({ max: nodeMaxConnections, timeouts });
28
+ const client = postgres(connectionString, nodeOptions);
29
+ const primary = tagTransactionCapability(schema ? drizzlePostgres(client, { schema }) : drizzlePostgres(client), true);
30
+ if (replicas.length === 0) {
31
+ return primary;
32
+ }
33
+ const replicaInstances = replicas.map((replicaUrl) => {
34
+ const replicaClient = postgres(replicaUrl, nodeOptions);
35
+ return schema ? drizzlePostgres(replicaClient, { schema }) : drizzlePostgres(replicaClient);
36
+ });
37
+ const [firstReplica, ...otherReplicas] = replicaInstances;
38
+ if (firstReplica) {
39
+ return tagTransactionCapability(withReplicas(primary, [firstReplica, ...otherReplicas]), true);
40
+ }
41
+ return primary;
42
+ }
43
+ if (adapter === "serverless") {
44
+ if (replicas.length > 0) {
45
+ throw new Error("DB_ADAPTER=serverless does not support read replicas");
46
+ }
47
+ return createServerlessDbClient(connectionString, {
48
+ schema,
49
+ pool: options?.serverlessPool,
50
+ timeouts,
51
+ }).db;
52
+ }
53
+ // edge (neon-http): the Neon HTTP client has no client-side query/statement
54
+ // timeout config — queries rely on the server-side default statement_timeout
55
+ // and the Workers runtime's own request limits. A follow-up handles request
56
+ // deadlines at a different layer; do NOT try to bolt timeouts on here.
57
+ const sql = neon(connectionString);
58
+ const primary = tagTransactionCapability(schema ? drizzleNeon(sql, { schema }) : drizzleNeon(sql), false);
59
+ if (replicas.length === 0) {
60
+ return primary;
61
+ }
62
+ const replicaInstances = replicas.map((replicaUrl) => {
63
+ const replicaSql = neon(replicaUrl);
64
+ return schema ? drizzleNeon(replicaSql, { schema }) : drizzleNeon(replicaSql);
65
+ });
66
+ const [firstReplica, ...otherReplicas] = replicaInstances;
67
+ if (firstReplica) {
68
+ return tagTransactionCapability(withReplicas(primary, [firstReplica, ...otherReplicas]), false);
69
+ }
70
+ return primary;
71
+ }
72
+ /**
73
+ * Create a per-request Neon WebSocket pool + drizzle client.
74
+ *
75
+ * Timeout defaults (overridable via `timeouts`, or per-field via `pool`):
76
+ * `statement_timeout: 10_000`, `query_timeout: 15_000`,
77
+ * `connectionTimeoutMillis: 10_000`. Both `statement_timeout` (server-side)
78
+ * and `query_timeout` (client-side) are set because transaction-mode poolers
79
+ * (PgBouncer) may ignore `statement_timeout` as a startup parameter — see
80
+ * {@link resolveServerlessPoolConfig}.
81
+ *
82
+ * Warns (once per connection string) when pointed at a Neon direct endpoint
83
+ * instead of the `-pooler` host.
84
+ */
85
+ export function createServerlessDbClient(connectionString, options) {
86
+ warnIfDirectNeonEndpoint(connectionString);
87
+ const pool = new Pool(resolveServerlessPoolConfig(connectionString, options));
88
+ const dispose = () => pool.end().catch(() => { });
89
+ const db = tagTransactionCapability(options?.schema
90
+ ? drizzleNeonServerless(pool, { schema: options.schema })
91
+ : drizzleNeonServerless(pool), true, dispose);
92
+ return {
93
+ db,
94
+ dispose,
95
+ };
96
+ }
97
+ /**
98
+ * Run `fn` with a scoped transaction-capable client (Neon WebSocket
99
+ * Pool), disposing it on settle. For code paths that need
100
+ * `db.transaction(...)` but run outside the request middleware that
101
+ * normally provides the transactional client — event handlers, workflow
102
+ * steps, scheduled jobs, scripts.
103
+ *
104
+ * const result = await withServerlessDb(env.DATABASE_URL, (db) =>
105
+ * db.transaction(async (tx) => { ... }),
106
+ * )
107
+ */
108
+ export async function withServerlessDb(connectionString, fn, options) {
109
+ const { db, dispose } = createServerlessDbClient(connectionString, options);
110
+ try {
111
+ return await fn(db);
112
+ }
113
+ finally {
114
+ await dispose();
115
+ }
116
+ }
117
+ /**
118
+ * Get the main database instance for the configured `DATABASE_URL`.
119
+ * (Single-database deployments; region is chosen per deployment.)
120
+ */
121
+ export function getDb(adapter) {
122
+ const url = process.env.DATABASE_URL;
123
+ return createDbClient(url, { adapter });
124
+ }
125
+ // Lazy default database instance
126
+ let _defaultDb = null;
127
+ function getDefaultDbInstance() {
128
+ if (!_defaultDb) {
129
+ const defaultAdapter = process.env.DB_ADAPTER || "edge";
130
+ if (defaultAdapter === "serverless") {
131
+ throw new Error("The global @voyant-travel/db proxy cannot use DB_ADAPTER=serverless. Use createServerlessDbClient() per request and dispose it after use.");
132
+ }
133
+ _defaultDb = getDb(defaultAdapter);
134
+ }
135
+ return _defaultDb;
136
+ }
137
+ // Export a default, ready-to-use instance with lazy initialization
138
+ export const db = new Proxy({}, {
139
+ get(target, prop) {
140
+ void target;
141
+ return getDefaultDbInstance()[prop];
142
+ },
143
+ });
144
+ // Re-export lib utilities
145
+ export * from "./connection-config.js";
146
+ export * from "./helpers.js";
147
+ export * from "./lib/index.js";
148
+ export * from "./lifecycle.js";
149
+ // Re-export queries
150
+ export * from "./queries/index.js";
151
+ export { withOptionalTransaction } from "./transaction.js";
152
+ export * from "./transaction-capability.js";
153
+ export * from "./types.js";
154
+ export * from "./utils.js";
155
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { anyTypeIdSchema, compareIds, decodeId, getPrefix, getTimestamp, isValidId, newId, newIdFromPrefix, PREFIXES, type PrefixKey, type PrefixValue, typeIdSchema, typeIdSchemaOptional, typeIdSchemas, } from "./typeid.js";
2
+ export { TYPEID_MAX_LENGTH, typeId, typeIdManual, typeIdOptimized, typeIdRef, typeIdRefOptimized, } from "./typeid-column.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,eAAe,EACf,UAAU,EACV,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,SAAS,EACT,KAAK,EACL,eAAe,EACf,QAAQ,EACR,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,YAAY,EACZ,oBAAoB,EACpB,aAAa,GACd,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,iBAAiB,EACjB,MAAM,EACN,YAAY,EACZ,eAAe,EACf,SAAS,EACT,kBAAkB,GACnB,MAAM,oBAAoB,CAAA"}
@@ -0,0 +1,5 @@
1
+ // /packages/db/src/lib/index.ts
2
+ // Re-export all TypeID utilities
3
+ export { anyTypeIdSchema, compareIds, decodeId, getPrefix, getTimestamp, isValidId, newId, newIdFromPrefix, PREFIXES, typeIdSchema, typeIdSchemaOptional, typeIdSchemas, } from "./typeid.js";
4
+ export { TYPEID_MAX_LENGTH, typeId, typeIdManual, typeIdOptimized, typeIdRef, typeIdRefOptimized, } from "./typeid-column.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,iCAAiC;AAEjC,OAAO,EACL,eAAe,EACf,UAAU,EACV,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,SAAS,EACT,KAAK,EACL,eAAe,EACf,QAAQ,EAGR,YAAY,EACZ,oBAAoB,EACpB,aAAa,GACd,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,iBAAiB,EACjB,MAAM,EACN,YAAY,EACZ,eAAe,EACf,SAAS,EACT,kBAAkB,GACnB,MAAM,oBAAoB,CAAA"}
@@ -0,0 +1,75 @@
1
+ import { type PrefixKey } from "./typeid.js";
2
+ /**
3
+ * Maximum length of a TypeID string.
4
+ * Format: prefix (2-4 chars) + "_" + suffix (26 chars) = up to 31 chars
5
+ * Using 32 for safety margin.
6
+ */
7
+ export declare const TYPEID_MAX_LENGTH = 32;
8
+ /**
9
+ * Creates a TypeID primary key column with automatic generation.
10
+ * Use this for root/parent tables where IDs are generated automatically.
11
+ *
12
+ * The column uses `text` type and generates TypeIDs via `$defaultFn`.
13
+ *
14
+ * @param prefix - The entity type key from PREFIXES
15
+ * @param columnName - The database column name (defaults to "id")
16
+ * @returns A Drizzle column definition
17
+ *
18
+ * @example
19
+ * // In a schema file:
20
+ * export const productsTable = pgTable("products", {
21
+ * id: typeId("products"),
22
+ * name: text("name").notNull(),
23
+ * });
24
+ */
25
+ export declare function typeId(prefix: PrefixKey, columnName?: string): import("drizzle-orm").HasRuntimeDefault<import("drizzle-orm").HasDefault<import("drizzle-orm").IsPrimaryKey<import("drizzle-orm").NotNull<import("drizzle-orm/pg-core").PgTextBuilderInitial<string, [string, ...string[]]>>>>>;
26
+ /**
27
+ * Creates a TypeID primary key column WITHOUT automatic generation.
28
+ * Use this for child/linked tables where the ID must be provided explicitly
29
+ * to match a parent record (e.g., a 1:1 table whose PK must match the parent PK).
30
+ *
31
+ * @param columnName - The database column name (defaults to "id")
32
+ * @returns A Drizzle column definition without default
33
+ *
34
+ * @example
35
+ * // For 1:1 relationships where ID must match parent:
36
+ * export const profileTable = pgTable("profiles", {
37
+ * id: typeIdManual(), // Must be passed explicitly
38
+ * firstName: text("first_name"),
39
+ * });
40
+ */
41
+ export declare function typeIdManual(columnName?: string): import("drizzle-orm").IsPrimaryKey<import("drizzle-orm").NotNull<import("drizzle-orm/pg-core").PgTextBuilderInitial<string, [string, ...string[]]>>>;
42
+ /**
43
+ * Creates a TypeID foreign key column.
44
+ * Use this for columns that reference another table's TypeID.
45
+ *
46
+ * @param columnName - The database column name
47
+ * @returns A Drizzle column definition for foreign keys
48
+ *
49
+ * @example
50
+ * export const ordersTable = pgTable("orders", {
51
+ * id: typeId("orders"),
52
+ * productId: typeIdRef("product_id").notNull().references(() => productsTable.id),
53
+ * });
54
+ */
55
+ export declare function typeIdRef(columnName: string): import("drizzle-orm/pg-core").PgTextBuilderInitial<string, [string, ...string[]]>;
56
+ /**
57
+ * Creates an optimized TypeID column using varchar with fixed length.
58
+ * Use this when you want to optimize storage (varchar vs text).
59
+ *
60
+ * Note: Most use cases should prefer `typeId()` with text for simplicity.
61
+ * Only use this for high-volume tables where storage optimization matters.
62
+ *
63
+ * @param prefix - The entity type key from PREFIXES
64
+ * @param columnName - The database column name (defaults to "id")
65
+ * @returns A Drizzle column definition with varchar type
66
+ */
67
+ export declare function typeIdOptimized(prefix: PrefixKey, columnName?: string): import("drizzle-orm").HasRuntimeDefault<import("drizzle-orm").HasDefault<import("drizzle-orm").IsPrimaryKey<import("drizzle-orm").NotNull<import("drizzle-orm/pg-core").PgVarcharBuilderInitial<string, [string, ...string[]], 32>>>>>;
68
+ /**
69
+ * Creates an optimized TypeID foreign key column using varchar.
70
+ *
71
+ * @param columnName - The database column name
72
+ * @returns A Drizzle column definition for foreign keys with varchar type
73
+ */
74
+ export declare function typeIdRefOptimized(columnName: string): import("drizzle-orm/pg-core").PgVarcharBuilderInitial<string, [string, ...string[]], 32>;
75
+ //# sourceMappingURL=typeid-column.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typeid-column.d.ts","sourceRoot":"","sources":["../../src/lib/typeid-column.ts"],"names":[],"mappings":"AAKA,OAAO,EAAS,KAAK,SAAS,EAAE,MAAM,aAAa,CAAA;AAEnD;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,KAAK,CAAA;AAEnC;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,SAAO,mOAI1D;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,YAAY,CAAC,UAAU,SAAO,wJAE7C;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,qFAE3C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,SAAO,0OAInE;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,4FAEpD"}
@@ -0,0 +1,92 @@
1
+ // /packages/db/src/lib/typeid-column.ts
2
+ // Drizzle column helpers for TypeID primary keys and foreign keys
3
+ import { text, varchar } from "drizzle-orm/pg-core";
4
+ import { newId } from "./typeid.js";
5
+ /**
6
+ * Maximum length of a TypeID string.
7
+ * Format: prefix (2-4 chars) + "_" + suffix (26 chars) = up to 31 chars
8
+ * Using 32 for safety margin.
9
+ */
10
+ export const TYPEID_MAX_LENGTH = 32;
11
+ /**
12
+ * Creates a TypeID primary key column with automatic generation.
13
+ * Use this for root/parent tables where IDs are generated automatically.
14
+ *
15
+ * The column uses `text` type and generates TypeIDs via `$defaultFn`.
16
+ *
17
+ * @param prefix - The entity type key from PREFIXES
18
+ * @param columnName - The database column name (defaults to "id")
19
+ * @returns A Drizzle column definition
20
+ *
21
+ * @example
22
+ * // In a schema file:
23
+ * export const productsTable = pgTable("products", {
24
+ * id: typeId("products"),
25
+ * name: text("name").notNull(),
26
+ * });
27
+ */
28
+ export function typeId(prefix, columnName = "id") {
29
+ return text(columnName)
30
+ .primaryKey()
31
+ .$defaultFn(() => newId(prefix));
32
+ }
33
+ /**
34
+ * Creates a TypeID primary key column WITHOUT automatic generation.
35
+ * Use this for child/linked tables where the ID must be provided explicitly
36
+ * to match a parent record (e.g., a 1:1 table whose PK must match the parent PK).
37
+ *
38
+ * @param columnName - The database column name (defaults to "id")
39
+ * @returns A Drizzle column definition without default
40
+ *
41
+ * @example
42
+ * // For 1:1 relationships where ID must match parent:
43
+ * export const profileTable = pgTable("profiles", {
44
+ * id: typeIdManual(), // Must be passed explicitly
45
+ * firstName: text("first_name"),
46
+ * });
47
+ */
48
+ export function typeIdManual(columnName = "id") {
49
+ return text(columnName).primaryKey();
50
+ }
51
+ /**
52
+ * Creates a TypeID foreign key column.
53
+ * Use this for columns that reference another table's TypeID.
54
+ *
55
+ * @param columnName - The database column name
56
+ * @returns A Drizzle column definition for foreign keys
57
+ *
58
+ * @example
59
+ * export const ordersTable = pgTable("orders", {
60
+ * id: typeId("orders"),
61
+ * productId: typeIdRef("product_id").notNull().references(() => productsTable.id),
62
+ * });
63
+ */
64
+ export function typeIdRef(columnName) {
65
+ return text(columnName);
66
+ }
67
+ /**
68
+ * Creates an optimized TypeID column using varchar with fixed length.
69
+ * Use this when you want to optimize storage (varchar vs text).
70
+ *
71
+ * Note: Most use cases should prefer `typeId()` with text for simplicity.
72
+ * Only use this for high-volume tables where storage optimization matters.
73
+ *
74
+ * @param prefix - The entity type key from PREFIXES
75
+ * @param columnName - The database column name (defaults to "id")
76
+ * @returns A Drizzle column definition with varchar type
77
+ */
78
+ export function typeIdOptimized(prefix, columnName = "id") {
79
+ return varchar(columnName, { length: TYPEID_MAX_LENGTH })
80
+ .primaryKey()
81
+ .$defaultFn(() => newId(prefix));
82
+ }
83
+ /**
84
+ * Creates an optimized TypeID foreign key column using varchar.
85
+ *
86
+ * @param columnName - The database column name
87
+ * @returns A Drizzle column definition for foreign keys with varchar type
88
+ */
89
+ export function typeIdRefOptimized(columnName) {
90
+ return varchar(columnName, { length: TYPEID_MAX_LENGTH });
91
+ }
92
+ //# sourceMappingURL=typeid-column.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typeid-column.js","sourceRoot":"","sources":["../../src/lib/typeid-column.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,kEAAkE;AAElE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAEnD,OAAO,EAAE,KAAK,EAAkB,MAAM,aAAa,CAAA;AAEnD;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAA;AAEnC;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,MAAM,CAAC,MAAiB,EAAE,UAAU,GAAG,IAAI;IACzD,OAAO,IAAI,CAAC,UAAU,CAAC;SACpB,UAAU,EAAE;SACZ,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;AACpC,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,YAAY,CAAC,UAAU,GAAG,IAAI;IAC5C,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,UAAU,EAAE,CAAA;AACtC,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,SAAS,CAAC,UAAkB;IAC1C,OAAO,IAAI,CAAC,UAAU,CAAC,CAAA;AACzB,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAAC,MAAiB,EAAE,UAAU,GAAG,IAAI;IAClE,OAAO,OAAO,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;SACtD,UAAU,EAAE;SACZ,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;AACpC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,UAAkB;IACnD,OAAO,OAAO,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAA;AAC3D,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { TypeID } from "typeid-js";
2
+ import { type PrefixKey, type PrefixValue } from "./typeid-prefixes.js";
3
+ /**
4
+ * Register a custom TypeID prefix for extension tables.
5
+ */
6
+ export declare function registerPrefix(tableName: string, prefix: string): void;
7
+ /**
8
+ * Generates a new TypeID with the correct prefix.
9
+ */
10
+ export declare function newId(prefix: PrefixKey): string;
11
+ /**
12
+ * Generates a new TypeID using a raw prefix string.
13
+ */
14
+ export declare function newIdFromPrefix(prefix: string): string;
15
+ /**
16
+ * Decodes a TypeID string to extract its components.
17
+ */
18
+ export declare function decodeId<T extends string>(id: string, expectedPrefix: T): TypeID<T>;
19
+ export declare function decodeId(id: string): TypeID<string>;
20
+ /**
21
+ * Validates that a string is a valid TypeID with the expected prefix.
22
+ */
23
+ export declare function isValidId(id: string, expectedPrefix: PrefixKey | PrefixValue): boolean;
24
+ /**
25
+ * Extracts the prefix from a TypeID string.
26
+ */
27
+ export declare function getPrefix(id: string): string;
28
+ /**
29
+ * Extracts the timestamp from a TypeID.
30
+ */
31
+ export declare function getTimestamp(id: string): Date;
32
+ /**
33
+ * Compares two TypeIDs chronologically.
34
+ */
35
+ export declare function compareIds(a: string, b: string): number;
36
+ //# sourceMappingURL=typeid-core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typeid-core.d.ts","sourceRoot":"","sources":["../../src/lib/typeid-core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAU,MAAM,WAAW,CAAA;AAE1C,OAAO,EAAY,KAAK,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAEjF;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAUtE;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAE/C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;AACpF,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;AAYpD;;GAEG;AACH,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,SAAS,GAAG,WAAW,GAAG,OAAO,CAStF;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAI7C;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAEvD"}
@@ -0,0 +1,67 @@
1
+ import { TypeID, typeid } from "typeid-js";
2
+ import { PREFIXES } from "./typeid-prefixes.js";
3
+ /**
4
+ * Register a custom TypeID prefix for extension tables.
5
+ */
6
+ export function registerPrefix(tableName, prefix) {
7
+ if (PREFIXES[tableName]) {
8
+ throw new Error(`Prefix already registered for table "${tableName}"`);
9
+ }
10
+ if (Object.values(PREFIXES).includes(prefix)) {
11
+ throw new Error(`Prefix "${prefix}" is already in use`);
12
+ }
13
+ ;
14
+ PREFIXES[tableName] = prefix;
15
+ }
16
+ /**
17
+ * Generates a new TypeID with the correct prefix.
18
+ */
19
+ export function newId(prefix) {
20
+ return typeid(PREFIXES[prefix]).toString();
21
+ }
22
+ /**
23
+ * Generates a new TypeID using a raw prefix string.
24
+ */
25
+ export function newIdFromPrefix(prefix) {
26
+ return typeid(prefix).toString();
27
+ }
28
+ export function decodeId(id, expectedPrefix) {
29
+ if (expectedPrefix) {
30
+ return TypeID.fromString(id, expectedPrefix);
31
+ }
32
+ return TypeID.fromString(id);
33
+ }
34
+ /**
35
+ * Validates that a string is a valid TypeID with the expected prefix.
36
+ */
37
+ export function isValidId(id, expectedPrefix) {
38
+ try {
39
+ const decoded = decodeId(id);
40
+ const prefix = expectedPrefix in PREFIXES ? PREFIXES[expectedPrefix] : expectedPrefix;
41
+ return decoded.getType() === prefix;
42
+ }
43
+ catch {
44
+ return false;
45
+ }
46
+ }
47
+ /**
48
+ * Extracts the prefix from a TypeID string.
49
+ */
50
+ export function getPrefix(id) {
51
+ return decodeId(id).getType();
52
+ }
53
+ /**
54
+ * Extracts the timestamp from a TypeID.
55
+ */
56
+ export function getTimestamp(id) {
57
+ const uuid = decodeId(id).toUUID();
58
+ const hex = uuid.replace(/-/g, "").slice(0, 12);
59
+ return new Date(parseInt(hex, 16));
60
+ }
61
+ /**
62
+ * Compares two TypeIDs chronologically.
63
+ */
64
+ export function compareIds(a, b) {
65
+ return a.localeCompare(b);
66
+ }
67
+ //# sourceMappingURL=typeid-core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typeid-core.js","sourceRoot":"","sources":["../../src/lib/typeid-core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAE1C,OAAO,EAAE,QAAQ,EAAoC,MAAM,sBAAsB,CAAA;AAEjF;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,SAAiB,EAAE,MAAc;IAC9D,IAAK,QAAmC,CAAC,SAAS,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,wCAAwC,SAAS,GAAG,CAAC,CAAA;IACvE,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAqB,CAAC,EAAE,CAAC;QAC5D,MAAM,IAAI,KAAK,CAAC,WAAW,MAAM,qBAAqB,CAAC,CAAA;IACzD,CAAC;IAED,CAAC;IAAC,QAAmC,CAAC,SAAS,CAAC,GAAG,MAAM,CAAA;AAC3D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,KAAK,CAAC,MAAiB;IACrC,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;AAC5C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAA;AAClC,CAAC;AAOD,MAAM,UAAU,QAAQ,CACtB,EAAU,EACV,cAAkB;IAElB,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,cAAc,CAAC,CAAA;IAC9C,CAAC;IAED,OAAO,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,EAAU,EAAE,cAAuC;IAC3E,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;QAC5B,MAAM,MAAM,GACV,cAAc,IAAI,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,cAA2B,CAAC,CAAC,CAAC,CAAC,cAAc,CAAA;QACrF,OAAO,OAAO,CAAC,OAAO,EAAE,KAAK,MAAM,CAAA;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,EAAU;IAClC,OAAO,QAAQ,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAA;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,EAAU;IACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAA;IAClC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAC/C,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAA;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,CAAS,EAAE,CAAS;IAC7C,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;AAC3B,CAAC"}