Skip to content

Commit 2134035

Browse files
authored
Merge branch 'main' into meili-bot/v0-30-code-samples
2 parents 12f7a48 + a570f32 commit 2134035

File tree

13 files changed

+1041
-94
lines changed

13 files changed

+1041
-94
lines changed

CONTRIBUTING.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ Here are the steps to release a beta version of this package:
142142
```bash
143143
git checkout -b my-feature-beta
144144
```
145-
- During the Meilisearch pre-release, create a branch originating from `bump-meilisearch-v*.*.*` named `meilisearch-v*.*.*-beta`. <br>
145+
- During the Meilisearch pre-release, create a branch originating from `bump-meilisearch-v*.*.*` named `bump-meilisearch-v*.*.*-beta`. <br>
146146
`v*.*.*` is the next version of the package, NOT the version of Meilisearch!
147147

148148
```bash

README.md

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -329,7 +329,7 @@ controller.abort()
329329

330330
## 🤖 Compatibility with Meilisearch
331331

332-
This package only guarantees the compatibility with the [version v0.29.0 of Meilisearch](https://github.com/meilisearch/meilisearch/releases/tag/v0.29.0).
332+
This package only guarantees the compatibility with the [version v0.30.0 of Meilisearch](https://github.com/meilisearch/meilisearch/releases/tag/v0.30.0).
333333

334334
## 💡 Learn more
335335

@@ -432,6 +432,18 @@ client.getTasks(parameters: TasksQuery): Promise<TasksResults>
432432
client.getTask(uid: number): Promise<Task>
433433
```
434434

435+
#### [Delete tasks](https://docs.meilisearch.com/reference/api/tasks.html#delete-task)
436+
437+
```ts
438+
client.deleteTasks(parameters: DeleteTasksQuery = {}): Promise<EnqueuedTask>
439+
```
440+
441+
#### [Cancel tasks](https://docs.meilisearch.com/reference/api/tasks.html#cancel-task)
442+
443+
```ts
444+
client.cancelTasks(parameters: CancelTasksQuery = {}): Promise<EnqueuedTask>
445+
```
446+
435447
#### [Get all tasks of an index](https://docs.meilisearch.com/reference/api/tasks.html#get-all-tasks-by-index)
436448

437449
```ts
@@ -444,6 +456,7 @@ client.index('myIndex').getTasks(parameters: TasksQuery): Promise<TasksResults>
444456
client.index('myIndex').getTask(uid: number): Promise<Task>
445457
```
446458

459+
447460
#### Wait for one task
448461

449462

