Compare commits
2 Commits
2dfba87179
...
385a5bd595
| Author | SHA1 | Date | |
|---|---|---|---|
| 385a5bd595 | |||
| 9771b0803e |
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"version": 1,
|
"version": 1,
|
||||||
"sourceRepo": "https://gitea-external.egads.tutti.syntaxblitz.net/quixos/quixos.git",
|
"sourceRepo": "https://gitea-external.egads.tutti.syntaxblitz.net/quixos/quixos.git",
|
||||||
"sourceCommit": "ce0dd80f56df35bf3db1be01236a949a704cb4c2",
|
"sourceCommit": "321d5fa6c8b7619c1dc9cc4976318f246e645812",
|
||||||
"sourcePath": "quixos-instance/packages/camino-package-runtime",
|
"sourcePath": "quixos-instance/packages/camino-package-runtime",
|
||||||
"exportName": "camino-package-runtime",
|
"exportName": "camino-package-runtime",
|
||||||
"mirrorRemote": "https://gitea-external.egads.tutti.syntaxblitz.net/quixos/camino-package-runtime.git"
|
"mirrorRemote": "https://gitea-external.egads.tutti.syntaxblitz.net/quixos/camino-package-runtime.git"
|
||||||
|
|||||||
Vendored
+8
@@ -104,6 +104,14 @@ export type StateValueSource = Message<"camino.StateValueSource"> & {
|
|||||||
* @generated from field: uint64 revision = 5;
|
* @generated from field: uint64 revision = 5;
|
||||||
*/
|
*/
|
||||||
revision: bigint;
|
revision: bigint;
|
||||||
|
/**
|
||||||
|
* CRDT-backed state is still read as its materialized Value. The snapshot
|
||||||
|
* travels with the writable source identity so a client can retain and
|
||||||
|
* advance a local replica without exposing the document to package code.
|
||||||
|
*
|
||||||
|
* @generated from field: camino.CrdtValue crdt_snapshot = 6;
|
||||||
|
*/
|
||||||
|
crdtSnapshot?: CrdtValue | undefined;
|
||||||
};
|
};
|
||||||
/**
|
/**
|
||||||
* Describes the message camino.StateValueSource.
|
* Describes the message camino.StateValueSource.
|
||||||
|
|||||||
Vendored
+1
-1
File diff suppressed because one or more lines are too long
Vendored
+1
-1
File diff suppressed because one or more lines are too long
Generated
+7
-7
@@ -74,17 +74,17 @@
|
|||||||
"nixpkgs": "nixpkgs_2"
|
"nixpkgs": "nixpkgs_2"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1788542526,
|
"lastModified": 1788571750,
|
||||||
"narHash": "sha256-NaEdW9HKjRpOhZ8TBs6ieD/YuJ2jDyLPVk076wk6Kzs=",
|
"narHash": "sha256-y7ybGRo9U+cJ1Ol+hc62URVlg6MBQCQwIy848IzGKDg=",
|
||||||
"ref": "refs/tags/quixos-reachability/27373d801b31fbced51cc33bc2a9c92499a46ba3",
|
"ref": "refs/tags/quixos-reachability/4d527898076eb6aa1151bcaab7dfbb447e3fa422",
|
||||||
"rev": "27373d801b31fbced51cc33bc2a9c92499a46ba3",
|
"rev": "4d527898076eb6aa1151bcaab7dfbb447e3fa422",
|
||||||
"revCount": 28,
|
"revCount": 32,
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://gitea-external.egads.tutti.syntaxblitz.net/quixos/quixos-protocol.git"
|
"url": "https://gitea-external.egads.tutti.syntaxblitz.net/quixos/quixos-protocol.git"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"ref": "refs/tags/quixos-reachability/27373d801b31fbced51cc33bc2a9c92499a46ba3",
|
"ref": "refs/tags/quixos-reachability/4d527898076eb6aa1151bcaab7dfbb447e3fa422",
|
||||||
"rev": "27373d801b31fbced51cc33bc2a9c92499a46ba3",
|
"rev": "4d527898076eb6aa1151bcaab7dfbb447e3fa422",
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://gitea-external.egads.tutti.syntaxblitz.net/quixos/quixos-protocol.git"
|
"url": "https://gitea-external.egads.tutti.syntaxblitz.net/quixos/quixos-protocol.git"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||||
flake-utils.url = "github:numtide/flake-utils";
|
flake-utils.url = "github:numtide/flake-utils";
|
||||||
quixos-protocol.url = "git+https://gitea-external.egads.tutti.syntaxblitz.net/quixos/quixos-protocol.git?ref=refs/tags/quixos-reachability/27373d801b31fbced51cc33bc2a9c92499a46ba3&rev=27373d801b31fbced51cc33bc2a9c92499a46ba3";
|
quixos-protocol.url = "git+https://gitea-external.egads.tutti.syntaxblitz.net/quixos/quixos-protocol.git?ref=refs/tags/quixos-reachability/4d527898076eb6aa1151bcaab7dfbb447e3fa422&rev=4d527898076eb6aa1151bcaab7dfbb447e3fa422";
|
||||||
quixosNixHelpers = {
|
quixosNixHelpers = {
|
||||||
url = "git+https://gitea-external.egads.tutti.syntaxblitz.net/quixos/quixos-nix-helpers.git?ref=refs/tags/quixos-reachability/56bbcd22d17f8c7f120b1e0b5bd1d5a86e91a80a&rev=56bbcd22d17f8c7f120b1e0b5bd1d5a86e91a80a";
|
url = "git+https://gitea-external.egads.tutti.syntaxblitz.net/quixos/quixos-nix-helpers.git?ref=refs/tags/quixos-reachability/56bbcd22d17f8c7f120b1e0b5bd1d5a86e91a80a&rev=56bbcd22d17f8c7f120b1e0b5bd1d5a86e91a80a";
|
||||||
flake = false;
|
flake = false;
|
||||||
|
|||||||
+10
-1
File diff suppressed because one or more lines are too long
@@ -9,11 +9,16 @@ import {
|
|||||||
createRuntimeContext,
|
createRuntimeContext,
|
||||||
derived,
|
derived,
|
||||||
jsToProtoValue,
|
jsToProtoValue,
|
||||||
|
liveValue,
|
||||||
protoValueToJs,
|
protoValueToJs,
|
||||||
} from "../dist/index.js";
|
} from "../dist/index.js";
|
||||||
import {
|
import {
|
||||||
CaminoObjectSchema,
|
CaminoObjectSchema,
|
||||||
CaminoService,
|
CaminoService,
|
||||||
|
CrdtValueSchema,
|
||||||
|
StateValueSourceSchema,
|
||||||
|
ValueSchema,
|
||||||
|
ValueSourceSchema,
|
||||||
} from "../dist/camino/api_pb.js";
|
} from "../dist/camino/api_pb.js";
|
||||||
import {
|
import {
|
||||||
EdgeDependencySchema,
|
EdgeDependencySchema,
|
||||||
@@ -49,6 +54,30 @@ test("generic values preserve nested values and object references", () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test("live values preserve writable CRDT source identity through derivation", () => {
|
||||||
|
const value = create(ValueSchema, {
|
||||||
|
kind: { case: "stringValue", value: "notes" },
|
||||||
|
source: create(ValueSourceSchema, {
|
||||||
|
state: create(StateValueSourceSchema, {
|
||||||
|
objectId: "obj:task",
|
||||||
|
slotId: "slot:task:notes",
|
||||||
|
revision: 7n,
|
||||||
|
crdtSnapshot: create(CrdtValueSchema, {
|
||||||
|
type: "quixos.automerge-document.v1",
|
||||||
|
encoding: "automerge-snapshot-v1",
|
||||||
|
payload: new Uint8Array([1, 2, 3]),
|
||||||
|
}),
|
||||||
|
}),
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
|
||||||
|
const forwarded = jsToProtoValue(liveValue(value));
|
||||||
|
assert.equal(forwarded.source?.state?.objectId, "obj:task");
|
||||||
|
assert.equal(forwarded.source?.state?.slotId, "slot:task:notes");
|
||||||
|
assert.equal(forwarded.source?.state?.revision, 7n);
|
||||||
|
assert.deepEqual(forwarded.source?.state?.crdtSnapshot?.payload, new Uint8Array([1, 2, 3]));
|
||||||
|
});
|
||||||
|
|
||||||
test("runtime context exposes only explicitly injected ports", async () => {
|
test("runtime context exposes only explicitly injected ports", async () => {
|
||||||
const writes = [];
|
const writes = [];
|
||||||
const camino = {
|
const camino = {
|
||||||
|
|||||||
Reference in New Issue
Block a user