Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
137 changes: 0 additions & 137 deletions biome_errors_2.txt

This file was deleted.

17 changes: 9 additions & 8 deletions packages/nodejs/src/local-first/Relay.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,28 +71,29 @@ export const startRelay =
name = SimpleName.orThrow("evolu-relay"),
isOwnerAllowed,
isOwnerWithinQuota,
}: NodeJsRelayConfig): Task<Relay, never, RelayDeps> =>
}: NodeJsRelayConfig): Task<Relay, SqliteError, RelayDeps> =>
async (_run) => {
await using stack = _run.stack();
const console = _run.deps.console.child("relay");

const dbFileExists = existsSync(`${name}.db`);

const handleError = (error: SqliteError) => {
console.error(error);
return ok(stack);
};

const sqlite = await stack.use(createSqlite(name));
if (!sqlite.ok) return handleError(sqlite.error);
if (!sqlite.ok) {
console.error(sqlite.error);
return sqlite;
}
const deps = { ..._run.deps, sqlite: sqlite.value };

if (!dbFileExists) {
const result = allResult([
createBaseSqliteStorageTables(deps),
createRelayStorageTables(deps),
]);
if (!result.ok) return handleError(result.error);
if (!result.ok) {
console.error(result.error);
return result;
}
}

const storage = createRelaySqliteStorage(deps)({
Expand Down
18 changes: 18 additions & 0 deletions packages/nodejs/test/setup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,24 @@ if (!(Promise as any).try) {
): Promise<T> => new Promise((resolve) => resolve(callback(...args)));
}

// Polyfill Promise.withResolvers for Node.js/Bun versions that don't support it (ES2024)
// The @evolu/common package uses Promise.withResolvers in Task.ts
if (!(Promise as any).withResolvers) {
(Promise as any).withResolvers = <T>(): {
promise: Promise<T>;
resolve: (value: T | PromiseLike<T>) => void;
reject: (reason?: any) => void;
} => {
let resolve!: (value: T | PromiseLike<T>) => void;
let reject!: (reason?: any) => void;
const promise = new Promise<T>((res, rej) => {
resolve = res;
reject = rej;
});
return { promise, resolve, reject };
};
}

// Polyfill WebSocket for Node.js tests
// IMPORTANT: Import WebSocket AFTER other polyfills to avoid circular dependency issues
import { WebSocket } from "ws";
Expand Down
6 changes: 2 additions & 4 deletions packages/vue/src/useOwner.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,9 @@ import { useEvolu } from "./useEvolu.js";
* defined in Evolu config if the owner has no transports defined.
*/
export const useOwner = (owner: SyncOwner | null): void => {
if (owner == null) return;

// biome-ignore lint/correctness/useHookAtTopLevel: intentional
const evolu = useEvolu();

// biome-ignore lint/correctness/useHookAtTopLevel: intentional
if (owner == null) return;

evolu.useOwner(owner);
};