Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
86 commits
Select commit Hold shift + click to select a range
88b7409
feat: add scripts to update tenant ledger limits in D1 databases
jchris Aug 19, 2025
4f522f9
fix(dashboard): properly handle JWKS response structure for JWT verif…
jchris Sep 2, 2025
4640d10
feat(dashboard): add dynamic JWKS discovery from JWT issuer
jchris Sep 2, 2025
c64f73d
refactor: simplify JWKS URL priority - use issuer first, then config
jchris Sep 2, 2025
82fd75a
style: fix formatting from linter
jchris Sep 2, 2025
0ebd464
chore(deps-dev): bump @vitejs/plugin-react from 5.0.1 to 5.0.2
dependabot[bot] Sep 8, 2025
77b3e8c
chore(deps): bump @tanstack/react-query from 5.85.5 to 5.87.1
dependabot[bot] Sep 8, 2025
a3dc049
chore(deps-dev): bump tailwindcss from 3.4.17 to 4.1.13
dependabot[bot] Sep 8, 2025
026f50b
chore(deps): bump @cloudflare/workers-types
dependabot[bot] Sep 8, 2025
d777b2e
chore(deps): bump jose from 6.0.13 to 6.1.0
dependabot[bot] Sep 8, 2025
ef8c227
chore(deps): bump @ipld/dag-cbor from 9.2.4 to 9.2.5
dependabot[bot] Sep 8, 2025
ff4d4e8
chore(deps-dev): bump eslint from 9.34.0 to 9.35.0
dependabot[bot] Sep 8, 2025
467d834
chore(deps): bump @hono/node-server from 1.19.0 to 1.19.1
dependabot[bot] Sep 8, 2025
c3ce4db
chore(deps-dev): bump @types/semver from 7.7.0 to 7.7.1
dependabot[bot] Sep 8, 2025
39e69cd
chore(deps): bump @clerk/clerk-js from 5.90.0 to 5.91.2
dependabot[bot] Sep 8, 2025
b6410ed
chore(deps-dev): bump @typescript/native-preview
dependabot[bot] Sep 8, 2025
89b3b67
chore(deps): bump @adviser/cement from 0.4.26 to 0.4.30
dependabot[bot] Sep 8, 2025
f5a5ace
chore(deps-dev): bump vite from 7.1.3 to 7.1.4
dependabot[bot] Sep 8, 2025
efa8657
chore(deps): bump cborg from 4.2.14 to 4.2.15
dependabot[bot] Sep 8, 2025
770b43a
chore(deps): bump hono from 4.9.4 to 4.9.6
dependabot[bot] Sep 8, 2025
7d3708c
chore(deps): bump @clerk/clerk-react from 5.45.0 to 5.46.1
dependabot[bot] Sep 8, 2025
896be2d
chore(deps): bump @clerk/backend from 2.10.1 to 2.12.1
dependabot[bot] Sep 8, 2025
93b17b5
chore(deps): bump @types/node from 24.3.0 to 24.3.1
dependabot[bot] Sep 8, 2025
3a77ed9
chore(deps-dev): bump @types/react-dom from 19.1.8 to 19.1.9
dependabot[bot] Sep 8, 2025
d02a6d8
chore(deps): bump @libsql/client from 0.15.14 to 0.15.15
dependabot[bot] Sep 8, 2025
9465ef2
chore(deps-dev): bump @eslint/js from 9.34.0 to 9.35.0
dependabot[bot] Sep 8, 2025
8a65fab
chore(deps-dev): bump @typescript/native-preview
dependabot[bot] Sep 8, 2025
f7d320e
chore(deps-dev): bump wrangler from 4.33.0 to 4.34.0
dependabot[bot] Sep 8, 2025
bce09f8
chore(deps-dev): bump typescript-eslint from 8.41.0 to 8.43.0
dependabot[bot] Sep 8, 2025
928ad5d
chore: pnpm-lock.fix
mabels Sep 8, 2025
841de54
update: @adviser/cement
mabels Sep 9, 2025
c5c1439
chore: added missing import
mabels Sep 9, 2025
b47ccf0
update @adviser/cement
mabels Sep 9, 2025
1681212
fix: tailwindcss version back 3.4.17
mabels Sep 9, 2025
d3bbab1
refactor: modernize hash functions and improve device ID system
mabels Aug 4, 2025
fb35ba2
chore: disable screenshots made smoke failing
mabels Sep 8, 2025
148bb96
fix: hash-function
mabels Sep 9, 2025
97cf984
wip [skip ci]
mabels Sep 9, 2025
6135e5c
chore: move to @adviser/ts-xxhash
mabels Sep 10, 2025
1b19583
lint: fix
mabels Sep 10, 2025
7230550
chore: some things from coderabbit
mabels Sep 10, 2025
c2d0424
chore: improve the instance(object-graph) generate to prevent that
mabels Sep 12, 2025
246c686
Update use-fireproof/tests/use-fireproof.test.tsx
mabels Sep 15, 2025
f3116a6
chore: fix missing import
mabels Sep 15, 2025
6036327
fix: make ImgFile references stable using content-based comparison
jchris Sep 9, 2025
415d7c9
refactor: use stable CID-based identity for image file caching and cl…
jchris Sep 11, 2025
281ed38
fix: implement stable CID-based content keys for DocFileMeta objects
jchris Sep 11, 2025
6a8b333
fix: use correct object type checking for file key generation in ImgF…
jchris Sep 11, 2025
321a3c6
chore(deps): bump hono from 4.9.6 to 4.9.7
dependabot[bot] Sep 15, 2025
088c25c
chore(deps): bump react-router-dom from 7.8.2 to 7.9.1
dependabot[bot] Sep 15, 2025
27aa1b2
chore(deps-dev): bump @typescript/native-preview
dependabot[bot] Sep 15, 2025
3eb7740
chore(deps): bump @clerk/clerk-react from 5.46.1 to 5.47.0
dependabot[bot] Sep 15, 2025
34655ef
chore(deps-dev): bump tailwindcss from 3.4.17 to 4.1.13
dependabot[bot] Sep 15, 2025
3c67bc1
chore(deps-dev): bump wrangler from 4.34.0 to 4.37.0
dependabot[bot] Sep 15, 2025
4bce97a
chore(deps): bump @types/react from 19.1.12 to 19.1.13
dependabot[bot] Sep 15, 2025
1ccc77f
chore(deps): bump @clerk/backend from 2.12.1 to 2.14.0
dependabot[bot] Sep 15, 2025
4f3a9c5
chore(deps): bump @tanstack/react-query from 5.87.1 to 5.87.4
dependabot[bot] Sep 15, 2025
064c086
chore(deps-dev): bump globals from 16.3.0 to 16.4.0
dependabot[bot] Sep 15, 2025
c260189
chore(deps): bump zod from 4.0.14 to 4.1.8
dependabot[bot] Sep 15, 2025
fb6fae8
chore(deps): bump multiformats from 13.4.0 to 13.4.1
dependabot[bot] Sep 15, 2025
4293bae
chore(deps-dev): bump @cloudflare/vite-plugin from 1.12.0 to 1.13.1
dependabot[bot] Sep 15, 2025
916e1be
chore(deps): bump @clerk/clerk-js from 5.91.2 to 5.93.0
dependabot[bot] Sep 15, 2025
a7b001c
chore(deps-dev): bump deno from 2.4.4 to 2.5.0
dependabot[bot] Sep 15, 2025
55fcdff
chore(deps): bump @hono/node-server from 1.19.1 to 1.19.2
dependabot[bot] Sep 15, 2025
1c0bb1c
chore: dependencies fixes
mabels Sep 18, 2025
38b48da
fix: enhance ImgFile cache management and fix key collision issues
jchris Sep 18, 2025
1487cbf
chore: update deno wrangler
mabels Sep 19, 2025
e74e2ce
chore: update hono and wrangler
mabels Sep 19, 2025
a47a16c
chore: @adviser/cement update
mabels Sep 19, 2025
1823918
chore: now the stall is gone
mabels Sep 19, 2025
efd2aed
chore: format
mabels Sep 19, 2025
8537885
WIP: fix double cleanup issue with stable key tracking
jchris Sep 19, 2025
c8eb37d
WIP: simplified cleanup approach - 8/10 tests passing
jchris Sep 19, 2025
a7492f0
feat: implement content-aware cleanup functions - 9/10 tests passing
jchris Sep 19, 2025
a1b87df
fix: complete ImgFile stable content key implementation - all tests p…
jchris Sep 20, 2025
7d1d038
style: format code and add consistent string quotes in img-file.ts
jchris Sep 20, 2025
2729ebe
wip: meta-corruption in attachable-subscription.test.ts
mabels Sep 2, 2025
1cfd538
style: add missing semicolons and format code consistently
jchris Sep 2, 2025
ffb75d4
WIP: Enhanced logging for meta-corruption race condition investigation
jchris Sep 2, 2025
e8c5a6d
feat: add debug logging and assertions for CID validation in blocksto…
jchris Sep 2, 2025
1e7d8fa
chore: remove debug logging and commented validation checks
jchris Sep 3, 2025
b31bacd
feat: enable block validation and enhance logging for CRDT sync opera…
jchris Sep 3, 2025
86582be
wip: store all changes [skip ci]
mabels Sep 5, 2025
94a41be
style: format code and improve line wrapping consistency
jchris Sep 21, 2025
e765720
refactor: remove unused imports and parameters across core modules
jchris Sep 21, 2025
3d8c79b
style: format imports to use single line in meta-key-hack test
jchris Sep 21, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,4 @@ updates:
- dependency-name: "drizzle-kit:*"
versions: [">0.30.6"]
- dependency-name: "tailwindcss:*"
versions: [">3.4.17"]
versions: ["version-update:semver-major"]
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ logs
**/*.tgz
*.zip
*.tgz
.npmrc

smoke/package.json
smoke/pnpm-lock.yaml
Expand Down
6 changes: 3 additions & 3 deletions cli/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,23 +39,23 @@
"url": "https://github.com/fireproof-storage/fireproof/issues"
},
"dependencies": {
"@adviser/cement": "^0.4.26",
"@adviser/cement": "^0.4.39",
"@fireproof/core-runtime": "workspace:0.0.0",
"@fireproof/core-types-base": "workspace:0.0.0",
"@fireproof/vendor": "workspace:0.0.0",
"aws4fetch": "^1.0.20",
"cmd-ts": "^0.14.1",
"find-up": "^7.0.0",
"fs-extra": "^11.3.1",
"jose": "^6.0.13",
"jose": "^6.1.0",
"multiformats": "^13.4.0",
"semver": "^7.7.2",
"zx": "^8.8.1"
},
"devDependencies": {
"@fireproof/core-cli": "workspace:0.0.0",
"@types/fs-extra": "^11.0.4",
"@types/semver": "^7.7.0",
"@types/semver": "^7.7.1",
"tsx": "^4.20.4",
"vitest": "^3.2.4"
}
Expand Down
10 changes: 5 additions & 5 deletions cloud/3rd-party/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,14 +39,14 @@
"url": "https://github.com/fireproof-storage/fireproof/issues"
},
"dependencies": {
"@adviser/cement": "^0.4.26",
"@adviser/cement": "^0.4.39",
"react-dom": "^19.1.1",
"use-fireproof": "workspace:0.0.0"
},
"devDependencies": {
"@types/react": "^19.1.11",
"@types/react-dom": "^19.1.7",
"@vitejs/plugin-react": "^5.0.0",
"vite": "^7.1.2"
"@types/react": "^19.1.13",
"@types/react-dom": "^19.1.9",
"@vitejs/plugin-react": "^5.0.2",
"vite": "^7.1.5"
}
}
10 changes: 5 additions & 5 deletions cloud/backend/base/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,19 +36,19 @@
"url": "https://github.com/fireproof-storage/fireproof/issues"
},
"dependencies": {
"@adviser/cement": "^0.4.26",
"@cloudflare/workers-types": "^4.20250810.0",
"@adviser/cement": "^0.4.39",
"@cloudflare/workers-types": "^4.20250918.0",
"@fireproof/cloud-base": "workspace:0.0.0",
"@fireproof/core-base": "workspace:0.0.0",
"@fireproof/core-gateways-cloud": "workspace:0.0.0",
"@fireproof/core-protocols-cloud": "workspace:0.0.0",
"@fireproof/core-runtime": "workspace:0.0.0",
"@fireproof/vendor": "workspace:0.0.0",
"@libsql/client": "^0.15.10",
"@libsql/client": "^0.15.15",
"aws4fetch": "^1.0.20",
"drizzle-orm": "^0.44.3",
"hono": "^4.9.4",
"jose": "^6.0.13"
"hono": "^4.9.8",
"jose": "^6.1.0"
},
"devDependencies": {
"@fireproof/core-cli": "workspace:0.0.0",
Expand Down
2 changes: 1 addition & 1 deletion cloud/backend/base/test-helper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@ export async function mockJWK(sthis: SuperThis, claim: Partial<TokenForParam> =
token: keys.strings.privateKey,
});

const id = claim.id ?? sthis.nextId().str;
const id = claim.jti ?? sthis.nextId().str;
const claims: ps.TokenForParam = {
userId: `hello-${id}`,
email: `hello-${id}@test.de`,
Expand Down
8 changes: 4 additions & 4 deletions cloud/backend/cf-d1/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,8 @@
"url": "https://github.com/fireproof-storage/fireproof/issues"
},
"dependencies": {
"@adviser/cement": "^0.4.26",
"@cloudflare/workers-types": "^4.20250810.0",
"@adviser/cement": "^0.4.39",
"@cloudflare/workers-types": "^4.20250918.0",
"@fireproof/cloud-backend-base": "workspace:0.0.0",
"@fireproof/cloud-base": "workspace:0.0.0",
"@fireproof/core-protocols-cloud": "workspace:0.0.0",
Expand All @@ -50,15 +50,15 @@
"@fireproof/vendor": "workspace:0.0.0",
"cmd-ts": "^0.14.1",
"drizzle-orm": "^0.44.3",
"hono": "^4.9.4",
"hono": "^4.9.8",
"multiformats": "^13.4.0"
},
"devDependencies": {
"@fireproof/core-cli": "workspace:0.0.0",
"drizzle-kit": "0.30.6",
"tsx": "^4.20.4",
"vitest": "^3.2.4",
"wrangler": "^4.32.0",
"wrangler": "^4.38.0",
"zx": "^8.8.1"
}
}
10 changes: 5 additions & 5 deletions cloud/backend/node/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
"url": "https://github.com/fireproof-storage/fireproof/issues"
},
"dependencies": {
"@adviser/cement": "^0.4.26",
"@adviser/cement": "^0.4.39",
"@fireproof/cloud-backend-base": "workspace:0.0.0",
"@fireproof/cloud-base": "workspace:0.0.0",
"@fireproof/core-base": "workspace:0.0.0",
Expand All @@ -45,16 +45,16 @@
"@fireproof/core-types-base": "workspace:0.0.0",
"@fireproof/core-types-protocols-cloud": "workspace:0.0.0",
"@fireproof/vendor": "workspace:0.0.0",
"@hono/node-server": "^1.19.0",
"@hono/node-server": "^1.19.2",
"@hono/node-ws": "^1.2.0",
"@libsql/client": "^0.15.10",
"@libsql/client": "^0.15.15",
"drizzle-orm": "^0.44.3",
"hono": "^4.9.4",
"hono": "^4.9.8",
"vitest": "^3.2.4"
},
"devDependencies": {
"@fireproof/core-cli": "workspace:0.0.0",
"@types/node": "^24.3.0",
"@types/node": "^24.4.0",
"drizzle-kit": "0.30.6",
"zx": "^8.8.1"
}
Expand Down
4 changes: 2 additions & 2 deletions cloud/base/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -38,14 +38,14 @@
"react": ">=18.0.0"
},
"dependencies": {
"@adviser/cement": "^0.4.26",
"@adviser/cement": "^0.4.39",
"@fireproof/core-blockstore": "workspace:0.0.0",
"@fireproof/core-runtime": "workspace:0.0.0",
"@fireproof/core-types-base": "workspace:0.0.0",
"@fireproof/vendor": "workspace:0.0.0",
"aws4fetch": "^1.0.20",
"cmd-ts": "^0.14.1",
"jose": "^6.0.13"
"jose": "^6.1.0"
},
"devDependencies": {
"@fireproof/core-cli": "workspace:0.0.0",
Expand Down
8 changes: 4 additions & 4 deletions cloud/todo-app/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,15 +41,15 @@
"react": ">=18.0.0"
},
"dependencies": {
"@adviser/cement": "^0.4.26",
"@adviser/cement": "^0.4.39",
"@fireproof/vendor": "workspace:0.0.0",
"@types/react": "^19.1.11",
"@types/react": "^19.1.13",
"react-dom": "^19.1.0",
"use-fireproof": "workspace:0.0.0"
},
"devDependencies": {
"@fireproof/core-cli": "workspace:0.0.0",
"@types/react-dom": "^19.1.6",
"vite": "^7.1.3"
"@types/react-dom": "^19.1.9",
"vite": "^7.1.5"
}
}
31 changes: 26 additions & 5 deletions core/base/crdt-clock.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,8 @@ export class CRDTClockImpl {
prevHead,
updates,
})) {
return this.processUpdates(updatesAcc, all, prevHead);
await this.processUpdates(updatesAcc, all, prevHead);
return;
}
}

Expand Down Expand Up @@ -137,7 +138,14 @@ export class CRDTClockImpl {
.Int("prevHeadLength", prevHead.length)
.Int("currentHeadLength", this.head.length)
.Msg("INT_APPLY_HEAD: Entry point");
// console.log("int_applyHead", this.applyHeadQueue.size(), this.head, newHead, prevHead, localUpdates);
this.logger
.Debug()
.Int("queueSize", this.applyHeadQueue.size())
.Any("currentHead", this.head)
.Any("newHead", newHead)
.Any("prevHead", prevHead)
.Any("localUpdates", localUpdates)
.Msg("int_applyHead processing");
const ogHead = sortClockHead(this.head);
newHead = sortClockHead(newHead);
if (compareClockHeads(ogHead, newHead)) {
Expand All @@ -153,6 +161,20 @@ export class CRDTClockImpl {
if (!this.blockstore) {
throw this.logger.Error().Msg("missing blockstore").AsError();
}
this.logger
.Debug()
.Str("dbName", this.blockstore?.crdtParent?.ledgerParent?.name || "unnamed")
.Str(
"carLog",
this.blockstore?.loader?.carLog
?.asArray()
.map((cg) => cg.map((c) => c.toString()).join(","))
.join(";") || "no-carlog",
)
.Str("validatingHead", newHead.map((h) => h.toString()).join(","))
.Msg("PRE_VALIDATION: CarLog before block validation");
// Add sleep to test race condition theory
// await sleep(1000);
await validateBlocks(this.logger, newHead, this.blockstore);
if (!this.transaction) {
this.transaction = this.blockstore.openTransaction({ noLoader, add: false });
Expand Down Expand Up @@ -216,7 +238,7 @@ async function validateBlocks(logger: Logger, newHead: ClockHead, blockstore?: B
newHead.map(async (cid) => {
const got = await blockstore.get(cid);
if (!got) {
throw logger.Error().Str("cid", cid.toString()).Msg("int_applyHead missing block").AsError();
throw logger.Error().Str("cid", cid.toString()).Msg("validateBlocks missing block").AsError();
}
});
}
Expand All @@ -230,8 +252,7 @@ async function advanceBlocks(logger: Logger, newHead: ClockHead, tblocks: CarTra
try {
head = await advance(toPailFetcher(tblocks), head, cid);
} catch (e) {
logger.Error().Err(e).Msg("failed to advance head");
// console.log('failed to advance head:', cid.toString(), e)
logger.Error().Str("cid", cid.toString()).Err(e).Msg("failed to advance head");
// continue;
}
}
Expand Down
8 changes: 6 additions & 2 deletions core/base/crdt-helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ import {
PARAM,
NotFoundError,
} from "@fireproof/core-types-base";
import { Logger } from "@adviser/cement";
import { exception2Result, Logger } from "@adviser/cement";
import { Link, Version } from "multiformats";

function toString<K extends IndexKeyType>(key: K, logger: Logger): string {
Expand All @@ -58,7 +58,11 @@ export function toPailFetcher(tblocks: BlockFetcher): PailBlockFetcher {
get: async <T = unknown, C extends number = number, A extends number = number, V extends Version = 1>(
link: Link<T, C, A, V>,
) => {
const block = await tblocks.get(link);
const rBlock = await exception2Result(() => tblocks.get(link));
if (rBlock.isErr()) {
return undefined;
}
const block = rBlock.Ok();
return block
? ({
cid: block.cid,
Expand Down
12 changes: 6 additions & 6 deletions core/base/crdt.ts
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ export class CRDTImpl implements CRDT {
applyMeta: async (meta: TransactionMeta) => {
const crdtMeta = meta as CRDTMeta;
if (!crdtMeta.head) throw this.logger.Error().Msg("missing head").AsError();
// console.log("applyMeta-pre", crdtMeta.head, this.clock.head);
this.logger.Debug().Any("incomingHead", crdtMeta.head).Any("currentHead", this.clock.head).Msg("applyMeta-pre");
this.logger
.Debug()
.Str("newHead", crdtMeta.head.map((h) => h.toString()).join(","))
Expand All @@ -115,7 +115,7 @@ export class CRDTImpl implements CRDT {
.Str("dbName", this.opts.name || "unnamed")
.Msg("APPLY_META: Calling applyHead for REMOTE sync");
await this.clock.applyHead(crdtMeta.head, []);
// console.log("applyMeta-post", crdtMeta.head, this.clock.head);
this.logger.Debug().Any("resultHead", crdtMeta.head).Any("clockHead", this.clock.head).Msg("applyMeta-post");
},
compactStrategy: rCompactStrategy.Ok(),
gatewayInterceptor: opts.gatewayInterceptor,
Expand Down Expand Up @@ -209,13 +209,13 @@ export class CRDTImpl implements CRDT {
async ready(): Promise<void> {
return this.onceReady.once(async () => {
try {
// console.log("bs-ready-pre")
this.logger.Debug().Msg("blockstore ready preparation");
// await this.blockstore.ready();
// console.log("bs-ready-post-1")
this.logger.Debug().Msg("blockstore ready completed");
// await this.indexBlockstore?.ready();
// console.log("bs-ready-post-2")
this.logger.Debug().Msg("index blockstore ready completed");
// await this.clock.ready();
// console.log("bs-ready-post-3")
this.logger.Debug().Msg("clock ready completed");
await Promise.all([
this.blockstore.ready(),
this.indexBlockstore ? this.indexBlockstore.ready() : Promise.resolve(),
Expand Down
7 changes: 5 additions & 2 deletions core/base/database.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import {
Attached,
NotFoundError,
QueryResult,
isNotFoundError,
} from "@fireproof/core-types-base";
import { ensureLogger, makeName } from "@fireproof/core-runtime";

Expand Down Expand Up @@ -78,7 +79,10 @@ export class DatabaseImpl implements Database {
const { doc } = got;
return { ...(doc as unknown as DocWithId<T>), _id: id };
} catch (e) {
throw new NotFoundError(`Not found: ${id} - ${e instanceof Error ? e.message : String(e)}`);
if (isNotFoundError(e)) {
throw e;
}
throw this.logger.Error().Err(e).Msg("unexpect error").AsError();
}
}

Expand Down Expand Up @@ -157,7 +161,6 @@ export class DatabaseImpl implements Database {
if (typeof opts.limit === "number" && opts.limit >= 0) {
rows = rows.slice(0, opts.limit);
}

return { rows, clock: head, name: this.name };
}

Expand Down
Loading
Loading