Skip to content
Open

Idb #1601

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
1 change: 1 addition & 0 deletions docs/api/cozy-pouch-link/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,6 @@ cozy-pouch-link

## Classes

* [IndexedDBQuery](classes/IndexedDBQuery.md)
* [PouchLink](classes/PouchLink.md)
* [SQLiteQuery](classes/SQLiteQuery.md)
205 changes: 205 additions & 0 deletions docs/api/cozy-pouch-link/classes/IndexedDBQuery.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,205 @@
[cozy-pouch-link](../README.md) / IndexedDBQuery

# Class: IndexedDBQuery

## Hierarchy

* `DatabaseQueryEngine`

↳ **`IndexedDBQuery`**

## Constructors

### constructor

• **new IndexedDBQuery**(`pouchManager`, `doctype`)

*Parameters*

| Name | Type |
| :------ | :------ |
| `pouchManager` | `any` |
| `doctype` | `any` |

*Overrides*

DatabaseQueryEngine.constructor

*Defined in*

[db/idb/idb.js:15](https://github.com/cozy/cozy-client/blob/master/packages/cozy-pouch-link/src/db/idb/idb.js#L15)

## Properties

### client

• **client**: `any`

*Defined in*

[db/idb/idb.js:18](https://github.com/cozy/cozy-client/blob/master/packages/cozy-pouch-link/src/db/idb/idb.js#L18)

***

### db

• **db**: `IDBDatabase`

*Defined in*

[db/idb/idb.js:17](https://github.com/cozy/cozy-client/blob/master/packages/cozy-pouch-link/src/db/idb/idb.js#L17)

***

### doctype

• **doctype**: `any`

*Defined in*

[db/idb/idb.js:19](https://github.com/cozy/cozy-client/blob/master/packages/cozy-pouch-link/src/db/idb/idb.js#L19)

***

### openRequest

• **openRequest**: `IDBOpenDBRequest`

*Defined in*

[db/idb/idb.js:35](https://github.com/cozy/cozy-client/blob/master/packages/cozy-pouch-link/src/db/idb/idb.js#L35)

***

### storeName

• **storeName**: `string`

*Defined in*

[db/idb/idb.js:20](https://github.com/cozy/cozy-client/blob/master/packages/cozy-pouch-link/src/db/idb/idb.js#L20)

## Methods

### allDocs

▸ **allDocs**(`__namedParameters?`): `Promise`<{ `data`: `any` = doc; `meta`: `undefined` ; `next`: `undefined` ; `skip`: `undefined` } | { `data`: `any`\[] = parsedResults; `meta`: { `count`: `number` = parsedResults.length } ; `next`: `boolean` ; `skip`: `number` }>

*Parameters*

| Name | Type |
| :------ | :------ |
| `__namedParameters` | `Object` |
| `__namedParameters.limit` | `number` |
| `__namedParameters.skip` | `number` |

*Returns*

`Promise`<{ `data`: `any` = doc; `meta`: `undefined` ; `next`: `undefined` ; `skip`: `undefined` } | { `data`: `any`\[] = parsedResults; `meta`: { `count`: `number` = parsedResults.length } ; `next`: `boolean` ; `skip`: `number` }>

*Overrides*

DatabaseQueryEngine.allDocs

*Defined in*

[db/idb/idb.js:42](https://github.com/cozy/cozy-client/blob/master/packages/cozy-pouch-link/src/db/idb/idb.js#L42)

***

### find

▸ **find**(`options`): `Promise`<{ `data`: `any` = doc; `meta`: `undefined` ; `next`: `undefined` ; `skip`: `undefined` } | { `data`: `any`\[] = parsedResults; `meta`: { `count`: `number` = parsedResults.length } ; `next`: `boolean` ; `skip`: `number` }>

*Parameters*

| Name | Type |
| :------ | :------ |
| `options` | `any` |

*Returns*

`Promise`<{ `data`: `any` = doc; `meta`: `undefined` ; `next`: `undefined` ; `skip`: `undefined` } | { `data`: `any`\[] = parsedResults; `meta`: { `count`: `number` = parsedResults.length } ; `next`: `boolean` ; `skip`: `number` }>

*Overrides*

DatabaseQueryEngine.find

*Defined in*

[db/idb/idb.js:91](https://github.com/cozy/cozy-client/blob/master/packages/cozy-pouch-link/src/db/idb/idb.js#L91)

***

### getById

▸ **getById**(`id`): `Promise`<{ `data`: `any` = doc; `meta`: `undefined` ; `next`: `undefined` ; `skip`: `undefined` } | { `data`: `any`\[] = parsedResults; `meta`: { `count`: `number` = parsedResults.length } ; `next`: `boolean` ; `skip`: `number` }>

*Parameters*

| Name | Type |
| :------ | :------ |
| `id` | `any` |

*Returns*

`Promise`<{ `data`: `any` = doc; `meta`: `undefined` ; `next`: `undefined` ; `skip`: `undefined` } | { `data`: `any`\[] = parsedResults; `meta`: { `count`: `number` = parsedResults.length } ; `next`: `boolean` ; `skip`: `number` }>

*Overrides*

DatabaseQueryEngine.getById

*Defined in*

[db/idb/idb.js:58](https://github.com/cozy/cozy-client/blob/master/packages/cozy-pouch-link/src/db/idb/idb.js#L58)

***

### getByIds

▸ **getByIds**(`ids`): `Promise`<{ `data`: `any` = doc; `meta`: `undefined` ; `next`: `undefined` ; `skip`: `undefined` } | { `data`: `any`\[] = parsedResults; `meta`: { `count`: `number` = parsedResults.length } ; `next`: `boolean` ; `skip`: `number` }>

*Parameters*

| Name | Type |
| :------ | :------ |
| `ids` | `any` |

*Returns*

`Promise`<{ `data`: `any` = doc; `meta`: `undefined` ; `next`: `undefined` ; `skip`: `undefined` } | { `data`: `any`\[] = parsedResults; `meta`: { `count`: `number` = parsedResults.length } ; `next`: `boolean` ; `skip`: `number` }>

*Overrides*

DatabaseQueryEngine.getByIds

*Defined in*

[db/idb/idb.js:74](https://github.com/cozy/cozy-client/blob/master/packages/cozy-pouch-link/src/db/idb/idb.js#L74)

***

### openDB

▸ **openDB**(`dbName`, `version?`, `__namedParameters?`): `void`

*Parameters*

| Name | Type | Default value |
| :------ | :------ | :------ |
| `dbName` | `any` | `undefined` |
| `version` | `any` | `undefined` |
| `__namedParameters` | `Object` | `{}` |
| `__namedParameters.forceName` | `boolean` | `undefined` |

*Returns*

`void`

*Overrides*

DatabaseQueryEngine.openDB

*Defined in*

[db/idb/idb.js:24](https://github.com/cozy/cozy-client/blob/master/packages/cozy-pouch-link/src/db/idb/idb.js#L24)
4 changes: 3 additions & 1 deletion packages/cozy-pouch-link/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,15 @@
"dependencies": {
"cozy-client": "^57.7.0",
"pouchdb-browser": "^7.2.2",
"pouchdb-find": "^7.2.2"
"pouchdb-find": "^7.2.2",
"sift": "^17.1.3"
},
"devDependencies": {
"@babel/cli": "7.12.8",
"@cozy/minilog": "1.0.0",
"@op-engineering/op-sqlite": "^11.4.8",
"cozy-device-helper": "2.7.0",
"fake-indexeddb": "^6.0.0",
"jest-localstorage-mock": "2.4.19",
"parcel": "2.13.3",
"pouchdb-adapter-memory": "7.2.2",
Expand Down
6 changes: 3 additions & 3 deletions packages/cozy-pouch-link/src/db/dbInterface.js
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ class DatabaseQueryEngine {
* Get all docs
*
* @param {AllDocsParams} options - The all docs options
* @returns {Promise<QueryResponse>} The found docs
* @returns {Promise<QueryResponse | null>} The found docs
*/
async allDocs(options) {
throw new Error('method not implemented')
Expand All @@ -60,7 +60,7 @@ class DatabaseQueryEngine {
* Get a single doc by its id
*
* @param {string} id - id of the document to get
* @returns {Promise<QueryResponseSingleDoc>} The found docs
* @returns {Promise<QueryResponseSingleDoc | null>} The found docs
*/
async getById(id) {
throw new Error('method not implemented')
Expand All @@ -70,7 +70,7 @@ class DatabaseQueryEngine {
* Get several docs by their ids
*
* @param {Array<string>} ids - ids of the documents to get
* @returns {Promise<QueryResponse>} The found docs
* @returns {Promise<QueryResponse | null>} The found docs
*/
async getByIds(ids) {
throw new Error('method not implemented')
Expand Down
25 changes: 25 additions & 0 deletions packages/cozy-pouch-link/src/db/helpers.js
Original file line number Diff line number Diff line change
Expand Up @@ -55,3 +55,28 @@ export const areDocsEqual = async (oldDoc, newDoc) => {
export const getCozyPouchData = doc => {
return doc.cozyPouchData
}

const extractRevPrefix = rev => {
if (!rev) {
return 0
}
const prefixStr = rev.split('-')[0]
return prefixStr ? parseInt(prefixStr) : 0
}

export const keepDocWitHighestRev = docs => {
if (!docs || docs.length < 1) {
return null
}
let highestDocRev = {
doc: docs[0],
revPrefix: extractRevPrefix(docs[0]._rev)
}
for (let i = 0; i < docs.length; i++) {
const revPrefix = extractRevPrefix(docs[i]._rev)
if (revPrefix > highestDocRev.revPrefix) {
highestDocRev = { doc: docs[i], revPrefix }
}
}
return highestDocRev.doc
}
33 changes: 33 additions & 0 deletions packages/cozy-pouch-link/src/db/helpers.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import { keepDocWitHighestRev } from './helpers'

describe('keepDocWitHighestRev', () => {
it('should return null if no docs', () => {
expect(keepDocWitHighestRev([])).toBeNull()
expect(keepDocWitHighestRev(undefined)).toBeNull()
})

it('should return the single document when only one is provided', () => {
const doc = { _rev: '1-a', name: 'Single Doc' }
const docs = [doc]
expect(keepDocWitHighestRev(docs)).toBe(doc)
})

it('should return the document with the highest revision prefix', () => {
const docs = [
{ _rev: '1-a', name: 'Doc 1' },
{ _rev: '3-c', name: 'Doc 3' },
{ _rev: '2-b', name: 'Doc 2' }
]
expect(keepDocWitHighestRev(docs)).toEqual(docs[1])
})

it('should work correctly even if the documents are unsorted', () => {
const docs = [
{ _rev: '5-zzz', name: 'Doc 5' },
{ _rev: '2-aaa', name: 'Doc 2' },
{ _rev: '10-xxx', name: 'Doc 10' },
{ _rev: '7-bbb', name: 'Doc 7' }
]
expect(keepDocWitHighestRev(docs)).toEqual(docs[2])
})
})
Loading
Loading