@wovin/core 0.1.35 → 0.2.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.
- package/README.md +0 -12
- package/dist/applog/applog-helpers.d.ts +12 -12
- package/dist/applog/applog-helpers.d.ts.map +1 -1
- package/dist/applog/applog-utils.d.ts +25 -6
- package/dist/applog/applog-utils.d.ts.map +1 -1
- package/dist/applog/datom-types.d.ts +4 -5
- package/dist/applog/datom-types.d.ts.map +1 -1
- package/dist/applog.d.ts +3 -3
- package/dist/applog.d.ts.map +1 -1
- package/dist/{applog.min.js → applog.js} +6 -7
- package/dist/blockstore.d.ts +1 -1
- package/dist/blockstore.d.ts.map +1 -1
- package/dist/{blockstore.min.js → blockstore.js} +1 -3
- package/dist/{blockstore.min.js.map → blockstore.js.map} +1 -1
- package/dist/{chunk-KXMTKPF4.min.js → chunk-3JZMOEOD.js} +8 -8
- package/dist/chunk-3JZMOEOD.js.map +1 -0
- package/dist/chunk-3WZVG277.js +434 -0
- package/dist/chunk-3WZVG277.js.map +1 -0
- package/dist/chunk-7Z5YDQKK.js +1 -0
- package/dist/chunk-CPSDKFBG.js +147 -0
- package/dist/chunk-CPSDKFBG.js.map +1 -0
- package/dist/chunk-E46VTKTZ.js +1 -0
- package/dist/{chunk-H3VQJP56.min.js → chunk-J2FDHGOZ.js} +9 -9
- package/dist/chunk-J2FDHGOZ.js.map +1 -0
- package/dist/chunk-L5EEEGE6.js +1862 -0
- package/dist/chunk-L5EEEGE6.js.map +1 -0
- package/dist/{chunk-BRC7LSM6.min.js → chunk-PD3C7XUM.js} +5 -5
- package/dist/chunk-PD3C7XUM.js.map +1 -0
- package/dist/chunk-QZXKQCAY.js +1026 -0
- package/dist/chunk-QZXKQCAY.js.map +1 -0
- package/dist/{chunk-QPGEBDMJ.min.js → chunk-YDAKBU6Q.js} +1 -1
- package/dist/chunk-YDAKBU6Q.js.map +1 -0
- package/dist/chunk-ZAADLBSB.js +36 -0
- package/dist/chunk-ZAADLBSB.js.map +1 -0
- package/dist/index.d.ts +7 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/{index.min.js → index.js} +73 -46
- package/dist/ipfs/car.d.ts +11 -11
- package/dist/ipfs/car.d.ts.map +1 -1
- package/dist/ipfs/ipfs-utils.d.ts +2 -2
- package/dist/ipfs/ipfs-utils.d.ts.map +1 -1
- package/dist/ipfs.d.ts +3 -3
- package/dist/ipfs.d.ts.map +1 -1
- package/dist/{ipfs.min.js → ipfs.js} +7 -10
- package/dist/ipns.d.ts +1 -1
- package/dist/ipns.d.ts.map +1 -1
- package/dist/ipns.js +64 -0
- package/dist/ipns.js.map +1 -0
- package/dist/pubsub/pub-pull.d.ts +3 -3
- package/dist/pubsub/pub-pull.d.ts.map +1 -1
- package/dist/pubsub/pubsub-types.d.ts +3 -3
- package/dist/pubsub/pubsub-types.d.ts.map +1 -1
- package/dist/pubsub/snap-push.d.ts +4 -4
- package/dist/pubsub/snap-push.d.ts.map +1 -1
- package/dist/pubsub/ucan.d.ts +1 -1
- package/dist/pubsub/ucan.d.ts.map +1 -1
- package/dist/pubsub.d.ts +4 -4
- package/dist/pubsub.d.ts.map +1 -1
- package/dist/{pubsub.min.js → pubsub.js} +7 -10
- package/dist/query/attr-helpers.d.ts +5 -0
- package/dist/query/attr-helpers.d.ts.map +1 -0
- package/dist/query/basic.d.ts +85 -21
- package/dist/query/basic.d.ts.map +1 -1
- package/dist/query/divergences.d.ts +5 -5
- package/dist/query/divergences.d.ts.map +1 -1
- package/dist/query/entity-collection.d.ts +19 -0
- package/dist/query/entity-collection.d.ts.map +1 -0
- package/dist/query/matchers.d.ts +1 -1
- package/dist/query/matchers.d.ts.map +1 -1
- package/dist/query/memoized.d.ts +66 -0
- package/dist/query/memoized.d.ts.map +1 -0
- package/dist/query/situations.d.ts +2 -1
- package/dist/query/situations.d.ts.map +1 -1
- package/dist/query/subscribable.d.ts +111 -0
- package/dist/query/subscribable.d.ts.map +1 -0
- package/dist/query/types.d.ts +54 -14
- package/dist/query/types.d.ts.map +1 -1
- package/dist/query.d.ts +9 -5
- package/dist/query.d.ts.map +1 -1
- package/dist/{query.min.js → query.js} +51 -32
- package/dist/retrieve/index.d.ts +1 -1
- package/dist/retrieve/index.d.ts.map +1 -1
- package/dist/retrieve/update-thread.d.ts +3 -3
- package/dist/retrieve/update-thread.d.ts.map +1 -1
- package/dist/retrieve.d.ts +1 -1
- package/dist/retrieve.d.ts.map +1 -1
- package/dist/retrieve.js +14 -0
- package/dist/thread/basic.d.ts +15 -19
- package/dist/thread/basic.d.ts.map +1 -1
- package/dist/thread/filters.d.ts +8 -10
- package/dist/thread/filters.d.ts.map +1 -1
- package/dist/thread/indexes.d.ts +56 -0
- package/dist/thread/indexes.d.ts.map +1 -0
- package/dist/thread/mapped.d.ts +40 -11
- package/dist/thread/mapped.d.ts.map +1 -1
- package/dist/thread/utils.d.ts +5 -5
- package/dist/thread/utils.d.ts.map +1 -1
- package/dist/thread/writeable.d.ts +2 -2
- package/dist/thread/writeable.d.ts.map +1 -1
- package/dist/thread.d.ts +6 -5
- package/dist/thread.d.ts.map +1 -1
- package/dist/{thread.min.js → thread.js} +9 -6
- package/dist/types/typescript-utils.d.ts +6 -5
- package/dist/types/typescript-utils.d.ts.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/{types.min.js → types.js} +3 -4
- package/dist/utils/debug-name.d.ts +13 -0
- package/dist/utils/debug-name.d.ts.map +1 -0
- package/dist/utils.d.ts +1 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +9 -0
- package/package.json +32 -23
- package/src/applog/applog-helpers.ts +155 -0
- package/src/applog/applog-utils.test.ts +108 -0
- package/src/applog/applog-utils.ts +507 -0
- package/src/applog/datom-types.ts +148 -0
- package/src/applog.ts +3 -0
- package/src/blockstore/index.ts +36 -0
- package/src/blockstore.ts +1 -0
- package/src/index.ts +8 -0
- package/src/ipfs/car.ts +291 -0
- package/src/ipfs/fetch-snapshot-chain.ts +135 -0
- package/src/ipfs/ipfs-utils.ts +132 -0
- package/src/ipfs.ts +3 -0
- package/src/ipns/ipns-record.ts +115 -0
- package/src/ipns.ts +1 -0
- package/src/pubsub/UCAN Specs Overview.md +217 -0
- package/src/pubsub/connector.ts +9 -0
- package/src/pubsub/pub-pull.ts +31 -0
- package/src/pubsub/pubsub-types.ts +90 -0
- package/src/pubsub/snap-push.ts +277 -0
- package/src/pubsub/ucan-example.ts +61 -0
- package/src/pubsub/ucan.ts +56 -0
- package/src/pubsub.ts +4 -0
- package/src/query/attr-helpers.ts +5 -0
- package/src/query/basic.ts +1245 -0
- package/src/query/divergences.ts +50 -0
- package/src/query/entity-collection.ts +131 -0
- package/src/query/liveFilterAndMap.test.ts +102 -0
- package/src/query/matchers.ts +8 -0
- package/src/query/memoized.test.ts +151 -0
- package/src/query/memoized.ts +180 -0
- package/src/query/query-steps.ts +4 -0
- package/src/query/query.test.ts +538 -0
- package/src/query/situations.ts +261 -0
- package/src/query/subscribable.test.ts +245 -0
- package/src/query/subscribable.ts +234 -0
- package/src/query/types.ts +155 -0
- package/src/query/withoutDeleted.test.ts +204 -0
- package/src/query.ts +9 -0
- package/src/retrieve/index.ts +1 -0
- package/src/retrieve/update-thread.ts +248 -0
- package/src/retrieve.ts +1 -0
- package/src/test/perf/query.1m.perf.test.ts +94 -0
- package/src/test/perf/query.perf.test.ts +389 -0
- package/src/test/perf/query.realdata.perf.test.ts +182 -0
- package/src/thread/basic.ts +209 -0
- package/src/thread/filters.ts +227 -0
- package/src/thread/indexes.ts +250 -0
- package/src/thread/joinThreads.test.ts +304 -0
- package/src/thread/mapped.ts +226 -0
- package/src/thread/utils.ts +144 -0
- package/src/thread/writeable.ts +163 -0
- package/src/thread.ts +6 -0
- package/src/types/typescript-utils.ts +64 -0
- package/src/types.ts +1 -0
- package/src/utils/debug-name.ts +54 -0
- package/src/utils.ts +4 -0
- package/dist/chunk-2Y2PYHGR.min.js +0 -65
- package/dist/chunk-2Y2PYHGR.min.js.map +0 -1
- package/dist/chunk-5MMGBK2U.min.js +0 -1
- package/dist/chunk-7IDQIMQO.min.js +0 -1
- package/dist/chunk-BRC7LSM6.min.js.map +0 -1
- package/dist/chunk-COXXILXC.min.js +0 -512
- package/dist/chunk-COXXILXC.min.js.map +0 -1
- package/dist/chunk-GDX2OO7L.min.js +0 -9080
- package/dist/chunk-GDX2OO7L.min.js.map +0 -1
- package/dist/chunk-H3VQJP56.min.js.map +0 -1
- package/dist/chunk-HYMC7W6S.min.js +0 -1549
- package/dist/chunk-HYMC7W6S.min.js.map +0 -1
- package/dist/chunk-KEHU7HGZ.min.js +0 -5216
- package/dist/chunk-KEHU7HGZ.min.js.map +0 -1
- package/dist/chunk-KXMTKPF4.min.js.map +0 -1
- package/dist/chunk-PHITDXZT.min.js +0 -36
- package/dist/chunk-QO2KMGDN.min.js +0 -3771
- package/dist/chunk-QO2KMGDN.min.js.map +0 -1
- package/dist/chunk-QPGEBDMJ.min.js.map +0 -1
- package/dist/chunk-WXLCBTHX.min.js +0 -1606
- package/dist/chunk-WXLCBTHX.min.js.map +0 -1
- package/dist/ipns.min.js +0 -6419
- package/dist/ipns.min.js.map +0 -1
- package/dist/mobx/mobx-utils.d.ts +0 -82
- package/dist/mobx/mobx-utils.d.ts.map +0 -1
- package/dist/mobx.d.ts +0 -2
- package/dist/mobx.d.ts.map +0 -1
- package/dist/mobx.min.js +0 -141
- package/dist/retrieve.min.js +0 -17
- package/dist/types.min.js.map +0 -1
- package/dist/utils.min.js +0 -10
- package/dist/utils.min.js.map +0 -1
- /package/dist/{applog.min.js.map → applog.js.map} +0 -0
- /package/dist/{chunk-5MMGBK2U.min.js.map → chunk-7Z5YDQKK.js.map} +0 -0
- /package/dist/{chunk-7IDQIMQO.min.js.map → chunk-E46VTKTZ.js.map} +0 -0
- /package/dist/{chunk-PHITDXZT.min.js.map → index.js.map} +0 -0
- /package/dist/{index.min.js.map → ipfs.js.map} +0 -0
- /package/dist/{ipfs.min.js.map → pubsub.js.map} +0 -0
- /package/dist/{mobx.min.js.map → query.js.map} +0 -0
- /package/dist/{pubsub.min.js.map → retrieve.js.map} +0 -0
- /package/dist/{query.min.js.map → thread.js.map} +0 -0
- /package/dist/{retrieve.min.js.map → types.js.map} +0 -0
- /package/dist/{thread.min.js.map → utils.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ipfs-utils.d.ts","sourceRoot":"","sources":["../../src/ipfs/ipfs-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AAGzC,OAAO,EAAE,GAAG,EAAoB,MAAM,cAAc,CAAA;AAGpD,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,gBAAgB,EAAE,SAAS,EAAE,UAAU,EAAqB,MAAM,
|
|
1
|
+
{"version":3,"file":"ipfs-utils.d.ts","sourceRoot":"","sources":["../../src/ipfs/ipfs-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AAGzC,OAAO,EAAE,GAAG,EAAoB,MAAM,cAAc,CAAA;AAGpD,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,gBAAgB,EAAE,SAAS,EAAE,UAAU,EAAqB,MAAM,0BAA0B,CAAA;AAS1I,eAAO,MAAM,mBAAmB,MAAO,CAAA;AAEvC,wBAAgB,aAAa,CAAC,GAAG,EAAE,gBAAgB,EAAE,OAAO,GAAE,MAAM,EAAY;;;;SAoBnD,MAAM;;EAClC;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,WAAW,4BAErD;AACD,wBAAgB,YAAY,CAAC,GAAG,EAAE,WAAW,GAAG,cAAc,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAAC,GAAG,EAAE,GAAG,CAAA;CAAE,CAE1G;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,4BAOtD;AACD,gDAAgD;AAChD,wBAAgB,WAAW,CAAC,UAAU,EAAE,GAAG,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAAC,GAAG,EAAE,GAAG,CAAA;CAAE,CAQvF;AAED,wBAAsB,mBAAmB,CAAC,UAAU,EAAE,GAAG,8DAQxD;AAED,wBAAgB,WAAW,CAAC,SAAS,EAAE,SAAS;;;;EAsB/C;AACD,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,WAEpC;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,GAAG,UAMnC;AACD,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,GAEL,UAAU,CACzC;AACD,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,GAAG,GAAG,SAAS,gEAMnE;AACD,wBAAgB,YAAY,CAAC,YAAY,EAAE,GAAG,GAAG,SAAS,EAAE,YAAY,EAAE,GAAG,GAAG,SAAS,WAMxF;AACD,wBAAgB,WAAW,CAAC,IAAI,EAAE,CAAC,GAAG,GAAG,SAAS,CAAC,EAAE,GAAG,GAAG,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,GAAG,SAAS,WAG9F"}
|
package/dist/ipfs.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export * from './ipfs/car';
|
|
2
|
-
export * from './ipfs/ipfs-utils';
|
|
3
|
-
export * from './ipfs/fetch-snapshot-chain';
|
|
1
|
+
export * from './ipfs/car.ts';
|
|
2
|
+
export * from './ipfs/ipfs-utils.ts';
|
|
3
|
+
export * from './ipfs/fetch-snapshot-chain.ts';
|
|
4
4
|
//# sourceMappingURL=ipfs.d.ts.map
|
package/dist/ipfs.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ipfs.d.ts","sourceRoot":"","sources":["../src/ipfs.ts"],"names":[],"mappings":"AAAA,cAAc,
|
|
1
|
+
{"version":3,"file":"ipfs.d.ts","sourceRoot":"","sources":["../src/ipfs.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,sBAAsB,CAAA;AACpC,cAAc,gCAAgC,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
fetchSnapshotChainUntil
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-3JZMOEOD.js";
|
|
4
4
|
import {
|
|
5
5
|
carFromBlob,
|
|
6
6
|
collectDagBlocks,
|
|
@@ -11,9 +11,9 @@ import {
|
|
|
11
11
|
makeCarBlob,
|
|
12
12
|
makeCarOut,
|
|
13
13
|
streamReaderToIterable
|
|
14
|
-
} from "./chunk-
|
|
15
|
-
import "./chunk-
|
|
16
|
-
import "./chunk-
|
|
14
|
+
} from "./chunk-3WZVG277.js";
|
|
15
|
+
import "./chunk-YDAKBU6Q.js";
|
|
16
|
+
import "./chunk-QZXKQCAY.js";
|
|
17
17
|
import {
|
|
18
18
|
MULTICODEC_IPNS_KEY,
|
|
19
19
|
areCidsEqual,
|
|
@@ -29,11 +29,8 @@ import {
|
|
|
29
29
|
prepareForPub,
|
|
30
30
|
toIpnsString,
|
|
31
31
|
tryParseCID
|
|
32
|
-
} from "./chunk-
|
|
33
|
-
import "./chunk-
|
|
34
|
-
import "./chunk-QO2KMGDN.min.js";
|
|
35
|
-
import "./chunk-KEHU7HGZ.min.js";
|
|
36
|
-
import "./chunk-PHITDXZT.min.js";
|
|
32
|
+
} from "./chunk-L5EEEGE6.js";
|
|
33
|
+
import "./chunk-ZAADLBSB.js";
|
|
37
34
|
export {
|
|
38
35
|
MULTICODEC_IPNS_KEY,
|
|
39
36
|
areCidsEqual,
|
|
@@ -60,4 +57,4 @@ export {
|
|
|
60
57
|
toIpnsString,
|
|
61
58
|
tryParseCID
|
|
62
59
|
};
|
|
63
|
-
//# sourceMappingURL=ipfs.
|
|
60
|
+
//# sourceMappingURL=ipfs.js.map
|
package/dist/ipns.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './ipns/ipns-record';
|
|
1
|
+
export * from './ipns/ipns-record.ts';
|
|
2
2
|
//# sourceMappingURL=ipns.d.ts.map
|
package/dist/ipns.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ipns.d.ts","sourceRoot":"","sources":["../src/ipns.ts"],"names":[],"mappings":"AAAA,cAAc,
|
|
1
|
+
{"version":3,"file":"ipns.d.ts","sourceRoot":"","sources":["../src/ipns.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA"}
|
package/dist/ipns.js
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
// src/ipns/ipns-record.ts
|
|
2
|
+
import { createIPNSRecord, marshalIPNSRecord, unmarshalIPNSRecord } from "ipns";
|
|
3
|
+
import { privateKeyFromRaw } from "@libp2p/crypto/keys";
|
|
4
|
+
import { base36 } from "multiformats/bases/base36";
|
|
5
|
+
import { base64pad } from "multiformats/bases/base64";
|
|
6
|
+
function ipnsNameFromPrivateKey(privKeyBytes) {
|
|
7
|
+
const privKey = privateKeyFromRaw(privKeyBytes);
|
|
8
|
+
return privKey.publicKey.toCID().toString(base36);
|
|
9
|
+
}
|
|
10
|
+
async function createSignedIPNSRecord(privateKey, cid, sequence, lifetimeMs = 365 * 24 * 60 * 60 * 1e3) {
|
|
11
|
+
const privKey = privateKeyFromRaw(privateKey);
|
|
12
|
+
const value = `/ipfs/${cid.toV1()}`;
|
|
13
|
+
const record = await createIPNSRecord(privKey, value, sequence, lifetimeMs);
|
|
14
|
+
const recordBytes = marshalIPNSRecord(record);
|
|
15
|
+
const ipnsName = privKey.publicKey.toCID().toString(base36);
|
|
16
|
+
return { recordBytes, ipnsName, value, sequence };
|
|
17
|
+
}
|
|
18
|
+
async function resolveIPNSSequence(nameServiceUrl, ipnsName) {
|
|
19
|
+
const url = `${nameServiceUrl}/name/${ipnsName}`;
|
|
20
|
+
let response;
|
|
21
|
+
try {
|
|
22
|
+
response = await fetch(url);
|
|
23
|
+
} catch (err) {
|
|
24
|
+
throw new Error(`Network error resolving IPNS ${ipnsName}: ${err}`);
|
|
25
|
+
}
|
|
26
|
+
if (response.status === 404) return null;
|
|
27
|
+
if (!response.ok) {
|
|
28
|
+
throw new Error(`HTTP ${response.status} resolving IPNS ${ipnsName}: ${response.statusText}`);
|
|
29
|
+
}
|
|
30
|
+
const { record, value } = await response.json();
|
|
31
|
+
if (!record && !value) return null;
|
|
32
|
+
if (record) {
|
|
33
|
+
const bytes = base64pad.baseDecode(record);
|
|
34
|
+
const entry = unmarshalIPNSRecord(bytes);
|
|
35
|
+
return entry.sequence;
|
|
36
|
+
}
|
|
37
|
+
return 0n;
|
|
38
|
+
}
|
|
39
|
+
async function publishIPNSRecord(privateKey, cid, targets, sequenceServiceUrl = "https://name.web3.storage") {
|
|
40
|
+
const ipnsName = ipnsNameFromPrivateKey(privateKey);
|
|
41
|
+
const currentSeq = await resolveIPNSSequence(sequenceServiceUrl, ipnsName);
|
|
42
|
+
const sequence = currentSeq != null ? currentSeq + 1n : 0n;
|
|
43
|
+
const signed = await createSignedIPNSRecord(privateKey, cid, sequence);
|
|
44
|
+
const results = await Promise.allSettled(
|
|
45
|
+
targets.map((t) => t.publish(ipnsName, signed.recordBytes))
|
|
46
|
+
);
|
|
47
|
+
const failures = results.map((r, i) => ({ r, name: targets[i].name })).filter(({ r }) => r.status === "rejected");
|
|
48
|
+
if (failures.length > 0 && failures.length < targets.length) {
|
|
49
|
+
for (const { r, name } of failures) {
|
|
50
|
+
console.warn(`[publishIPNSRecord] target '${name}' failed:`, r.reason);
|
|
51
|
+
}
|
|
52
|
+
} else if (failures.length === targets.length) {
|
|
53
|
+
throw new Error(`All IPNS publish targets failed: ${failures.map(({ r, name }) => `${name}: ${r.reason}`).join("; ")}`);
|
|
54
|
+
}
|
|
55
|
+
return signed;
|
|
56
|
+
}
|
|
57
|
+
export {
|
|
58
|
+
createSignedIPNSRecord,
|
|
59
|
+
ipnsNameFromPrivateKey,
|
|
60
|
+
publishIPNSRecord,
|
|
61
|
+
resolveIPNSSequence,
|
|
62
|
+
unmarshalIPNSRecord
|
|
63
|
+
};
|
|
64
|
+
//# sourceMappingURL=ipns.js.map
|
package/dist/ipns.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ipns/ipns-record.ts"],"sourcesContent":["import { createIPNSRecord, marshalIPNSRecord, unmarshalIPNSRecord } from 'ipns'\nimport { privateKeyFromRaw } from '@libp2p/crypto/keys'\nimport { base36 } from 'multiformats/bases/base36'\nimport { base64pad } from 'multiformats/bases/base64'\nimport type { CID } from 'multiformats/cid'\n\nexport interface SignedIPNSRecord {\n\trecordBytes: Uint8Array // marshalled protobuf, signed — the wire format\n\tipnsName: string // k51... string\n\tvalue: string // /ipfs/<cid>\n\tsequence: bigint\n}\n\n/** Derive IPNS name string (k51...) from Ed25519 private key bytes */\nexport function ipnsNameFromPrivateKey(privKeyBytes: Uint8Array): string {\n\tconst privKey = privateKeyFromRaw(privKeyBytes)\n\treturn privKey.publicKey.toCID().toString(base36)\n}\n\n/**\n * Create a signed IPNS record (protobuf wire format).\n * Same bytes can be published to any naming service.\n */\nexport async function createSignedIPNSRecord(\n\tprivateKey: Uint8Array,\n\tcid: CID,\n\tsequence: bigint,\n\tlifetimeMs = 365 * 24 * 60 * 60 * 1000, // 1 year\n): Promise<SignedIPNSRecord> {\n\tconst privKey = privateKeyFromRaw(privateKey)\n\tconst value = `/ipfs/${cid.toV1()}`\n\tconst record = await createIPNSRecord(privKey, value, sequence, lifetimeMs)\n\tconst recordBytes = marshalIPNSRecord(record)\n\tconst ipnsName = privKey.publicKey.toCID().toString(base36)\n\treturn { recordBytes, ipnsName, value, sequence }\n}\n\nexport { unmarshalIPNSRecord }\n\n/** A target that can receive a signed IPNS record */\nexport interface IPNSPublishTarget {\n\tname: string\n\tpublish(ipnsName: string, recordBytes: Uint8Array): Promise<void>\n}\n\n/**\n * Resolve current IPNS sequence number from a naming service.\n * Returns null if the name was never published (404).\n * Throws on network/server errors.\n */\nexport async function resolveIPNSSequence(\n\tnameServiceUrl: string,\n\tipnsName: string,\n): Promise<bigint | null> {\n\tconst url = `${nameServiceUrl}/name/${ipnsName}`\n\tlet response: Response\n\ttry {\n\t\tresponse = await fetch(url)\n\t} catch (err) {\n\t\tthrow new Error(`Network error resolving IPNS ${ipnsName}: ${err}`)\n\t}\n\n\tif (response.status === 404) return null\n\tif (!response.ok) {\n\t\tthrow new Error(`HTTP ${response.status} resolving IPNS ${ipnsName}: ${response.statusText}`)\n\t}\n\n\tconst { record, value } = await response.json()\n\tif (!record && !value) return null // never published\n\n\t// If raw record is available, unmarshal to get sequence\n\tif (record) {\n\t\tconst bytes = base64pad.baseDecode(record)\n\t\tconst entry = unmarshalIPNSRecord(bytes)\n\t\treturn entry.sequence\n\t}\n\n\t// Some servers return value but not raw record — can't get sequence\n\treturn 0n\n}\n\n/**\n * Create a signed IPNS record and publish to all configured targets.\n * Resolves sequence from sequenceServiceUrl, creates record once, fans out.\n * Throws if ALL targets fail; warns on partial failure.\n */\nexport async function publishIPNSRecord(\n\tprivateKey: Uint8Array,\n\tcid: CID,\n\ttargets: IPNSPublishTarget[],\n\tsequenceServiceUrl = 'https://name.web3.storage',\n): Promise<SignedIPNSRecord> {\n\tconst ipnsName = ipnsNameFromPrivateKey(privateKey)\n\tconst currentSeq = await resolveIPNSSequence(sequenceServiceUrl, ipnsName)\n\tconst sequence = currentSeq != null ? currentSeq + 1n : 0n\n\tconst signed = await createSignedIPNSRecord(privateKey, cid, sequence)\n\n\tconst results = await Promise.allSettled(\n\t\ttargets.map(t => t.publish(ipnsName, signed.recordBytes))\n\t)\n\tconst failures = results\n\t\t.map((r, i) => ({ r, name: targets[i].name }))\n\t\t.filter(({ r }) => r.status === 'rejected') as { r: PromiseRejectedResult; name: string }[]\n\n\tif (failures.length > 0 && failures.length < targets.length) {\n\t\t// Partial failure — log but don't throw\n\t\tfor (const { r, name } of failures) {\n\t\t\tconsole.warn(`[publishIPNSRecord] target '${name}' failed:`, r.reason)\n\t\t}\n\t} else if (failures.length === targets.length) {\n\t\tthrow new Error(`All IPNS publish targets failed: ${failures.map(({ r, name }) => `${name}: ${r.reason}`).join('; ')}`)\n\t}\n\n\treturn signed\n}\n"],"mappings":";AAAA,SAAS,kBAAkB,mBAAmB,2BAA2B;AACzE,SAAS,yBAAyB;AAClC,SAAS,cAAc;AACvB,SAAS,iBAAiB;AAWnB,SAAS,uBAAuB,cAAkC;AACxE,QAAM,UAAU,kBAAkB,YAAY;AAC9C,SAAO,QAAQ,UAAU,MAAM,EAAE,SAAS,MAAM;AACjD;AAMA,eAAsB,uBACrB,YACA,KACA,UACA,aAAa,MAAM,KAAK,KAAK,KAAK,KACN;AAC5B,QAAM,UAAU,kBAAkB,UAAU;AAC5C,QAAM,QAAQ,SAAS,IAAI,KAAK,CAAC;AACjC,QAAM,SAAS,MAAM,iBAAiB,SAAS,OAAO,UAAU,UAAU;AAC1E,QAAM,cAAc,kBAAkB,MAAM;AAC5C,QAAM,WAAW,QAAQ,UAAU,MAAM,EAAE,SAAS,MAAM;AAC1D,SAAO,EAAE,aAAa,UAAU,OAAO,SAAS;AACjD;AAeA,eAAsB,oBACrB,gBACA,UACyB;AACzB,QAAM,MAAM,GAAG,cAAc,SAAS,QAAQ;AAC9C,MAAI;AACJ,MAAI;AACH,eAAW,MAAM,MAAM,GAAG;AAAA,EAC3B,SAAS,KAAK;AACb,UAAM,IAAI,MAAM,gCAAgC,QAAQ,KAAK,GAAG,EAAE;AAAA,EACnE;AAEA,MAAI,SAAS,WAAW,IAAK,QAAO;AACpC,MAAI,CAAC,SAAS,IAAI;AACjB,UAAM,IAAI,MAAM,QAAQ,SAAS,MAAM,mBAAmB,QAAQ,KAAK,SAAS,UAAU,EAAE;AAAA,EAC7F;AAEA,QAAM,EAAE,QAAQ,MAAM,IAAI,MAAM,SAAS,KAAK;AAC9C,MAAI,CAAC,UAAU,CAAC,MAAO,QAAO;AAG9B,MAAI,QAAQ;AACX,UAAM,QAAQ,UAAU,WAAW,MAAM;AACzC,UAAM,QAAQ,oBAAoB,KAAK;AACvC,WAAO,MAAM;AAAA,EACd;AAGA,SAAO;AACR;AAOA,eAAsB,kBACrB,YACA,KACA,SACA,qBAAqB,6BACO;AAC5B,QAAM,WAAW,uBAAuB,UAAU;AAClD,QAAM,aAAa,MAAM,oBAAoB,oBAAoB,QAAQ;AACzE,QAAM,WAAW,cAAc,OAAO,aAAa,KAAK;AACxD,QAAM,SAAS,MAAM,uBAAuB,YAAY,KAAK,QAAQ;AAErE,QAAM,UAAU,MAAM,QAAQ;AAAA,IAC7B,QAAQ,IAAI,OAAK,EAAE,QAAQ,UAAU,OAAO,WAAW,CAAC;AAAA,EACzD;AACA,QAAM,WAAW,QACf,IAAI,CAAC,GAAG,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,EAAE,KAAK,EAAE,EAC5C,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,UAAU;AAE3C,MAAI,SAAS,SAAS,KAAK,SAAS,SAAS,QAAQ,QAAQ;AAE5D,eAAW,EAAE,GAAG,KAAK,KAAK,UAAU;AACnC,cAAQ,KAAK,+BAA+B,IAAI,aAAa,EAAE,MAAM;AAAA,IACtE;AAAA,EACD,WAAW,SAAS,WAAW,QAAQ,QAAQ;AAC9C,UAAM,IAAI,MAAM,oCAAoC,SAAS,IAAI,CAAC,EAAE,GAAG,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,IAAI,CAAC,EAAE;AAAA,EACvH;AAEA,SAAO;AACR;","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { CID } from 'multiformats';
|
|
2
|
-
import { EntityID } from '../applog/datom-types';
|
|
3
|
-
import { Thread } from '../thread';
|
|
2
|
+
import { EntityID } from '../applog/datom-types.ts';
|
|
3
|
+
import { Thread } from '../thread.ts';
|
|
4
4
|
export type PubPullData = {
|
|
5
5
|
cid: CID;
|
|
6
6
|
thread: Thread;
|
|
@@ -10,5 +10,5 @@ export declare function integratePub({ targetThread, agentHash, subID, pubData }
|
|
|
10
10
|
agentHash: EntityID;
|
|
11
11
|
pubData: PubPullData;
|
|
12
12
|
subID?: EntityID;
|
|
13
|
-
}): import("
|
|
13
|
+
}): import("../applog.ts").Applog[];
|
|
14
14
|
//# sourceMappingURL=pub-pull.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pub-pull.d.ts","sourceRoot":"","sources":["../../src/pubsub/pub-pull.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA;AAElC,OAAO,EAAE,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"pub-pull.d.ts","sourceRoot":"","sources":["../../src/pubsub/pub-pull.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA;AAElC,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAIrC,MAAM,MAAM,WAAW,GAAG;IACzB,GAAG,EAAE,GAAG,CAAA;IACR,MAAM,EAAE,MAAM,CAAA;CACd,CAAA;AAED,wBAAgB,YAAY,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;IACzE,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,QAAQ,CAAA;IACnB,OAAO,EAAE,WAAW,CAAA;IACpB,KAAK,CAAC,EAAE,QAAQ,CAAA;CAChB,mCAYA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { CID } from 'multiformats/cid';
|
|
2
|
-
import { AgentHash, AgentID } from '../applog/datom-types';
|
|
3
|
-
import { Tagged } from '../types';
|
|
4
|
-
import { UCANCapMap } from './ucan';
|
|
2
|
+
import { AgentHash, AgentID } from '../applog/datom-types.ts';
|
|
3
|
+
import { Tagged } from '../types.ts';
|
|
4
|
+
import { UCANCapMap } from './ucan.ts';
|
|
5
5
|
type AgentString = Tagged<string, 'AgentString'>;
|
|
6
6
|
type DIDString = Tagged<string, 'DID'>;
|
|
7
7
|
export type { AgentHash, AgentString, DIDString };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pubsub-types.d.ts","sourceRoot":"","sources":["../../src/pubsub/pubsub-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAEtC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAa,MAAM,
|
|
1
|
+
{"version":3,"file":"pubsub-types.d.ts","sourceRoot":"","sources":["../../src/pubsub/pubsub-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { CID } from 'multiformats/cid';
|
|
2
|
-
import type { Applog, ApplogArrayMaybeEncryptedRO, ApplogArrayNoCIDMaybeEncryptedRO } from '../applog/datom-types';
|
|
3
|
-
import { BlockStoreish } from '../ipfs/car';
|
|
4
|
-
import { ApplogsOrThread, Thread } from '../thread';
|
|
5
|
-
import type { AppAgent, IShare, SnapBlockChunks, SnapBlockLogsOrChunks } from './pubsub-types';
|
|
2
|
+
import type { Applog, ApplogArrayMaybeEncryptedRO, ApplogArrayNoCIDMaybeEncryptedRO } from '../applog/datom-types.ts';
|
|
3
|
+
import { BlockStoreish } from '../ipfs/car.ts';
|
|
4
|
+
import { ApplogsOrThread, Thread } from '../thread.ts';
|
|
5
|
+
import type { AppAgent, IShare, SnapBlockChunks, SnapBlockLogsOrChunks } from './pubsub-types.ts';
|
|
6
6
|
export declare function prepareSnapshotForPush(agent: AppAgent, appThread: Thread, threadToPublish: ApplogsOrThread, share: IShare, prevSnapCID: CID | null, prevCounter: number | null): Promise<{
|
|
7
7
|
cid: CID<any, 297, 18, 1>;
|
|
8
8
|
blob: Blob;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snap-push.d.ts","sourceRoot":"","sources":["../../src/pubsub/snap-push.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAGtC,OAAO,KAAK,EACX,MAAM,EAEN,2BAA2B,EAC3B,gCAAgC,EAIhC,MAAM,
|
|
1
|
+
{"version":3,"file":"snap-push.d.ts","sourceRoot":"","sources":["../../src/pubsub/snap-push.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAGtC,OAAO,KAAK,EACX,MAAM,EAEN,2BAA2B,EAC3B,gCAAgC,EAIhC,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAE,aAAa,EAA4C,MAAM,gBAAgB,CAAA;AAGxF,OAAO,EAAE,eAAe,EAAqB,MAAM,EAAE,MAAM,cAAc,CAAA;AAGzE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAiB,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAehH,wBAAsB,sBAAsB,CAC3C,KAAK,EAAE,QAAQ,EACf,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,eAAe,EAChC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,GAAG,GAAG,IAAI,EACvB,WAAW,EAAE,MAAM,GAAG,IAAI;;;;;;GA+H1B;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACxC,KAAK,EAAE,QAAQ,EACf,OAAO,EAAE,gCAAgC,EACzC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,WAAW,EAAE,GAAG,GAAG,IAAI,EACvB,WAAW,EAAE,MAAM,GAAG,IAAI;;;;;;GAiC1B;AAED,uEAAuE;AACvE,wBAAsB,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,SAAQ;;;;;;;;GAatF;AACD,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,qBAAqB,EAAE,UAAU,EAAE,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAYjH;AACD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,qBAAqB,GAAG,KAAK,IAAI,eAAe,CAExF;AACD;;;GAGG;AACH,wBAAsB,0BAA0B,CAC/C,OAAO,EAAE,2BAA2B,iBAUpC"}
|
package/dist/pubsub/ucan.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { DelegationOptions, DelegationPayload, StandardSchemaV1 } from 'iso-ucan/types';
|
|
2
2
|
import { Delegation } from 'iso-ucan/delegation';
|
|
3
|
-
import { AgentID } from '../applog/datom-types';
|
|
3
|
+
import { AgentID } from '../applog/datom-types.ts';
|
|
4
4
|
import { Resolver } from 'iso-signatures/verifiers/resolver.js';
|
|
5
5
|
export declare const verifierResolver: Resolver;
|
|
6
6
|
export declare enum KnownCaps {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ucan.d.ts","sourceRoot":"","sources":["../../src/pubsub/ucan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAe,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACzG,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"ucan.d.ts","sourceRoot":"","sources":["../../src/pubsub/ucan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAe,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACzG,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AAIlD,OAAO,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAA;AAE/D,eAAO,MAAM,gBAAgB,UAE3B,CAAA;AA+BF,oBAAY,SAAS;IACpB,OAAO,oBAAoB;IAC3B,QAAQ,iBAAiB;CACzB;AAED,KAAK,uBAAuB,GAAG,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAA;AACpF,MAAM,MAAM,yBAAyB,GAAG,iBAAiB,CAAC,uBAAuB,CAAC,CAAA;AAClF,MAAM,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,yBAAyB,EAAE,CAAC,CAAC,CAAA;AAEhF,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;AAErD,eAAO,MAAM,gBAAgB,GAAI,mBAAkB,yBAAyB,wBAG3E,CAAA"}
|
package/dist/pubsub.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export * from './pubsub/connector';
|
|
2
|
-
export * from './pubsub/pub-pull';
|
|
3
|
-
export * from './pubsub/snap-push';
|
|
4
|
-
export * from './pubsub/pubsub-types';
|
|
1
|
+
export * from './pubsub/connector.ts';
|
|
2
|
+
export * from './pubsub/pub-pull.ts';
|
|
3
|
+
export * from './pubsub/snap-push.ts';
|
|
4
|
+
export * from './pubsub/pubsub-types.ts';
|
|
5
5
|
//# sourceMappingURL=pubsub.d.ts.map
|
package/dist/pubsub.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pubsub.d.ts","sourceRoot":"","sources":["../src/pubsub.ts"],"names":[],"mappings":"AAAA,cAAc,
|
|
1
|
+
{"version":3,"file":"pubsub.d.ts","sourceRoot":"","sources":["../src/pubsub.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA;AACpC,cAAc,uBAAuB,CAAA;AACrC,cAAc,0BAA0B,CAAA"}
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
integratePub,
|
|
4
4
|
isShare,
|
|
5
5
|
isSubscription
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-PD3C7XUM.js";
|
|
7
7
|
import {
|
|
8
8
|
chunkApplogs,
|
|
9
9
|
encodeSnapshotApplogsAsCar,
|
|
@@ -11,14 +11,11 @@ import {
|
|
|
11
11
|
isSnapBlockChunks,
|
|
12
12
|
prepareSnapshotForPush,
|
|
13
13
|
unchunkApplogsBlock
|
|
14
|
-
} from "./chunk-
|
|
15
|
-
import "./chunk-
|
|
16
|
-
import "./chunk-
|
|
17
|
-
import "./chunk-
|
|
18
|
-
import "./chunk-
|
|
19
|
-
import "./chunk-QO2KMGDN.min.js";
|
|
20
|
-
import "./chunk-KEHU7HGZ.min.js";
|
|
21
|
-
import "./chunk-PHITDXZT.min.js";
|
|
14
|
+
} from "./chunk-3WZVG277.js";
|
|
15
|
+
import "./chunk-YDAKBU6Q.js";
|
|
16
|
+
import "./chunk-QZXKQCAY.js";
|
|
17
|
+
import "./chunk-L5EEEGE6.js";
|
|
18
|
+
import "./chunk-ZAADLBSB.js";
|
|
22
19
|
export {
|
|
23
20
|
agentToShortHash,
|
|
24
21
|
chunkApplogs,
|
|
@@ -31,4 +28,4 @@ export {
|
|
|
31
28
|
prepareSnapshotForPush,
|
|
32
29
|
unchunkApplogsBlock
|
|
33
30
|
};
|
|
34
|
-
//# sourceMappingURL=pubsub.
|
|
31
|
+
//# sourceMappingURL=pubsub.js.map
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Strip everything up to and including the first `/` */
|
|
2
|
+
export type StripFirstPrefix<S extends string> = S extends `${string}/${infer Rest}` ? Rest : S;
|
|
3
|
+
/** Strip a specific prefix `P/` from attribute string */
|
|
4
|
+
export type StripExplicitPrefix<S extends string, P extends string> = S extends `${P}/${infer Rest}` ? Rest : S;
|
|
5
|
+
//# sourceMappingURL=attr-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attr-helpers.d.ts","sourceRoot":"","sources":["../../src/query/attr-helpers.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,SAAS,GAAG,MAAM,IAAI,MAAM,IAAI,EAAE,GAAG,IAAI,GAAG,CAAC,CAAA;AAE/F,yDAAyD;AACzD,MAAM,MAAM,mBAAmB,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,MAAM,IAAI,EAAE,GAAG,IAAI,GAAG,CAAC,CAAA"}
|
package/dist/query/basic.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Thread } from '../thread/basic';
|
|
3
|
-
import { ThreadOnlyCurrent } from '../thread/filters';
|
|
4
|
-
import { MappedThread } from '../thread/mapped';
|
|
5
|
-
import {
|
|
1
|
+
import { Applog, ApplogValue, DatalogQueryPattern, EntityID, SearchContext } from '../applog/datom-types.ts';
|
|
2
|
+
import { Thread } from '../thread/basic.ts';
|
|
3
|
+
import { ThreadOnlyCurrent } from '../thread/filters.ts';
|
|
4
|
+
import { MappedThread } from '../thread/mapped.ts';
|
|
5
|
+
import { SubscribableArrayImpl, SubscribableImpl } from './subscribable.ts';
|
|
6
|
+
import { LiveQueryResult, QueryNode, QueryResult } from './types.ts';
|
|
6
7
|
/**
|
|
7
8
|
* Keep only the latest logs for each en&at (= last write wins)
|
|
8
9
|
*/
|
|
@@ -11,33 +12,87 @@ export declare const lastWriteWins: (thread: Thread, { inverseToOnlyReturnFirstL
|
|
|
11
12
|
tolerateAlreadyFiltered?: boolean;
|
|
12
13
|
}) => ThreadOnlyCurrent;
|
|
13
14
|
/**
|
|
14
|
-
* Remove all applogs for entities that have an applog
|
|
15
|
-
*
|
|
15
|
+
* Remove all applogs for entities that have an applog `{ at: 'isDeleted' | 'relation/isDeleted' | 'block/isDeleted', vl: true }`.
|
|
16
|
+
*
|
|
17
|
+
* Emits synthetic `removed` events for the entity's pre-existing applogs when an
|
|
18
|
+
* entity becomes deleted (and synthetic `added` events for un-deletion).
|
|
19
|
+
*
|
|
20
|
+
* Un-deletion: canonical input is appending `{ at: 'isDeleted', vl: false }`. Requires
|
|
21
|
+
* `lastWriteWins` upstream — without it, the `vl: true` log isn't superseded so we
|
|
22
|
+
* can't observe a transition. Soft-warned at runtime.
|
|
16
23
|
*/
|
|
17
24
|
export declare const withoutDeleted: (thread: Thread) => MappedThread;
|
|
25
|
+
/**
|
|
26
|
+
* One-off query — returns a plain snapshot. No subscriptions, no stale-data risk.
|
|
27
|
+
*/
|
|
18
28
|
export declare const query: (threadOrLogs: Thread | Applog[], patternOrPatterns: DatalogQueryPattern | DatalogQueryPattern[], startVariables?: SearchContext, opts?: {
|
|
19
29
|
debug?: boolean;
|
|
20
30
|
}) => QueryResult;
|
|
21
|
-
|
|
31
|
+
/**
|
|
32
|
+
* One-off query step — pure filtering via makeFilter, no subscriptions.
|
|
33
|
+
*/
|
|
34
|
+
export declare function queryStepOnce(thread: Thread, prevNodes: readonly QueryNode[] | null, pattern: DatalogQueryPattern, opts?: {
|
|
22
35
|
debug?: boolean;
|
|
23
|
-
})
|
|
36
|
+
}): QueryResult;
|
|
37
|
+
/**
|
|
38
|
+
* Live query — eagerly activated, always up-to-date.
|
|
39
|
+
* Returns LiveQueryResult with subscribe + dispose.
|
|
40
|
+
*/
|
|
41
|
+
export declare const liveQuery: (threadOrLogs: Thread | Applog[], patternOrPatterns: DatalogQueryPattern | DatalogQueryPattern[], startVariables?: SearchContext, opts?: {
|
|
42
|
+
debug?: boolean;
|
|
43
|
+
}) => LiveQueryResult;
|
|
44
|
+
export declare const liveQueryStep: (thread: Thread, nodeSet: LiveQueryResult | null, pattern: DatalogQueryPattern, opts?: {
|
|
45
|
+
debug?: boolean;
|
|
46
|
+
}) => LiveQueryResult;
|
|
24
47
|
export declare const queryNot: (thread: Thread, startNodes: QueryResult, patternOrPatterns: DatalogQueryPattern | DatalogQueryPattern[], opts?: {
|
|
25
48
|
debug?: boolean;
|
|
26
49
|
}) => QueryResult;
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
50
|
+
/** Live variant: queryNot with incremental updates.
|
|
51
|
+
* - Thread additions: O(new_applogs × included_nodes) — only checks new applogs
|
|
52
|
+
* - Thread removals/resets: full recompute (rare for append-mostly logs)
|
|
53
|
+
* - Upstream node additions: O(new_nodes × applogs)
|
|
54
|
+
* - Upstream node removals: removed from output
|
|
55
|
+
*/
|
|
56
|
+
export declare const liveQueryNot: (thread: Thread, upstream: LiveQueryResult, patternOrPatterns: DatalogQueryPattern | DatalogQueryPattern[], opts?: {
|
|
57
|
+
debug?: boolean;
|
|
58
|
+
}) => LiveQueryResult;
|
|
59
|
+
/** One-off: filter thread by pattern, map to values. Returns plain array. */
|
|
60
|
+
export declare const filterAndMap: <R>(thread: Thread, pattern: DatalogQueryPattern, mapper: (keyof Applog) | (Partial<{ [key in keyof Applog]: string; }>) | ((applog: Applog) => R)) => R[];
|
|
61
|
+
/** Live variant: returns SubscribableArray that updates when thread changes. */
|
|
62
|
+
export declare const liveFilterAndMap: <R>(thread: Thread, pattern: DatalogQueryPattern, mapper: (keyof Applog) | (Partial<{ [key in keyof Applog]: string; }>) | ((applog: Applog) => R)) => SubscribableArrayImpl<R>;
|
|
63
|
+
/** One-off: query and map results. Returns plain array. */
|
|
64
|
+
export declare const queryAndMap: <R>(threadOrLogs: Thread | Applog[], patternOrPatterns: Parameters<typeof query>[1], mapDef: string | (Partial<{ [key in keyof SearchContext]: string; }>) | ((record: SearchContext) => R), variables?: SearchContext) => any[];
|
|
65
|
+
/** Live variant: query and map results, returns SubscribableArray that updates reactively. */
|
|
66
|
+
export declare const liveQueryAndMap: <R>(thread: Thread, patternOrPatterns: Parameters<typeof liveQuery>[1], mapDef: string | (Partial<{ [key in keyof SearchContext]: string; }>) | ((record: SearchContext) => R)) => SubscribableArrayImpl<R>;
|
|
67
|
+
/** One-off: query entity attributes. Returns Record or null. Requires current-state thread (LWW). */
|
|
68
|
+
export declare const queryEntity: (thread: Thread, name: string, entityID: EntityID, attributes: readonly string[]) => {
|
|
30
69
|
[k: string]: ApplogValue;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
export declare const
|
|
70
|
+
};
|
|
71
|
+
/** Live variant: returns Subscribable that updates when entity attributes change. Requires current-state thread (LWW). */
|
|
72
|
+
export declare const liveQueryEntity: (thread: Thread, name: string, entityID: EntityID, attributes: readonly string[]) => SubscribableImpl<Record<string, ApplogValue>>;
|
|
73
|
+
/** Live single-attribute query. Requires current-state thread (LWW). Returns Subscribable<T | null>. */
|
|
74
|
+
export declare const liveEntityAt: <T extends ApplogValue>(thread: Thread, entityID: EntityID, at: string) => SubscribableImpl<T>;
|
|
75
|
+
export declare const agentsOfThread: (thread: Thread) => Map<string, number>;
|
|
76
|
+
export declare const entityOverlap: (threadA: Thread, threadB: Thread) => string[];
|
|
34
77
|
export declare const entityOverlapMap: (threadA: Thread, threadB: Thread, threadAName?: string, threadBName?: string) => void;
|
|
35
|
-
export declare const entityOverlapCount: (threadA: Thread, threadB: Thread) =>
|
|
36
|
-
|
|
37
|
-
export declare const
|
|
38
|
-
export declare const
|
|
39
|
-
|
|
40
|
-
|
|
78
|
+
export declare const entityOverlapCount: (threadA: Thread, threadB: Thread) => number;
|
|
79
|
+
/** Live variant: entity overlap count as Subscribable<number>. */
|
|
80
|
+
export declare const liveEntityOverlapCount: (threadA: Thread, threadB: Thread) => SubscribableImpl<number>;
|
|
81
|
+
export declare const querySingle: (threadOrLogs: Thread | Applog[], patternOrPatterns: Parameters<typeof query>[1], variables?: SearchContext) => Applog;
|
|
82
|
+
export declare const querySingleAndMap: <MAP extends (keyof Applog | (Partial<{ [key in keyof Applog]: string; }>))>(threadOrLogs: Thread | Applog[], patternOrPatterns: Parameters<typeof query>[1], mapDef: MAP, variables?: SearchContext) => any;
|
|
83
|
+
/** Live variant: querySingle returning Subscribable<Applog | null>. */
|
|
84
|
+
export declare const liveQuerySingle: (thread: Thread, patternOrPatterns: Parameters<typeof liveQuery>[1]) => SubscribableImpl<Applog>;
|
|
85
|
+
/** Live variant: querySingleAndMap returning Subscribable<T | undefined>. */
|
|
86
|
+
export declare const liveQuerySingleAndMap: <MAP extends (keyof Applog | (Partial<{ [key in keyof Applog]: string; }>))>(thread: Thread, patternOrPatterns: Parameters<typeof liveQuery>[1], mapDef: MAP) => SubscribableImpl<any>;
|
|
87
|
+
/** Create a single-applog mapper function from a mapDef */
|
|
88
|
+
export declare function makeApplogMapper<R>(mapDef: (keyof Applog) | (Partial<{
|
|
89
|
+
[key in keyof Applog]: string;
|
|
90
|
+
}>) | ((applog: Applog) => R)): (applog: Applog) => R;
|
|
91
|
+
/** Map an array of applogs using a mapDef */
|
|
92
|
+
export declare function mapApplogsWith<R>(applogs: readonly Applog[], mapDef: (keyof Applog) | (Partial<{
|
|
93
|
+
[key in keyof Applog]: string;
|
|
94
|
+
}>) | ((applog: Applog) => R)): R[];
|
|
95
|
+
export declare const mapThreadWith: <R>(thread: Thread, mapDef: (keyof Applog) | (Partial<{ [key in keyof Applog]: string; }>) | ((applog: Applog) => R)) => R[];
|
|
41
96
|
export declare const mapQueryResultWith: <R>(queryResult: QueryResult, mapDef: string | (Partial<{ [key in keyof SearchContext]: string; }>) | ((record: SearchContext) => R)) => any[];
|
|
42
97
|
/**
|
|
43
98
|
* Map Applog to custom named record, e.g.:
|
|
@@ -50,6 +105,15 @@ export declare function createObjMapper<FROM extends string, TO extends string>(
|
|
|
50
105
|
export declare function startsWith(str: string): (value: any) => any;
|
|
51
106
|
export declare function prefixAttrs(prefix: string, attrs: readonly string[]): string[];
|
|
52
107
|
export declare function prefixAt(prefix: string, attr: string): string;
|
|
108
|
+
/** Inverse of prefixAt — strips everything up to and including the first `/` */
|
|
109
|
+
export declare function stripAtPrefix(attr: string): string;
|
|
110
|
+
/** Create a key mapper from an explicit attribute→key record */
|
|
111
|
+
export declare function mapAttributes<A extends string>(mapping: Record<A, string>): (attr: A) => string;
|
|
112
|
+
/** Resolve key mapping options to a concrete mapper function */
|
|
113
|
+
export declare function resolveKeyMapper(opts?: {
|
|
114
|
+
stripAtPrefix?: true | string;
|
|
115
|
+
mapKeys?: (attr: string) => string;
|
|
116
|
+
}): (attr: string) => string;
|
|
53
117
|
export declare function threadFromMaybeArray(threadOrLogs: Thread | Applog[], name?: string): Thread;
|
|
54
118
|
export declare function withTimeout<R>(timeoutMilliseconds: number, func: () => R): R;
|
|
55
119
|
export declare function throwOnTimeout(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"basic.d.ts","sourceRoot":"","sources":["../../src/query/basic.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"basic.d.ts","sourceRoot":"","sources":["../../src/query/basic.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { Applog } from '../applog/datom-types';
|
|
2
|
-
import { Thread } from '../thread/basic';
|
|
3
|
-
import { ThreadInMemory } from '../thread/writeable';
|
|
1
|
+
import { Applog } from '../applog/datom-types.ts';
|
|
2
|
+
import { Thread } from '../thread/basic.ts';
|
|
3
|
+
import { ThreadInMemory } from '../thread/writeable.ts';
|
|
4
4
|
export interface DivergenceLeaf {
|
|
5
5
|
log: Applog;
|
|
6
6
|
thread: Thread;
|
|
7
7
|
}
|
|
8
|
-
export declare const queryDivergencesByPrev: (sourceThread: Thread) =>
|
|
8
|
+
export declare const queryDivergencesByPrev: (sourceThread: Thread) => {
|
|
9
9
|
log: Applog;
|
|
10
10
|
thread: ThreadInMemory;
|
|
11
|
-
}
|
|
11
|
+
}[];
|
|
12
12
|
//# sourceMappingURL=divergences.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"divergences.d.ts","sourceRoot":"","sources":["../../src/query/divergences.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"divergences.d.ts","sourceRoot":"","sources":["../../src/query/divergences.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAa,MAAM,0BAA0B,CAAA;AAE5D,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAKvD,MAAM,WAAW,cAAc;IAC9B,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;CACd;AAED,eAAO,MAAM,sBAAsB,iBACpB,MAAM;;;GAiCnB,CAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ApplogValue, DatalogQueryPattern, EntityID } from '../applog/datom-types.ts';
|
|
2
|
+
import { Thread } from '../thread/basic.ts';
|
|
3
|
+
import type { Subscribable } from './subscribable.ts';
|
|
4
|
+
import type { StripExplicitPrefix, StripFirstPrefix } from './attr-helpers.ts';
|
|
5
|
+
export declare function liveEntityCollection<A extends string>(thread: Thread, discoveryPattern: DatalogQueryPattern, liveAttributes: readonly A[]): Subscribable<ReadonlyMap<EntityID, Record<A, ApplogValue | null>>>;
|
|
6
|
+
export declare function liveEntityCollection<A extends string>(thread: Thread, discoveryPattern: DatalogQueryPattern, liveAttributes: readonly A[], opts: {
|
|
7
|
+
stripAtPrefix: true;
|
|
8
|
+
}): Subscribable<ReadonlyMap<EntityID, Record<StripFirstPrefix<A>, ApplogValue | null>>>;
|
|
9
|
+
export declare function liveEntityCollection<A extends string, P extends string>(thread: Thread, discoveryPattern: DatalogQueryPattern, liveAttributes: readonly A[], opts: {
|
|
10
|
+
stripAtPrefix: P;
|
|
11
|
+
}): Subscribable<ReadonlyMap<EntityID, Record<StripExplicitPrefix<A, P>, ApplogValue | null>>>;
|
|
12
|
+
export declare function liveEntityCollection<A extends string>(thread: Thread, discoveryPattern: DatalogQueryPattern, liveAttributes: readonly A[], opts: {
|
|
13
|
+
mapKeys: (attr: A) => string;
|
|
14
|
+
}): Subscribable<ReadonlyMap<EntityID, Record<string, ApplogValue | null>>>;
|
|
15
|
+
export declare function liveEntityCollection<A extends string>(thread: Thread, discoveryPattern: DatalogQueryPattern, liveAttributes: readonly A[], opts: {
|
|
16
|
+
stripAtPrefix?: true | string;
|
|
17
|
+
mapKeys?: (attr: A) => string;
|
|
18
|
+
}): Subscribable<ReadonlyMap<EntityID, Record<string, ApplogValue | null>>>;
|
|
19
|
+
//# sourceMappingURL=entity-collection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-collection.d.ts","sourceRoot":"","sources":["../../src/query/entity-collection.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,WAAW,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAC7F,OAAO,EAAe,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAKxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAI9E,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,MAAM,EACpD,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,cAAc,EAAE,SAAS,CAAC,EAAE,GACjF,YAAY,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;AACrE,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,MAAM,EACpD,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,cAAc,EAAE,SAAS,CAAC,EAAE,EACnF,IAAI,EAAE;IAAE,aAAa,EAAE,IAAI,CAAA;CAAE,GAC3B,YAAY,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;AACvF,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,cAAc,EAAE,SAAS,CAAC,EAAE,EACnF,IAAI,EAAE;IAAE,aAAa,EAAE,CAAC,CAAA;CAAE,GACxB,YAAY,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;AAC7F,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,MAAM,EACpD,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,cAAc,EAAE,SAAS,CAAC,EAAE,EACnF,IAAI,EAAE;IAAE,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAA;CAAE,GACpC,YAAY,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;AAC1E,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,MAAM,EACpD,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,cAAc,EAAE,SAAS,CAAC,EAAE,EACnF,IAAI,EAAE;IAAE,aAAa,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAA;CAAE,GACpE,YAAY,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA"}
|
package/dist/query/matchers.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DatomPart } from '../applog/datom-types';
|
|
1
|
+
import { DatomPart } from '../applog/datom-types.ts';
|
|
2
2
|
export declare function includes(str: string): (vl: DatomPart) => boolean;
|
|
3
3
|
export declare function includedIn(arr: string[]): (vl: DatomPart) => boolean;
|
|
4
4
|
//# sourceMappingURL=matchers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matchers.d.ts","sourceRoot":"","sources":["../../src/query/matchers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"matchers.d.ts","sourceRoot":"","sources":["../../src/query/matchers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAEpD,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,IAC3B,IAAI,SAAS,aACrB;AACD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAC/B,IAAI,SAAS,aACrB"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* memoizedFn — Simple argument memoization without MobX.
|
|
3
|
+
*
|
|
4
|
+
* Replaces computedFnDeepCompare for query functions.
|
|
5
|
+
* With lazy subscribe (SubscribableArray), there's no urgency to clean up
|
|
6
|
+
* cached entries — unsubscribed entries are just plain arrays in memory.
|
|
7
|
+
*
|
|
8
|
+
* refCountedMemoizedFn — Ref-counted memoization for reactive results.
|
|
9
|
+
* Returns a wrapper that increments a ref count on each call and decrements
|
|
10
|
+
* on dispose(). When refCount hits 0, the entry is cleaned up (with optional
|
|
11
|
+
* grace period).
|
|
12
|
+
*/
|
|
13
|
+
interface MemoizedFnOptions {
|
|
14
|
+
argsEqual?: (a: any[], b: any[]) => boolean;
|
|
15
|
+
argsDebugName?: (...args: any[]) => string;
|
|
16
|
+
/** Max cache entries. Oldest evicted when exceeded. Default: unlimited. */
|
|
17
|
+
maxSize?: number;
|
|
18
|
+
}
|
|
19
|
+
export declare function memoizedFn<T extends (...args: any[]) => any>(name: string, fn: T, opts?: MemoizedFnOptions): T;
|
|
20
|
+
/** A result wrapper returned by refCountedMemoizedFn. Call release() when done. */
|
|
21
|
+
export interface RefCounted<T> {
|
|
22
|
+
readonly value: T;
|
|
23
|
+
/** Decrement ref count. When it reaches 0, the cache entry is cleaned up. */
|
|
24
|
+
release(): void;
|
|
25
|
+
}
|
|
26
|
+
interface RefCountedOptions<T extends (...args: any[]) => any> {
|
|
27
|
+
argsEqual?: (a: any[], b: any[]) => boolean;
|
|
28
|
+
argsDebugName?: (...args: any[]) => string;
|
|
29
|
+
/**
|
|
30
|
+
* Called when the last reference is released and the entry is evicted.
|
|
31
|
+
* Use to tear down subscriptions, dispose SubscribableArrays, etc.
|
|
32
|
+
*/
|
|
33
|
+
onCleanup?: (result: ReturnType<T>, ...args: Parameters<T>) => void;
|
|
34
|
+
/**
|
|
35
|
+
* Grace period in ms before actually cleaning up after refCount hits 0.
|
|
36
|
+
* If someone re-acquires within this window, the entry is reused.
|
|
37
|
+
* Default: 0 (immediate cleanup).
|
|
38
|
+
*/
|
|
39
|
+
gracePeriodMs?: number;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Creates a memoized function whose results are ref-counted.
|
|
43
|
+
*
|
|
44
|
+
* Currently unused — doesn't fit liveQuery's recursive multi-step structure
|
|
45
|
+
* (API break, cache loss on pattern change without grace period).
|
|
46
|
+
* See todo/2026-04-17_ciao-mobx/memoized-cache-cleanup.md for full analysis.
|
|
47
|
+
*
|
|
48
|
+
* Each call returns `RefCounted<ReturnType<fn>>`. Multiple calls with the same
|
|
49
|
+
* args return the same cached result with an incremented ref count.
|
|
50
|
+
* When all holders call `release()`, the cache entry is cleaned up
|
|
51
|
+
* (subject to optional grace period).
|
|
52
|
+
*
|
|
53
|
+
* Usage:
|
|
54
|
+
* ```
|
|
55
|
+
* const getFiltered = refCountedMemoizedFn('rollingFilter', (thread, pattern) => {
|
|
56
|
+
* // ... expensive setup, returns MappedThread
|
|
57
|
+
* }, { onCleanup: (result) => result.dispose() })
|
|
58
|
+
*
|
|
59
|
+
* const ref = getFiltered(myThread, myPattern)
|
|
60
|
+
* // use ref.value (the MappedThread)
|
|
61
|
+
* ref.release() // decrement; when last holder releases, onCleanup fires
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
export declare function refCountedMemoizedFn<T extends (...args: any[]) => any>(name: string, fn: T, opts?: RefCountedOptions<T>): (...args: Parameters<T>) => RefCounted<ReturnType<T>>;
|
|
65
|
+
export {};
|
|
66
|
+
//# sourceMappingURL=memoized.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memoized.d.ts","sourceRoot":"","sources":["../../src/query/memoized.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAyBH,UAAU,iBAAiB;IAC1B,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,OAAO,CAAA;IAC3C,aAAa,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,MAAM,CAAA;IAC1C,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,wBAAgB,UAAU,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAC3D,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,CAAC,EACL,IAAI,CAAC,EAAE,iBAAiB,GACtB,CAAC,CAkBH;AAMD,mFAAmF;AACnF,MAAM,WAAW,UAAU,CAAC,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;IACjB,6EAA6E;IAC7E,OAAO,IAAI,IAAI,CAAA;CACf;AAED,UAAU,iBAAiB,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG;IAC5D,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,OAAO,CAAA;IAC3C,aAAa,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,MAAM,CAAA;IAC1C;;;OAGG;IACH,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAAA;IACnE;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;CACtB;AASD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACrE,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,CAAC,EACL,IAAI,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,GACzB,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAmDvD"}
|