Skip to content

Commit 276088e

Browse files
committed
feat: map
1 parent 4d6f005 commit 276088e

File tree

1 file changed

+29
-1
lines changed

1 file changed

+29
-1
lines changed

packages/indexeddb/src/lib/IndexedDBProvider.ts

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
11
// // @ts-nocheck
2-
import { CommonIdentifiers, JoshProvider, MathOperator, Method, Payload, resolveVersion, type Semver } from '@joshdb/provider';
2+
import {
3+
CommonIdentifiers,
4+
isMapByHookPayload,
5+
isMapByPathPayload,
6+
JoshProvider,
7+
MathOperator,
8+
Method,
9+
Payload,
10+
resolveVersion,
11+
type Semver
12+
} from '@joshdb/provider';
313
import { deleteProperty, getProperty, hasProperty, PROPERTY_NOT_FOUND, setProperty } from 'property-helpers';
414
import DbHandler from './DbHandler';
515
import { handleSubCallFail } from './helpers';
@@ -374,6 +384,24 @@ export class IndexedDBProvider<StoredValue = unknown> extends JoshProvider<Store
374384
public async [Method.Map]<Value = StoredValue>(payload: Payload.Map.ByPath<Value>): Promise<Payload.Map.ByPath<Value>>;
375385
public async [Method.Map]<Value = StoredValue>(payload: Payload.Map<StoredValue, Value>): Promise<Payload.Map<StoredValue, Value>> {
376386
await this.check();
387+
payload.data = [];
388+
389+
if (isMapByHookPayload(payload)) {
390+
const { hook } = payload;
391+
392+
for (const [key, value] of Object.entries(await this.db.getAll())) payload.data.push(await hook(value, key));
393+
}
394+
395+
if (isMapByPathPayload(payload)) {
396+
const { path } = payload;
397+
398+
for (const value of Object.values(await this.db.getAll())) {
399+
const data = getProperty<Value>(value, path);
400+
401+
if (data !== PROPERTY_NOT_FOUND) payload.data.push(data);
402+
}
403+
}
404+
377405
return payload;
378406
}
379407

0 commit comments

Comments
 (0)