@@ -562,6 +575,12 @@ client.index('myIndex').fetchInfo(): Promise<Index>
562575
client.index('myIndex').fetchPrimaryKey(): Promise<string | undefined>
563576
```
564577

578+
##### Swap two indexes
579+
580+
```ts
581+
client.swapIndexes(params: SwapIndexesParams): Promise<EnqueuedTask>
582+
```
583+
565584
### Settings <!-- omit in toc -->
566585

567586
#### [Get settings](https://docs.meilisearch.com/reference/api/settings.html#get-settings)

src/clients/client.ts

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ import {
2929
KeysResults,
3030
TasksResults,
3131
EnqueuedTaskObject,
32+
SwapIndexesParams,
33+
CancelTasksQuery,
34+
DeleteTasksQuery,
3235
} from '../types'
3336
import { HttpRequests } from '../http-requests'
3437
import { TaskClient, Task } from '../task'
@@ -184,6 +187,19 @@ class Client {
184187
}
185188
}
186189

190+
/**
191+
* Swaps a list of index tuples.
192+
*
193+
* @memberof MeiliSearch
194+
* @method swapIndexes
195+
* @param {SwapIndexesParams} params - List of indexes tuples to swap.
196+
* @returns {Promise<EnqueuedTask>} - Promise returning object of the enqueued task
197+
*/
198+
async swapIndexes(params: SwapIndexesParams): Promise<EnqueuedTask> {
199+
const url = '/swap-indexes'
200+
return await this.httpRequest.post(url, params)
201+
}
202+
187203
///
188204
/// TASKS
189205
///
@@ -252,6 +268,30 @@ class Client {
252268
})
253269
}
254270

271+
/**
272+
* Cancel a list of enqueued or processing tasks.
273+
* @memberof MeiliSearch
274+
* @method cancelTasks
275+
* @param {CancelTasksQuery} [parameters={}] - Parameters to filter the tasks.
276+
*
277+
* @returns {Promise<EnqueuedTask>} Promise containing an EnqueuedTask
278+
*/
279+
async cancelTasks(parameters: CancelTasksQuery): Promise<EnqueuedTask> {
280+
return await this.tasks.cancelTasks(parameters)
281+
}
282+
283+
/**
284+
* Delete a list of tasks.
285+
* @memberof MeiliSearch
286+
* @method deleteTasks
287+
* @param {DeleteTasksQuery} [parameters={}] - Parameters to filter the tasks.
288+
*
289+
* @returns {Promise<EnqueuedTask>} Promise containing an EnqueuedTask
290+
*/
291+
async deleteTasks(parameters: DeleteTasksQuery = {}): Promise<EnqueuedTask> {
292+
return await this.tasks.deleteTasks(parameters)
293+
}
294+
255295
///
256296
/// KEYS
257297
///

src/http-requests.ts

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,25 @@ import {
1111

1212
import { addTrailingSlash, addProtocolIfNotPresent } from './utils'
1313

14+
type queryParams<T> = { [key in keyof T]: string }
15+
16+
function toQueryParams<T extends object>(parameters: T): queryParams<T> {
17+
const params = Object.keys(parameters) as Array<keyof T>
18+
19+
const queryParams = params.reduce<queryParams<T>>((acc, key) => {
20+
const value = parameters[key]
21+
if (value === undefined) {
22+
return acc
23+
} else if (Array.isArray(value)) {
24+
return { ...acc, [key]: value.join(',') }
25+
} else if (value instanceof Date) {
26+
return { ...acc, [key]: value.toISOString() }
27+
}
28+
return { ...acc, [key]: value }
29+
}, {} as queryParams<T>)
30+
return queryParams
31+
}
32+
1433
function constructHostURL(host: string): string {
1534
try {
1635
host = addProtocolIfNotPresent(host)
@@ -219,4 +238,4 @@ class HttpRequests {
219238
}
220239
}
221240

222-
export { HttpRequests }
241+
export { HttpRequests, toQueryParams }

src/indexes.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ class Index<T = Record<string, any>> {
244244
* @returns {Promise<TasksResults>} - Promise containing all tasks
245245
*/
246246
async getTasks(parameters: TasksQuery = {}): Promise<TasksResults> {
247-
return await this.tasks.getTasks({ ...parameters, indexUid: [this.uid] })
247+
return await this.tasks.getTasks({ ...parameters, indexUids: [this.uid] })
248248
}
249249

250250
/**

src/task.ts

Lines changed: 47 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,20 @@ import {
66
TasksQuery,
77
TasksResults,
88
TaskObject,
9+
CancelTasksQuery,
910
TasksResultsObject,
11+
DeleteTasksQuery,
1012
} from './types'
11-
import { HttpRequests } from './http-requests'
12-
import { removeUndefinedFromObject, sleep } from './utils'
13+
import { HttpRequests, toQueryParams } from './http-requests'
14+
import { sleep } from './utils'
15+
import { EnqueuedTask } from './enqueued-task'
1316

1417
class Task {
1518
indexUid: TaskObject['indexUid']
1619
status: TaskObject['status']
1720
type: TaskObject['type']
1821
uid: TaskObject['uid']
19-
batchUid: TaskObject['batchUid']
22+
canceledBy: TaskObject['canceledBy']
2023
details: TaskObject['details']
2124
error: TaskObject['error']
2225
duration: TaskObject['duration']
@@ -29,8 +32,8 @@ class Task {
2932
this.status = task.status
3033
this.type = task.type
3134
this.uid = task.uid
32-
this.batchUid = task.batchUid
3335
this.details = task.details
36+
this.canceledBy = task.canceledBy
3437
this.error = task.error
3538
this.duration = task.duration
3639

@@ -70,17 +73,9 @@ class TaskClient {
7073
async getTasks(parameters: TasksQuery = {}): Promise<TasksResults> {
7174
const url = `tasks`
7275

73-
const queryParams = {
74-
indexUid: parameters?.indexUid?.join(','),
75-
type: parameters?.type?.join(','),
76-
status: parameters?.status?.join(','),
77-
from: parameters.from,
78-
limit: parameters.limit,
79-
}
80-
8176
const tasks = await this.httpRequest.get<Promise<TasksResultsObject>>(
8277
url,
83-
removeUndefinedFromObject(queryParams)
78+
toQueryParams<TasksQuery>(parameters)
8479
)
8580

8681
return {
@@ -139,6 +134,45 @@ class TaskClient {
139134
}
140135
return tasks
141136
}
137+
138+
/**
139+
* Cancel a list of enqueued or processing tasks.
140+
* @memberof Tasks
141+
* @method cancelTasks
142+
* @param {CancelTasksQuery} [parameters={}] - Parameters to filter the tasks.
143+
*
144+
* @returns {Promise<EnqueuedTask>} Promise containing an EnqueuedTask
145+
*/
146+
async cancelTasks(parameters: CancelTasksQuery = {}): Promise<EnqueuedTask> {
147+
const url = `tasks/cancel`
148+
149+
const task = await this.httpRequest.post(
150+
url,
151+
{},
152+
toQueryParams<CancelTasksQuery>(parameters)
153+
)
154+
155+
return new EnqueuedTask(task)
156+
}
157+
158+
/**
159+
* Delete a list tasks.
160+
* @memberof Tasks
161+
* @method deleteTasks
162+
* @param {DeleteTasksQuery} [parameters={}] - Parameters to filter the tasks.
163+
*
164+
* @returns {Promise<EnqueuedTask>} Promise containing an EnqueuedTask
165+
*/
166+
async deleteTasks(parameters: DeleteTasksQuery = {}): Promise<EnqueuedTask> {
167+
const url = `tasks`
168+
169+
const task = await this.httpRequest.delete(
170+
url,
171+
{},
172+
toQueryParams<DeleteTasksQuery>(parameters)
173+
)
174+
return new EnqueuedTask(task)
175+
}
142176
}
143177

144178
export { TaskClient, Task }

0 commit comments

Comments
 (0)