@voltro/runtime 0.62.2 → 0.62.3
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 +13 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.js +1833 -1806
- package/package.json +7 -7
package/CHANGELOG.md
CHANGED
|
@@ -39,6 +39,19 @@ _Changes staged for the next release accumulate here (rolled up from
|
|
|
39
39
|
|
|
40
40
|
---
|
|
41
41
|
|
|
42
|
+
## [0.62.3] — 2026-09-03
|
|
43
|
+
|
|
44
|
+
### Added
|
|
45
|
+
|
|
46
|
+
- **@voltro/runtime** — `EffectStore` now exposes the complete Promise-store mutation surface plus transactions that roll back while preserving an inner Effect Cause. `defineSubscriber` accepts `eachReplica: true` so local per-replica work can state its topology explicitly; it cannot be combined with `once`.
|
|
47
|
+
|
|
48
|
+
### Fixed
|
|
49
|
+
|
|
50
|
+
- **@voltro/cli** — `voltro build` no longer starts Vite's HMR WebSocket while pre-rendering. A `RedirectError` from a static loader is now emitted as redirect metadata and served by `voltro start` with its exact status and `Location`; unrelated loader errors still fail the build.
|
|
51
|
+
- **@voltro/cli, @voltro/database, @voltro/plugin-storage** — `voltro doctor` now resolves grouped event bindings and narrows its hand-roll, junction, ownership, nullable-write, singleton-read, and UI reachability checks to evidence they can actually prove. Ids owned by external systems can be declared with `.externalId()`; plugin references and non-FK asset references carry that metadata automatically.
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
42
55
|
## [0.62.2] — 2026-09-03
|
|
43
56
|
|
|
44
57
|
### Added
|
package/dist/index.d.ts
CHANGED
|
@@ -3605,10 +3605,29 @@ export declare interface EffectStoreOps {
|
|
|
3605
3605
|
* hand-built descriptor. */
|
|
3606
3606
|
readonly query: <R = Row>(descriptor: QueryDescriptor<R>) => Effect.Effect<ReadonlyArray<R>, StoreError>;
|
|
3607
3607
|
readonly insert: (table: string, row: Row) => Effect.Effect<Row, StoreError>;
|
|
3608
|
+
readonly insertMany: (table: string, rows: ReadonlyArray<Row>) => Effect.Effect<ReadonlyArray<Row>, StoreError>;
|
|
3609
|
+
readonly patchJson: (table: string, primaryKey: string, path: string, value: unknown) => Effect.Effect<Row | null, StoreError>;
|
|
3608
3610
|
readonly update: (table: string, primaryKey: string, patch: Readonly<Record<string, unknown>>) => Effect.Effect<Row | null, StoreError>;
|
|
3611
|
+
readonly updateMany: (table: string, patch: Readonly<Record<string, unknown>>, options: {
|
|
3612
|
+
readonly where: Predicate;
|
|
3613
|
+
}) => Effect.Effect<number, StoreError>;
|
|
3609
3614
|
readonly delete: (table: string, primaryKey: string) => Effect.Effect<boolean, StoreError>;
|
|
3615
|
+
readonly deleteMany: (table: string, options: {
|
|
3616
|
+
readonly where: Predicate;
|
|
3617
|
+
}) => Effect.Effect<number, StoreError>;
|
|
3618
|
+
readonly upsert: (table: string, row: Row, options: {
|
|
3619
|
+
readonly conflictColumns: ReadonlyArray<string>;
|
|
3620
|
+
readonly update?: ReadonlyArray<string> | ((existing: Row) => Readonly<Record<string, unknown>>);
|
|
3621
|
+
}) => Effect.Effect<Row, StoreError>;
|
|
3622
|
+
readonly insertIgnore: (table: string, row: Row, options: {
|
|
3623
|
+
readonly conflictColumns: ReadonlyArray<string>;
|
|
3624
|
+
}) => Effect.Effect<Row, StoreError>;
|
|
3610
3625
|
/** Bypass soft-delete. See `MutationStore.hardDelete`. */
|
|
3611
3626
|
readonly hardDelete: (table: string, primaryKey: string) => Effect.Effect<boolean, StoreError>;
|
|
3627
|
+
/** Run one Effect program atomically against the transaction-scoped store.
|
|
3628
|
+
* The inner Effect's typed failures and defects are preserved; database /
|
|
3629
|
+
* store failures join the error channel as `StoreError`. */
|
|
3630
|
+
readonly transactional: <A, E, R>(work: (transaction: EffectStoreOps) => Effect.Effect<A, E, R>) => Effect.Effect<A, E | StoreError, R>;
|
|
3612
3631
|
}
|
|
3613
3632
|
|
|
3614
3633
|
/** Empty registry — handy for tests + the rare bootstrap path with no
|
|
@@ -10242,6 +10261,15 @@ export declare interface SubscriberDefinition {
|
|
|
10242
10261
|
* from a `*.reaction.tsx`, where the durability is the primitive's job.
|
|
10243
10262
|
*/
|
|
10244
10263
|
readonly once?: true | ((event: SubscribeEvent) => string);
|
|
10264
|
+
/**
|
|
10265
|
+
* State explicitly that this handler must run on every replica.
|
|
10266
|
+
*
|
|
10267
|
+
* This is the executable counterpart to omitting `once`: it documents that
|
|
10268
|
+
* multiplication is intentional and lets `voltro doctor` distinguish an
|
|
10269
|
+
* unmade fleet decision from a cache/index refresh that genuinely belongs on
|
|
10270
|
+
* every process.
|
|
10271
|
+
*/
|
|
10272
|
+
readonly eachReplica?: true;
|
|
10245
10273
|
readonly handler: SubscribeHandler;
|
|
10246
10274
|
}
|
|
10247
10275
|
|