@voltro/database 0.2.0 → 0.2.1

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.
package/CHANGELOG.md CHANGED
@@ -39,6 +39,14 @@ _Changes staged for the next release accumulate here (rolled up from
39
39
 
40
40
  ---
41
41
 
42
+ ## [0.2.1] — 2026-07-17
43
+
44
+ ### Fixed
45
+
46
+ - **@voltro/cli, @voltro/database** — `voltro codegen` / `dev` / `serve` / `build` no longer crash with `Cannot find package '@voltro/sql-mysql'` on an app that doesn't declare that driver (e.g. a memory-store app, or a postgres app for the mysql/mssql drivers). The CLI's framework-table assembly statically imported the CDC-offsets table schema from `@voltro/sql-mysql` / `@voltro/sql-mssql` (`import { _voltroCdcOffsetsTable } from '@voltro/sql-mysql'`), so merely LOADING the CLI resolved those driver packages — failing whenever one wasn't installed. This surfaced only in a production install where the drivers aren't present (0.2.0's app-declared-driver change), not in the workspace where all drivers are devDependencies. The two CDC-offsets table schemas (pure schema, no driver runtime) move to `@voltro/database` — the driver-agnostic package both the CLI and the drivers already depend on; the drivers re-export them so their public API + CDC readers are unchanged. The CLI now references a SQL driver only through the runtime `importDriver()` lookup (lazy, and only for the dialect actually in use). The lazily-imported driver modules are also typed with local structural interfaces instead of `typeof import('@voltro/sql-*')`, so no driver package is referenced in a type position either.
47
+
48
+ ---
49
+
42
50
  ## [0.2.0] — 2026-07-17
43
51
 
44
52
  ### ⚠ BREAKING
package/dist/index.d.ts CHANGED
@@ -391,6 +391,8 @@ export declare const bytes: () => ColumnBuilder<Uint8Array<ArrayBufferLike>, "by
391
391
 
392
392
  export declare type CaughtUpVerdict = 'caught-up' | 'behind';
393
393
 
394
+ export declare const CDC_OFFSETS_TABLE = "_voltro_cdc_offsets";
395
+
394
396
  /**
395
397
  * Dialect-neutral CDC wiring passed to `makeStore` when a push-based
396
398
  * change source needs out-of-band connection + identity info that the
@@ -5009,6 +5011,8 @@ export declare const viewSql: (v: View<string, Record<string, ColumnDefinition<u
5009
5011
  */
5010
5012
  export declare const _voltroApiKeysTable: TableLike;
5011
5013
 
5014
+ export declare const _voltroCdcOffsetsTable: TableLike;
5015
+
5012
5016
  /**
5013
5017
  * `_voltro_idempotency` — one row per (scope, key) for HTTP idempotency
5014
5018
  * (the `Idempotency-Key` header on REST routes). `scope` namespaces the key
@@ -5056,6 +5060,8 @@ export declare const _voltroMigrationPlansTable: TableLike;
5056
5060
  */
5057
5061
  export declare const _voltroMigrationsTable: TableLike;
5058
5062
 
5063
+ export declare const _voltroMssqlCdcOffsetsTable: TableLike;
5064
+
5059
5065
  /**
5060
5066
  * `_voltro_seeds` — one row per registered seed. Written to by the
5061
5067
  * seed runner as each seed's lifecycle changes. Unlike migrations,
package/dist/index.js CHANGED
@@ -1500,6 +1500,19 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1500
1500
  }, Li = (e, t) => {
1501
1501
  let n = Number(e ?? String(t));
1502
1502
  return (Number.isFinite(n) && n > 0 ? n : t) * 36e5;
1503
- }, Ri = "postgres";
1503
+ }, Ri = "_voltro_cdc_offsets", zi = n(Ri, {
1504
+ id: T({ prefix: "cdcoff" }),
1505
+ replicaId: o(),
1506
+ streamName: o(),
1507
+ binlogFile: o(),
1508
+ binlogPosition: o(),
1509
+ updatedAt: v()
1510
+ }).index(["replicaId"]), Bi = n(Ri, {
1511
+ id: T({ prefix: "cdcoff" }),
1512
+ replicaId: o(),
1513
+ streamName: o(),
1514
+ ctVersion: o(),
1515
+ updatedAt: v()
1516
+ }).index(["replicaId"]), Vi = "postgres";
1504
1517
  //#endregion
1505
- export { Y as BranchNameInvalid, Ir as BranchTransitionInvalid, We as ColumnBuilder, lt as ENCRYPTED_PREFIX, Ri as ENGINE, Ge as FILE_MIGRATION_PATTERN, oe as MAX_IDENTIFIER_LENGTH, wr as TableStreamError, Jt as TenantNamespaceInvalid, qt as TenantNamespaceUnresolved, Qr as TenantRegionUnavailable, Zr as TenantResidencyUnresolved, ce as WARN_IDENTIFIER_LENGTH, Oi as _voltroApiKeysTable, Ei as _voltroIdempotencyTable, Di as _voltroKvTable, Ti as _voltroMigrationPlansTable, Ci as _voltroMigrationsTable, wi as _voltroSeedsTable, Yn as actorsTable, Yr as admitBranch, He as allEnumRenames, kt as allRegisteredRelations, De as allRegisteredTables, dr as and, ge as array, ar as arrayContains, sr as arrayHas, or as arrayOverlaps, zt as attachEagerLoads, di as auditAllTableIndexes, ui as auditTableIndexes, Ae as avg, qe as avgOver, je as bigint, oi as bindResidentStore, Je as boolean, Nr as branchNamespaceName, ve as bytes, Ee as clearEnumRenames, At as clearRelationsRegistry, ni as clearResidencyConfig, Fi as clearRetentions, g as clearTableRegistry, Sr as collectSubqueries, _e as column, dn as compileEagerJson, R as compilePredicate, $t as compileRawFragment, z as compileSelect, kr as computeEmbedding, ir as contains, be as count, Re as countDistinct, Me as databaseHandle, xe as date, ze as dbEnum, Ne as decimal, fe as declareEnumRename, It as decodeRowsFromSchema, pt as decryptFieldsOnRead, xi as defineMigration, d as defineMixin, vi as defineSeed, we as denseRank, u as deriveTypeIdPrefix, ct as deserializeArraysOnRead, b as drainIdentifierWarnings, Te as dropped, Rt as encodeRowForSchema, ft as encryptFieldsForWrite, dt as encryptedColumnsOf, Kr as enforceBranchLimits, _ as ensureTableRegistered, Xn as eq, L as escapeLike, xr as evaluatePredicate, Se as except, vr as exists, gi as formatIndexAuditIssue, ki as frameworkTables, m as generateId, p as generateSnowflake, Ce as geography, ue as geometry, Le as getEnumRenames, Ot as getRelation, M as getRelations, ti as getResidencyConfig, y as getTable, Qn as gt, $n as gte, Kt as hasEagerLoads, Or as hybridSearch, T as id, nr as inSet, gr as inSubquery, A as inferForeignKey, D as integer, le as intersect, me as interval, Pr as isBranchNamespace, ut as isEncrypted, Pe as isFileMigration, Si as isMigrationDefinition, Br as isNeonConnection, lr as isNotNull, cr as isNull, ji as isPrimaryKeyConflictError, ii as isRegionServable, bt as isRelationsSpec, yi as isSeedDefinition, h as isSqliteFamily, de as isView, E as json, mr as jsonField, et as jsonIndex, Ye as lag, $e as lead, Pi as listRetentions, er as lt, tr as lte, Xr as makeNamespaceBranchExecutor, St as many, Ct as manyToMany, S as materializeFields, pe as max, Ve as migration, Qe as min, re as mixin, Zn as neq, Lr as nextBranchState, pr as not, yr as notExists, rr as notInSet, _r as notInSubquery, i as numeric, xt as one, fr as or, te as paginateById, Wr as planBranch, Rr as planBranchProvision, zr as planBranchTeardown, Gr as planBranchTeardownFor, Hr as planNeonBranchProvision, Ur as planNeonBranchTeardown, Ai as primaryKeyConflictError, qr as provisionBranch, si as provisionResidentTenant, I as qualifyTable, r as queryFor, Ie as queryForView, x as quoteIdent, Xe as rank, Ze as raw, ne as real, c as reference, Gn as registerCoreTables, Dt as registerDiscoveredRelations, Et as registerRelations, Ni as registerRetention, l as registerTable, yt as relations, qn as requireActors, f as requireTable, Jn as requireTenants, se as resetSnowflake, ai as residentPlacement, Vr as resolveBranchMechanism, C as resolveFullTextIndex, Be as resolveIdScheme, ae as resolveMixinGraph, ri as resolveTenantHome, Qt as resolveTenantNamespace, Li as retentionTtlMsFromEnv, s as rowNumber, Zt as sanitizeIdentifierFragment, st as serializeArraysForWrite, ei as setResidencyConfig, ur as spatialPredicate, Dr as streamTable, a as sum, ee as sumOver, Ii as sweepRetention, n as table, Jr as teardownBranch, o as text, v as timestamp, Oe as union, t as unionAll, e as validateColumnName, ye as validateIndexName, Ke as validateTableName, Fe as validateTypeIdPrefix, ke as vector, ie as vectorDistanceToOpclass, Ar as vectorEmbedding, Ue as view, he as viewSql, Cr as walkLeaves };
1518
+ export { Y as BranchNameInvalid, Ir as BranchTransitionInvalid, Ri as CDC_OFFSETS_TABLE, We as ColumnBuilder, lt as ENCRYPTED_PREFIX, Vi as ENGINE, Ge as FILE_MIGRATION_PATTERN, oe as MAX_IDENTIFIER_LENGTH, wr as TableStreamError, Jt as TenantNamespaceInvalid, qt as TenantNamespaceUnresolved, Qr as TenantRegionUnavailable, Zr as TenantResidencyUnresolved, ce as WARN_IDENTIFIER_LENGTH, Oi as _voltroApiKeysTable, zi as _voltroCdcOffsetsTable, Ei as _voltroIdempotencyTable, Di as _voltroKvTable, Ti as _voltroMigrationPlansTable, Ci as _voltroMigrationsTable, Bi as _voltroMssqlCdcOffsetsTable, wi as _voltroSeedsTable, Yn as actorsTable, Yr as admitBranch, He as allEnumRenames, kt as allRegisteredRelations, De as allRegisteredTables, dr as and, ge as array, ar as arrayContains, sr as arrayHas, or as arrayOverlaps, zt as attachEagerLoads, di as auditAllTableIndexes, ui as auditTableIndexes, Ae as avg, qe as avgOver, je as bigint, oi as bindResidentStore, Je as boolean, Nr as branchNamespaceName, ve as bytes, Ee as clearEnumRenames, At as clearRelationsRegistry, ni as clearResidencyConfig, Fi as clearRetentions, g as clearTableRegistry, Sr as collectSubqueries, _e as column, dn as compileEagerJson, R as compilePredicate, $t as compileRawFragment, z as compileSelect, kr as computeEmbedding, ir as contains, be as count, Re as countDistinct, Me as databaseHandle, xe as date, ze as dbEnum, Ne as decimal, fe as declareEnumRename, It as decodeRowsFromSchema, pt as decryptFieldsOnRead, xi as defineMigration, d as defineMixin, vi as defineSeed, we as denseRank, u as deriveTypeIdPrefix, ct as deserializeArraysOnRead, b as drainIdentifierWarnings, Te as dropped, Rt as encodeRowForSchema, ft as encryptFieldsForWrite, dt as encryptedColumnsOf, Kr as enforceBranchLimits, _ as ensureTableRegistered, Xn as eq, L as escapeLike, xr as evaluatePredicate, Se as except, vr as exists, gi as formatIndexAuditIssue, ki as frameworkTables, m as generateId, p as generateSnowflake, Ce as geography, ue as geometry, Le as getEnumRenames, Ot as getRelation, M as getRelations, ti as getResidencyConfig, y as getTable, Qn as gt, $n as gte, Kt as hasEagerLoads, Or as hybridSearch, T as id, nr as inSet, gr as inSubquery, A as inferForeignKey, D as integer, le as intersect, me as interval, Pr as isBranchNamespace, ut as isEncrypted, Pe as isFileMigration, Si as isMigrationDefinition, Br as isNeonConnection, lr as isNotNull, cr as isNull, ji as isPrimaryKeyConflictError, ii as isRegionServable, bt as isRelationsSpec, yi as isSeedDefinition, h as isSqliteFamily, de as isView, E as json, mr as jsonField, et as jsonIndex, Ye as lag, $e as lead, Pi as listRetentions, er as lt, tr as lte, Xr as makeNamespaceBranchExecutor, St as many, Ct as manyToMany, S as materializeFields, pe as max, Ve as migration, Qe as min, re as mixin, Zn as neq, Lr as nextBranchState, pr as not, yr as notExists, rr as notInSet, _r as notInSubquery, i as numeric, xt as one, fr as or, te as paginateById, Wr as planBranch, Rr as planBranchProvision, zr as planBranchTeardown, Gr as planBranchTeardownFor, Hr as planNeonBranchProvision, Ur as planNeonBranchTeardown, Ai as primaryKeyConflictError, qr as provisionBranch, si as provisionResidentTenant, I as qualifyTable, r as queryFor, Ie as queryForView, x as quoteIdent, Xe as rank, Ze as raw, ne as real, c as reference, Gn as registerCoreTables, Dt as registerDiscoveredRelations, Et as registerRelations, Ni as registerRetention, l as registerTable, yt as relations, qn as requireActors, f as requireTable, Jn as requireTenants, se as resetSnowflake, ai as residentPlacement, Vr as resolveBranchMechanism, C as resolveFullTextIndex, Be as resolveIdScheme, ae as resolveMixinGraph, ri as resolveTenantHome, Qt as resolveTenantNamespace, Li as retentionTtlMsFromEnv, s as rowNumber, Zt as sanitizeIdentifierFragment, st as serializeArraysForWrite, ei as setResidencyConfig, ur as spatialPredicate, Dr as streamTable, a as sum, ee as sumOver, Ii as sweepRetention, n as table, Jr as teardownBranch, o as text, v as timestamp, Oe as union, t as unionAll, e as validateColumnName, ye as validateIndexName, Ke as validateTableName, Fe as validateTypeIdPrefix, ke as vector, ie as vectorDistanceToOpclass, Ar as vectorEmbedding, Ue as view, he as viewSql, Cr as walkLeaves };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@voltro/database",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "Browser-safe schema DSL, query builder, and cross-dialect migration planner for Voltro — one schema, every SQL backend.",
5
5
  "keywords": [
6
6
  "voltro",
@@ -38,7 +38,7 @@
38
38
  },
39
39
  "dependencies": {
40
40
  "@effect/sql": "^0.51.1",
41
- "@voltro/logger": "0.2.0",
41
+ "@voltro/logger": "0.2.1",
42
42
  "typeid-js": "^1.2.0",
43
43
  "ulidx": "^2.4.1"
44
44
  },