fix: slow-types

This commit is contained in:
2026-01-05 23:23:53 +01:00
parent 4aaf12948c
commit 7bb356203f
7 changed files with 21 additions and 20 deletions

View File

@@ -166,11 +166,11 @@ export class Collection<
|-------------------------------------------------------------------------------- |--------------------------------------------------------------------------------
*/ */
onFlush(cb: () => void) { onFlush(cb: () => void): Subscription {
return this.storage.event.subscribe("flush", cb); return this.storage.event.subscribe("flush", cb);
} }
onChange(cb: (event: ChangeEvent<TSchema>) => void) { onChange(cb: (event: ChangeEvent<TSchema>) => void): Subscription {
return this.storage.event.subscribe("change", cb); return this.storage.event.subscribe("change", cb);
} }
} }

View File

@@ -29,14 +29,14 @@ export class IndexedDBStorage<TSchema extends AnyDocument = AnyDocument> extends
this.#promise = promise; this.#promise = promise;
} }
get db() { get db(): IDBPDatabase {
if (this.#db === undefined) { if (this.#db === undefined) {
throw new Error("Database not initialized"); throw new Error("Database not initialized");
} }
return this.#db; return this.#db;
} }
async resolve() { async resolve(): Promise<this> {
if (this.#db === undefined) { if (this.#db === undefined) {
this.#db = await this.#promise; this.#db = await this.#promise;
} }

View File

@@ -20,11 +20,11 @@ export class MemoryDatabase<TOptions extends MemoryDatabaseOptions> {
} }
} }
get name() { get name(): TOptions["name"] {
return this.options.name; return this.options.name;
} }
get registrars() { get registrars(): TOptions["registrars"] {
return this.options.registrars; return this.options.registrars;
} }

View File

@@ -15,11 +15,11 @@ export class MemoryStorage<TSchema extends AnyDocument = AnyDocument> extends St
this.index = new IndexManager(indexes); this.index = new IndexManager(indexes);
} }
get documents() { get documents(): TSchema[] {
return this.index.primary.documents; return this.index.primary.documents;
} }
async resolve() { async resolve(): Promise<this> {
return this; return this;
} }

View File

@@ -10,8 +10,8 @@ const EMPTY_SET: ReadonlySet<PrimaryKey> = Object.freeze(new Set<PrimaryKey>());
export class IndexManager<TSchema extends AnyDocument> { export class IndexManager<TSchema extends AnyDocument> {
readonly primary: PrimaryIndex<TSchema>; readonly primary: PrimaryIndex<TSchema>;
readonly unique = new Map<StringKeyOf<TSchema>, UniqueIndex>(); readonly unique: Map<StringKeyOf<TSchema>, UniqueIndex> = new Map<StringKeyOf<TSchema>, UniqueIndex>();
readonly shared = new Map<StringKeyOf<TSchema>, SharedIndex>(); readonly shared: Map<StringKeyOf<TSchema>, SharedIndex> = new Map<StringKeyOf<TSchema>, SharedIndex>();
constructor(readonly specs: IndexSpec<TSchema>[]) { constructor(readonly specs: IndexSpec<TSchema>[]) {
const primary = specs.find((spec) => spec.kind === "primary"); const primary = specs.find((spec) => spec.kind === "primary");
@@ -40,7 +40,7 @@ export class IndexManager<TSchema extends AnyDocument> {
* *
* @param document - Document to insert. * @param document - Document to insert.
*/ */
insert(document: TSchema) { insert(document: TSchema): void {
const pk = document[this.primary.key]; const pk = document[this.primary.key];
const insertedUniques: [StringKeyOf<TSchema>, any][] = []; const insertedUniques: [StringKeyOf<TSchema>, any][] = [];
@@ -225,12 +225,13 @@ export class IndexManager<TSchema extends AnyDocument> {
* *
* @param document - Document to update against current index. * @param document - Document to update against current index.
*/ */
update(document: TSchema) { update(document: TSchema): void {
const pk = document[this.primary.key]; const pk = document[this.primary.key];
const current = this.primary.get(pk); const current = this.primary.get(pk);
if (current === undefined) { if (current === undefined) {
return this.insert(document); this.insert(document);
return;
} }
const revertedUniques: [StringKeyOf<TSchema>, any][] = []; const revertedUniques: [StringKeyOf<TSchema>, any][] = [];

View File

@@ -7,11 +7,11 @@ export class PrimaryIndex<TSchema extends AnyDocument> {
constructor(readonly key: string) {} constructor(readonly key: string) {}
get documents() { get documents(): TSchema[] {
return Array.from(this.#index.values()); return Array.from(this.#index.values());
} }
keys() { keys(): string[] {
return Array.from(this.#index.keys()); return Array.from(this.#index.keys());
} }
@@ -19,7 +19,7 @@ export class PrimaryIndex<TSchema extends AnyDocument> {
return this.#index.has(pk); return this.#index.has(pk);
} }
insert(pk: PrimaryKey, document: TSchema) { insert(pk: PrimaryKey, document: TSchema): void {
if (this.#index.has(pk)) { if (this.#index.has(pk)) {
throw new Error(`Duplicate primary key: ${pk}`); throw new Error(`Duplicate primary key: ${pk}`);
} }
@@ -30,15 +30,15 @@ export class PrimaryIndex<TSchema extends AnyDocument> {
return this.#index.get(pk); return this.#index.get(pk);
} }
replace(pk: PrimaryKey, document: TSchema) { replace(pk: PrimaryKey, document: TSchema): void {
this.#index.set(pk, document); this.#index.set(pk, document);
} }
delete(pk: PrimaryKey) { delete(pk: PrimaryKey): void {
this.#index.delete(pk); this.#index.delete(pk);
} }
flush() { flush(): void {
this.#index.clear(); this.#index.clear();
} }
} }

View File

@@ -10,7 +10,7 @@ import type { AnyDocument } from "./types.ts";
type StorageEvent = "change" | "flush"; type StorageEvent = "change" | "flush";
export abstract class Storage<TSchema extends AnyDocument = AnyDocument> { export abstract class Storage<TSchema extends AnyDocument = AnyDocument> {
readonly event = new EventEmitter<StorageEvent>(); readonly event: EventEmitter<StorageEvent> = new EventEmitter<StorageEvent>();
status: Status = "loading"; status: Status = "loading";