@hardlydifficult/task-list 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +62 -54
- package/dist/FullState.d.ts +14 -15
- package/dist/FullState.d.ts.map +1 -1
- package/dist/FullState.js +21 -22
- package/dist/FullState.js.map +1 -1
- package/dist/Project.d.ts +42 -0
- package/dist/Project.d.ts.map +1 -0
- package/dist/Project.js +65 -0
- package/dist/Project.js.map +1 -0
- package/dist/Task.d.ts +9 -8
- package/dist/Task.d.ts.map +1 -1
- package/dist/Task.js +23 -12
- package/dist/Task.js.map +1 -1
- package/dist/TaskListClient.d.ts +15 -7
- package/dist/TaskListClient.d.ts.map +1 -1
- package/dist/TaskListClient.js +11 -0
- package/dist/TaskListClient.js.map +1 -1
- package/dist/index.d.ts +9 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -10
- package/dist/index.js.map +1 -1
- package/dist/linear/LinearTaskListClient.d.ts +21 -0
- package/dist/linear/LinearTaskListClient.d.ts.map +1 -0
- package/dist/linear/LinearTaskListClient.js +184 -0
- package/dist/linear/LinearTaskListClient.js.map +1 -0
- package/dist/linear/index.d.ts +2 -0
- package/dist/linear/index.d.ts.map +1 -0
- package/dist/linear/index.js +6 -0
- package/dist/linear/index.js.map +1 -0
- package/dist/trello/TrelloTaskListClient.d.ts +4 -6
- package/dist/trello/TrelloTaskListClient.d.ts.map +1 -1
- package/dist/trello/TrelloTaskListClient.js +66 -43
- package/dist/trello/TrelloTaskListClient.js.map +1 -1
- package/dist/types.d.ts +31 -38
- package/dist/types.d.ts.map +1 -1
- package/package.json +4 -4
- package/dist/BoardState.d.ts +0 -36
- package/dist/BoardState.d.ts.map +0 -1
- package/dist/BoardState.js +0 -62
- package/dist/BoardState.js.map +0 -1
- package/dist/TaskList.d.ts +0 -20
- package/dist/TaskList.d.ts.map +0 -1
- package/dist/TaskList.js +0 -31
- package/dist/TaskList.js.map +0 -1
package/README.md
CHANGED
|
@@ -13,27 +13,25 @@ npm install @hardlydifficult/task-list
|
|
|
13
13
|
```typescript
|
|
14
14
|
import { createTaskListClient } from "@hardlydifficult/task-list";
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
// Trello
|
|
17
|
+
const trello = createTaskListClient({ type: "trello" });
|
|
17
18
|
|
|
18
|
-
//
|
|
19
|
-
const
|
|
19
|
+
// Linear
|
|
20
|
+
const linear = createTaskListClient({
|
|
21
|
+
type: "linear",
|
|
22
|
+
teamId: "team-uuid",
|
|
23
|
+
});
|
|
20
24
|
|
|
21
|
-
//
|
|
22
|
-
const
|
|
23
|
-
const label = state.findBoard("My Project").findLabel("Bug");
|
|
25
|
+
// Find a project and create a task
|
|
26
|
+
const project = await linear.findProject("Q1 Roadmap");
|
|
24
27
|
|
|
25
|
-
|
|
26
|
-
const task = await list.createTask("Fix login page", {
|
|
28
|
+
const task = await project.createTask("Fix login", {
|
|
27
29
|
description: "Users can't log in on mobile",
|
|
28
|
-
labels: [
|
|
30
|
+
labels: ["Bug"],
|
|
29
31
|
});
|
|
30
32
|
|
|
31
33
|
// Update a task
|
|
32
|
-
await task.update({
|
|
33
|
-
|
|
34
|
-
// Move to another list
|
|
35
|
-
const doneList = state.findBoard("My Project").findList("Done");
|
|
36
|
-
await task.update({ list: doneList });
|
|
34
|
+
await task.update({ status: "Done" });
|
|
37
35
|
```
|
|
38
36
|
|
|
39
37
|
## API
|
|
@@ -46,83 +44,93 @@ Factory function — returns a `TaskListClient` based on config type.
|
|
|
46
44
|
// Trello (uses TRELLO_API_KEY / TRELLO_API_TOKEN env vars by default)
|
|
47
45
|
const client = createTaskListClient({ type: "trello" });
|
|
48
46
|
|
|
49
|
-
//
|
|
47
|
+
// Trello with explicit credentials
|
|
50
48
|
const client = createTaskListClient({
|
|
51
49
|
type: "trello",
|
|
52
50
|
apiKey: "your-key",
|
|
53
51
|
token: "your-token",
|
|
54
52
|
});
|
|
53
|
+
|
|
54
|
+
// Linear (uses LINEAR_API_KEY env var by default)
|
|
55
|
+
const client = createTaskListClient({
|
|
56
|
+
type: "linear",
|
|
57
|
+
teamId: "team-uuid",
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
// Linear with explicit API key
|
|
61
|
+
const client = createTaskListClient({
|
|
62
|
+
type: "linear",
|
|
63
|
+
apiKey: "lin_xxx",
|
|
64
|
+
teamId: "team-uuid",
|
|
65
|
+
});
|
|
55
66
|
```
|
|
56
67
|
|
|
57
68
|
### `TaskListClient`
|
|
58
69
|
|
|
59
70
|
| Method | Returns | Description |
|
|
60
71
|
|--------|---------|-------------|
|
|
61
|
-
| `
|
|
62
|
-
| `
|
|
72
|
+
| `getProjects()` | `FullState` | All projects with statuses, tasks, and labels |
|
|
73
|
+
| `getProject(projectId)` | `Project` | Single project with statuses, tasks, and labels |
|
|
63
74
|
| `getTask(taskId)` | `Task` | Single task by ID |
|
|
75
|
+
| `findProject(name)` | `Project` | Find project by name (case-insensitive partial match) |
|
|
64
76
|
|
|
65
77
|
### `FullState`
|
|
66
78
|
|
|
79
|
+
| Property | Type | Description |
|
|
80
|
+
|----------|------|-------------|
|
|
81
|
+
| `projects` | `Project[]` | All projects |
|
|
82
|
+
|
|
67
83
|
| Method | Returns | Description |
|
|
68
84
|
|--------|---------|-------------|
|
|
69
|
-
| `
|
|
70
|
-
| `findTask(taskId)` | `Task` | Find task by ID across all
|
|
85
|
+
| `findProject(name)` | `Project` | Find by name (case-insensitive partial match) |
|
|
86
|
+
| `findTask(taskId)` | `Task` | Find task by ID across all projects |
|
|
71
87
|
|
|
72
|
-
### `
|
|
88
|
+
### `Project`
|
|
73
89
|
|
|
74
90
|
| Property | Type | Description |
|
|
75
91
|
|----------|------|-------------|
|
|
76
|
-
| `
|
|
77
|
-
| `
|
|
78
|
-
| `
|
|
79
|
-
| `
|
|
92
|
+
| `id` | `string` | Project identifier |
|
|
93
|
+
| `name` | `string` | Project name |
|
|
94
|
+
| `url` | `string` | Project URL |
|
|
95
|
+
| `statuses` | `string[]` | Available status names |
|
|
96
|
+
| `labels` | `string[]` | Available label names |
|
|
97
|
+
| `tasks` | `Task[]` | All tasks in the project |
|
|
80
98
|
|
|
81
99
|
| Method | Returns | Description |
|
|
82
100
|
|--------|---------|-------------|
|
|
83
|
-
| `
|
|
101
|
+
| `createTask(name, options?)` | `Task` | Create a task in this project |
|
|
84
102
|
| `findTask(taskId)` | `Task` | Find task by ID |
|
|
85
|
-
| `findLabel(name)` | `Label` | Find by name (case-insensitive partial match) |
|
|
86
103
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
| Method | Returns | Description |
|
|
90
|
-
|--------|---------|-------------|
|
|
91
|
-
| `createTask(name, options?)` | `Task` | Create a task in this list |
|
|
92
|
-
|
|
93
|
-
Options: `{ description?: string, labels?: Label[] }`
|
|
104
|
+
Options: `{ description?: string, status?: string, labels?: string[] }`
|
|
94
105
|
|
|
95
106
|
### `Task`
|
|
96
107
|
|
|
97
|
-
| Property | Type |
|
|
98
|
-
|
|
99
|
-
| `id` | `string` |
|
|
100
|
-
| `name` | `string` |
|
|
101
|
-
| `description` | `string` |
|
|
102
|
-
| `
|
|
103
|
-
| `
|
|
104
|
-
| `labels` | `
|
|
105
|
-
| `url` | `string` |
|
|
108
|
+
| Property | Type | Description |
|
|
109
|
+
|----------|------|-------------|
|
|
110
|
+
| `id` | `string` | Task identifier |
|
|
111
|
+
| `name` | `string` | Task name |
|
|
112
|
+
| `description` | `string` | Task description |
|
|
113
|
+
| `status` | `string` | Current status name |
|
|
114
|
+
| `projectId` | `string` | Parent project ID |
|
|
115
|
+
| `labels` | `string[]` | Label names |
|
|
116
|
+
| `url` | `string` | Task URL |
|
|
106
117
|
|
|
107
118
|
| Method | Returns | Description |
|
|
108
119
|
|--------|---------|-------------|
|
|
109
120
|
| `update(params)` | `Task` | Update and return new Task with server state |
|
|
110
121
|
|
|
111
|
-
Params: `{ name?: string, description?: string,
|
|
122
|
+
Params: `{ name?: string, description?: string, status?: string, labels?: string[] }`
|
|
112
123
|
|
|
113
|
-
##
|
|
124
|
+
## Concept Mapping
|
|
114
125
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
// After
|
|
122
|
-
const client = createTaskListClient({ type: "linear" });
|
|
123
|
-
```
|
|
126
|
+
| Abstraction | Trello | Linear |
|
|
127
|
+
|---|---|---|
|
|
128
|
+
| **Project** | Board | Project |
|
|
129
|
+
| Status | List | WorkflowState |
|
|
130
|
+
| **Task** | Card | Issue |
|
|
131
|
+
| Label | Label | IssueLabel |
|
|
124
132
|
|
|
125
133
|
## Supported Providers
|
|
126
134
|
|
|
127
135
|
- **Trello** — fully implemented
|
|
128
|
-
- **Linear** —
|
|
136
|
+
- **Linear** — fully implemented
|
package/dist/FullState.d.ts
CHANGED
|
@@ -1,32 +1,31 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Project } from "./Project.js";
|
|
2
2
|
import type { Task } from "./Task.js";
|
|
3
3
|
/**
|
|
4
|
-
* Full state across all
|
|
4
|
+
* Full state across all projects.
|
|
5
5
|
* Provides chainable finder methods that throw on not found.
|
|
6
6
|
*
|
|
7
7
|
* @example
|
|
8
8
|
* ```typescript
|
|
9
|
-
* const state = await client.
|
|
10
|
-
* const
|
|
11
|
-
* const task = await
|
|
9
|
+
* const state = await client.getProjects();
|
|
10
|
+
* const project = state.findProject("Alpha");
|
|
11
|
+
* const task = await project.createTask("New task");
|
|
12
12
|
* ```
|
|
13
13
|
*/
|
|
14
14
|
export declare class FullState {
|
|
15
|
-
readonly
|
|
16
|
-
constructor(
|
|
15
|
+
readonly projects: readonly Project[];
|
|
16
|
+
constructor(projects: readonly Project[]);
|
|
17
17
|
/**
|
|
18
|
-
* Find a
|
|
19
|
-
*
|
|
20
|
-
* @
|
|
21
|
-
* @
|
|
22
|
-
* @throws Error if no board matches
|
|
18
|
+
* Find a project by name (case-insensitive partial match).
|
|
19
|
+
* @param name - Partial project name to search for
|
|
20
|
+
* @returns The matching Project
|
|
21
|
+
* @throws Error if no project matches
|
|
23
22
|
*/
|
|
24
|
-
|
|
23
|
+
findProject(name: string): Project;
|
|
25
24
|
/**
|
|
26
|
-
* Find a task by ID across all
|
|
25
|
+
* Find a task by ID across all projects
|
|
27
26
|
* @param taskId - Task ID to find
|
|
28
27
|
* @returns The matching Task
|
|
29
|
-
* @throws Error if no task matches on any
|
|
28
|
+
* @throws Error if no task matches on any project
|
|
30
29
|
*/
|
|
31
30
|
findTask(taskId: string): Task;
|
|
32
31
|
}
|
package/dist/FullState.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FullState.d.ts","sourceRoot":"","sources":["../src/FullState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"FullState.d.ts","sourceRoot":"","sources":["../src/FullState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC;;;;;;;;;;GAUG;AACH,qBAAa,SAAS;IACpB,QAAQ,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;gBAE1B,QAAQ,EAAE,SAAS,OAAO,EAAE;IAIxC;;;;;OAKG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAWlC;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;CAS/B"}
|
package/dist/FullState.js
CHANGED
|
@@ -2,50 +2,49 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.FullState = void 0;
|
|
4
4
|
/**
|
|
5
|
-
* Full state across all
|
|
5
|
+
* Full state across all projects.
|
|
6
6
|
* Provides chainable finder methods that throw on not found.
|
|
7
7
|
*
|
|
8
8
|
* @example
|
|
9
9
|
* ```typescript
|
|
10
|
-
* const state = await client.
|
|
11
|
-
* const
|
|
12
|
-
* const task = await
|
|
10
|
+
* const state = await client.getProjects();
|
|
11
|
+
* const project = state.findProject("Alpha");
|
|
12
|
+
* const task = await project.createTask("New task");
|
|
13
13
|
* ```
|
|
14
14
|
*/
|
|
15
15
|
class FullState {
|
|
16
|
-
|
|
17
|
-
constructor(
|
|
18
|
-
this.
|
|
16
|
+
projects;
|
|
17
|
+
constructor(projects) {
|
|
18
|
+
this.projects = projects;
|
|
19
19
|
}
|
|
20
20
|
/**
|
|
21
|
-
* Find a
|
|
22
|
-
*
|
|
23
|
-
* @
|
|
24
|
-
* @
|
|
25
|
-
* @throws Error if no board matches
|
|
21
|
+
* Find a project by name (case-insensitive partial match).
|
|
22
|
+
* @param name - Partial project name to search for
|
|
23
|
+
* @returns The matching Project
|
|
24
|
+
* @throws Error if no project matches
|
|
26
25
|
*/
|
|
27
|
-
|
|
26
|
+
findProject(name) {
|
|
28
27
|
const lower = name.toLowerCase();
|
|
29
|
-
const
|
|
30
|
-
if (!
|
|
31
|
-
throw new Error(`
|
|
28
|
+
const project = this.projects.find((p) => p.name.toLowerCase().includes(lower));
|
|
29
|
+
if (!project) {
|
|
30
|
+
throw new Error(`Project "${name}" not found`);
|
|
32
31
|
}
|
|
33
|
-
return
|
|
32
|
+
return project;
|
|
34
33
|
}
|
|
35
34
|
/**
|
|
36
|
-
* Find a task by ID across all
|
|
35
|
+
* Find a task by ID across all projects
|
|
37
36
|
* @param taskId - Task ID to find
|
|
38
37
|
* @returns The matching Task
|
|
39
|
-
* @throws Error if no task matches on any
|
|
38
|
+
* @throws Error if no task matches on any project
|
|
40
39
|
*/
|
|
41
40
|
findTask(taskId) {
|
|
42
|
-
for (const
|
|
43
|
-
const task =
|
|
41
|
+
for (const project of this.projects) {
|
|
42
|
+
const task = project.tasks.find((t) => t.id === taskId);
|
|
44
43
|
if (task) {
|
|
45
44
|
return task;
|
|
46
45
|
}
|
|
47
46
|
}
|
|
48
|
-
throw new Error(`Task "${taskId}" not found
|
|
47
|
+
throw new Error(`Task "${taskId}" not found in any project`);
|
|
49
48
|
}
|
|
50
49
|
}
|
|
51
50
|
exports.FullState = FullState;
|
package/dist/FullState.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FullState.js","sourceRoot":"","sources":["../src/FullState.ts"],"names":[],"mappings":";;;AAGA;;;;;;;;;;GAUG;AACH,MAAa,SAAS;IACX,
|
|
1
|
+
{"version":3,"file":"FullState.js","sourceRoot":"","sources":["../src/FullState.ts"],"names":[],"mappings":";;;AAGA;;;;;;;;;;GAUG;AACH,MAAa,SAAS;IACX,QAAQ,CAAqB;IAEtC,YAAY,QAA4B;QACtC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED;;;;;OAKG;IACH,WAAW,CAAC,IAAY;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CACvC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CACrC,CAAC;QACF,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,aAAa,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;;OAKG;IACH,QAAQ,CAAC,MAAc;QACrB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;YACxD,IAAI,IAAI,EAAE,CAAC;gBACT,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,SAAS,MAAM,4BAA4B,CAAC,CAAC;IAC/D,CAAC;CACF;AAvCD,8BAuCC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Task } from "./Task.js";
|
|
2
|
+
import type { CreateTaskOptions, TaskContext } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* A project (Trello Board, Linear Project) with task creation capability.
|
|
5
|
+
* Statuses and labels are exposed as human-readable name arrays.
|
|
6
|
+
*/
|
|
7
|
+
export declare class Project {
|
|
8
|
+
readonly id: string;
|
|
9
|
+
readonly name: string;
|
|
10
|
+
readonly url: string;
|
|
11
|
+
readonly statuses: readonly string[];
|
|
12
|
+
readonly labels: readonly string[];
|
|
13
|
+
readonly tasks: readonly Task[];
|
|
14
|
+
private readonly context;
|
|
15
|
+
private readonly defaultStatusId;
|
|
16
|
+
constructor(info: {
|
|
17
|
+
id: string;
|
|
18
|
+
name: string;
|
|
19
|
+
url: string;
|
|
20
|
+
}, statusEntries: readonly {
|
|
21
|
+
id: string;
|
|
22
|
+
name: string;
|
|
23
|
+
}[], tasks: readonly Task[], labelEntries: readonly {
|
|
24
|
+
id: string;
|
|
25
|
+
name: string;
|
|
26
|
+
}[], context: TaskContext);
|
|
27
|
+
/**
|
|
28
|
+
* Create a new task in this project.
|
|
29
|
+
* @param name - Task name/title
|
|
30
|
+
* @param options - Optional description, labels (by name), and status (by name)
|
|
31
|
+
* @returns The created Task
|
|
32
|
+
*/
|
|
33
|
+
createTask(name: string, options?: CreateTaskOptions): Promise<Task>;
|
|
34
|
+
/**
|
|
35
|
+
* Find a task by ID
|
|
36
|
+
* @param taskId - Task ID to find
|
|
37
|
+
* @returns The matching Task
|
|
38
|
+
* @throws Error if no task matches
|
|
39
|
+
*/
|
|
40
|
+
findTask(taskId: string): Task;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=Project.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Project.d.ts","sourceRoot":"","sources":["../src/Project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEjE;;;GAGG;AACH,qBAAa,OAAO;IAClB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;IAEhC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;IACtC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;gBAGvC,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,EAC/C,aAAa,EAAE,SAAS;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,EACtD,KAAK,EAAE,SAAS,IAAI,EAAE,EACtB,YAAY,EAAE,SAAS;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,EACrD,OAAO,EAAE,WAAW;IAYtB;;;;;OAKG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB1E;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;CAO/B"}
|
package/dist/Project.js
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Project = void 0;
|
|
4
|
+
const Task_js_1 = require("./Task.js");
|
|
5
|
+
/**
|
|
6
|
+
* A project (Trello Board, Linear Project) with task creation capability.
|
|
7
|
+
* Statuses and labels are exposed as human-readable name arrays.
|
|
8
|
+
*/
|
|
9
|
+
class Project {
|
|
10
|
+
id;
|
|
11
|
+
name;
|
|
12
|
+
url;
|
|
13
|
+
statuses;
|
|
14
|
+
labels;
|
|
15
|
+
tasks;
|
|
16
|
+
context;
|
|
17
|
+
defaultStatusId;
|
|
18
|
+
constructor(info, statusEntries, tasks, labelEntries, context) {
|
|
19
|
+
this.id = info.id;
|
|
20
|
+
this.name = info.name;
|
|
21
|
+
this.url = info.url;
|
|
22
|
+
this.statuses = statusEntries.map((s) => s.name);
|
|
23
|
+
this.labels = labelEntries.map((l) => l.name);
|
|
24
|
+
this.tasks = tasks;
|
|
25
|
+
this.context = context;
|
|
26
|
+
this.defaultStatusId = statusEntries[0]?.id ?? "";
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Create a new task in this project.
|
|
30
|
+
* @param name - Task name/title
|
|
31
|
+
* @param options - Optional description, labels (by name), and status (by name)
|
|
32
|
+
* @returns The created Task
|
|
33
|
+
*/
|
|
34
|
+
async createTask(name, options) {
|
|
35
|
+
const statusId = options?.status !== undefined && options.status !== ""
|
|
36
|
+
? this.context.resolveStatusId(options.status)
|
|
37
|
+
: this.defaultStatusId;
|
|
38
|
+
const labelIds = options?.labels
|
|
39
|
+
? options.labels.map((n) => this.context.resolveLabelId(n))
|
|
40
|
+
: undefined;
|
|
41
|
+
const data = await this.context.createTask({
|
|
42
|
+
statusId,
|
|
43
|
+
projectId: this.id,
|
|
44
|
+
name,
|
|
45
|
+
description: options?.description,
|
|
46
|
+
labelIds,
|
|
47
|
+
});
|
|
48
|
+
return new Task_js_1.Task(data, this.context);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Find a task by ID
|
|
52
|
+
* @param taskId - Task ID to find
|
|
53
|
+
* @returns The matching Task
|
|
54
|
+
* @throws Error if no task matches
|
|
55
|
+
*/
|
|
56
|
+
findTask(taskId) {
|
|
57
|
+
const task = this.tasks.find((t) => t.id === taskId);
|
|
58
|
+
if (!task) {
|
|
59
|
+
throw new Error(`Task "${taskId}" not found in project "${this.name}"`);
|
|
60
|
+
}
|
|
61
|
+
return task;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
exports.Project = Project;
|
|
65
|
+
//# sourceMappingURL=Project.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Project.js","sourceRoot":"","sources":["../src/Project.ts"],"names":[],"mappings":";;;AAAA,uCAAiC;AAGjC;;;GAGG;AACH,MAAa,OAAO;IACT,EAAE,CAAS;IACX,IAAI,CAAS;IACb,GAAG,CAAS;IACZ,QAAQ,CAAoB;IAC5B,MAAM,CAAoB;IAC1B,KAAK,CAAkB;IAEf,OAAO,CAAc;IACrB,eAAe,CAAS;IAEzC,YACE,IAA+C,EAC/C,aAAsD,EACtD,KAAsB,EACtB,YAAqD,EACrD,OAAoB;QAEpB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACpB,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,eAAe,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC;IACpD,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,UAAU,CAAC,IAAY,EAAE,OAA2B;QACxD,MAAM,QAAQ,GACZ,OAAO,EAAE,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,EAAE;YACpD,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC;YAC9C,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC;QAE3B,MAAM,QAAQ,GAAG,OAAO,EAAE,MAAM;YAC9B,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;YAC3D,CAAC,CAAC,SAAS,CAAC;QAEd,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;YACzC,QAAQ;YACR,SAAS,EAAE,IAAI,CAAC,EAAE;YAClB,IAAI;YACJ,WAAW,EAAE,OAAO,EAAE,WAAW;YACjC,QAAQ;SACT,CAAC,CAAC;QACH,OAAO,IAAI,cAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IAED;;;;;OAKG;IACH,QAAQ,CAAC,MAAc;QACrB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;QACrD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,SAAS,MAAM,2BAA2B,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAnED,0BAmEC"}
|
package/dist/Task.d.ts
CHANGED
|
@@ -1,20 +1,21 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { TaskContext, TaskData, UpdateTaskParams } from "./types.js";
|
|
2
2
|
/**
|
|
3
|
-
* A task (Trello Card, Linear Issue) with update capability
|
|
3
|
+
* A task (Trello Card, Linear Issue) with update capability.
|
|
4
|
+
* Status and labels are exposed as human-readable names.
|
|
4
5
|
*/
|
|
5
6
|
export declare class Task {
|
|
6
7
|
readonly id: string;
|
|
7
8
|
readonly name: string;
|
|
8
9
|
readonly description: string;
|
|
9
|
-
readonly
|
|
10
|
-
readonly
|
|
11
|
-
readonly labels: readonly
|
|
10
|
+
readonly status: string;
|
|
11
|
+
readonly projectId: string;
|
|
12
|
+
readonly labels: readonly string[];
|
|
12
13
|
readonly url: string;
|
|
13
|
-
private readonly
|
|
14
|
-
constructor(data: TaskData,
|
|
14
|
+
private readonly context;
|
|
15
|
+
constructor(data: TaskData, context: TaskContext);
|
|
15
16
|
/**
|
|
16
17
|
* Update this task. Returns a new Task with the updated data.
|
|
17
|
-
* @param params - Fields to update
|
|
18
|
+
* @param params - Fields to update. Status and labels are referenced by name.
|
|
18
19
|
* @returns New Task reflecting the server state after update
|
|
19
20
|
*/
|
|
20
21
|
update(params: UpdateTaskParams): Promise<Task>;
|
package/dist/Task.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Task.d.ts","sourceRoot":"","sources":["../src/Task.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"Task.d.ts","sourceRoot":"","sources":["../src/Task.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE1E;;;GAGG;AACH,qBAAa,IAAI;IACf,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAErB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;gBAE1B,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW;IAWhD;;;;OAIG;IACG,MAAM,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;CAetD"}
|
package/dist/Task.js
CHANGED
|
@@ -2,35 +2,46 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Task = void 0;
|
|
4
4
|
/**
|
|
5
|
-
* A task (Trello Card, Linear Issue) with update capability
|
|
5
|
+
* A task (Trello Card, Linear Issue) with update capability.
|
|
6
|
+
* Status and labels are exposed as human-readable names.
|
|
6
7
|
*/
|
|
7
8
|
class Task {
|
|
8
9
|
id;
|
|
9
10
|
name;
|
|
10
11
|
description;
|
|
11
|
-
|
|
12
|
-
|
|
12
|
+
status;
|
|
13
|
+
projectId;
|
|
13
14
|
labels;
|
|
14
15
|
url;
|
|
15
|
-
|
|
16
|
-
constructor(data,
|
|
16
|
+
context;
|
|
17
|
+
constructor(data, context) {
|
|
17
18
|
this.id = data.id;
|
|
18
19
|
this.name = data.name;
|
|
19
20
|
this.description = data.description;
|
|
20
|
-
this.
|
|
21
|
-
this.
|
|
22
|
-
this.labels = data.labels;
|
|
21
|
+
this.status = context.resolveStatusName(data.statusId);
|
|
22
|
+
this.projectId = data.projectId;
|
|
23
|
+
this.labels = data.labels.map((l) => l.name);
|
|
23
24
|
this.url = data.url;
|
|
24
|
-
this.
|
|
25
|
+
this.context = context;
|
|
25
26
|
}
|
|
26
27
|
/**
|
|
27
28
|
* Update this task. Returns a new Task with the updated data.
|
|
28
|
-
* @param params - Fields to update
|
|
29
|
+
* @param params - Fields to update. Status and labels are referenced by name.
|
|
29
30
|
* @returns New Task reflecting the server state after update
|
|
30
31
|
*/
|
|
31
32
|
async update(params) {
|
|
32
|
-
const data = await this.
|
|
33
|
-
|
|
33
|
+
const data = await this.context.updateTask({
|
|
34
|
+
taskId: this.id,
|
|
35
|
+
name: params.name,
|
|
36
|
+
description: params.description,
|
|
37
|
+
statusId: params.status !== undefined && params.status !== ""
|
|
38
|
+
? this.context.resolveStatusId(params.status)
|
|
39
|
+
: undefined,
|
|
40
|
+
labelIds: params.labels
|
|
41
|
+
? params.labels.map((n) => this.context.resolveLabelId(n))
|
|
42
|
+
: undefined,
|
|
43
|
+
});
|
|
44
|
+
return new Task(data, this.context);
|
|
34
45
|
}
|
|
35
46
|
}
|
|
36
47
|
exports.Task = Task;
|
package/dist/Task.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Task.js","sourceRoot":"","sources":["../src/Task.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"Task.js","sourceRoot":"","sources":["../src/Task.ts"],"names":[],"mappings":";;;AAEA;;;GAGG;AACH,MAAa,IAAI;IACN,EAAE,CAAS;IACX,IAAI,CAAS;IACb,WAAW,CAAS;IACpB,MAAM,CAAS;IACf,SAAS,CAAS;IAClB,MAAM,CAAoB;IAC1B,GAAG,CAAS;IAEJ,OAAO,CAAc;IAEtC,YAAY,IAAc,EAAE,OAAoB;QAC9C,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACpB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,MAAM,CAAC,MAAwB;QACnC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;YACzC,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,QAAQ,EACN,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,EAAE;gBACjD,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC;gBAC7C,CAAC,CAAC,SAAS;YACf,QAAQ,EAAE,MAAM,CAAC,MAAM;gBACrB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;gBAC1D,CAAC,CAAC,SAAS;SACd,CAAC,CAAC;QACH,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;CACF;AA1CD,oBA0CC"}
|
package/dist/TaskListClient.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { BoardState } from "./BoardState.js";
|
|
2
1
|
import type { FullState } from "./FullState.js";
|
|
2
|
+
import type { Project } from "./Project.js";
|
|
3
3
|
import type { Task } from "./Task.js";
|
|
4
4
|
import type { TaskListConfig } from "./types.js";
|
|
5
5
|
/**
|
|
@@ -10,21 +10,29 @@ export declare abstract class TaskListClient {
|
|
|
10
10
|
protected readonly config: TaskListConfig;
|
|
11
11
|
constructor(config: TaskListConfig);
|
|
12
12
|
/**
|
|
13
|
-
* Get
|
|
13
|
+
* Get all projects with full state (statuses, tasks, labels)
|
|
14
14
|
* @returns FullState with chainable finders
|
|
15
15
|
*/
|
|
16
|
-
abstract
|
|
16
|
+
abstract getProjects(): Promise<FullState>;
|
|
17
17
|
/**
|
|
18
|
-
* Get
|
|
19
|
-
* @param
|
|
20
|
-
* @returns
|
|
18
|
+
* Get a single project with full state
|
|
19
|
+
* @param projectId - Project identifier
|
|
20
|
+
* @returns Project with task creation and lookup
|
|
21
21
|
*/
|
|
22
|
-
abstract
|
|
22
|
+
abstract getProject(projectId: string): Promise<Project>;
|
|
23
23
|
/**
|
|
24
24
|
* Get a single task by ID
|
|
25
25
|
* @param taskId - Task identifier
|
|
26
26
|
* @returns Task with update capability
|
|
27
27
|
*/
|
|
28
28
|
abstract getTask(taskId: string): Promise<Task>;
|
|
29
|
+
/**
|
|
30
|
+
* Find a project by name (case-insensitive partial match).
|
|
31
|
+
* Convenience method that fetches all projects then finds by name.
|
|
32
|
+
* @param name - Partial project name to search for
|
|
33
|
+
* @returns The matching Project
|
|
34
|
+
* @throws Error if no project matches
|
|
35
|
+
*/
|
|
36
|
+
findProject(name: string): Promise<Project>;
|
|
29
37
|
}
|
|
30
38
|
//# sourceMappingURL=TaskListClient.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaskListClient.d.ts","sourceRoot":"","sources":["../src/TaskListClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"TaskListClient.d.ts","sourceRoot":"","sources":["../src/TaskListClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD;;;GAGG;AACH,8BAAsB,cAAc;IACtB,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,cAAc;gBAAtB,MAAM,EAAE,cAAc;IAErD;;;OAGG;IACH,QAAQ,CAAC,WAAW,IAAI,OAAO,CAAC,SAAS,CAAC;IAE1C;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAExD;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAE/C;;;;;;OAMG;IACG,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAIlD"}
|
package/dist/TaskListClient.js
CHANGED
|
@@ -10,6 +10,17 @@ class TaskListClient {
|
|
|
10
10
|
constructor(config) {
|
|
11
11
|
this.config = config;
|
|
12
12
|
}
|
|
13
|
+
/**
|
|
14
|
+
* Find a project by name (case-insensitive partial match).
|
|
15
|
+
* Convenience method that fetches all projects then finds by name.
|
|
16
|
+
* @param name - Partial project name to search for
|
|
17
|
+
* @returns The matching Project
|
|
18
|
+
* @throws Error if no project matches
|
|
19
|
+
*/
|
|
20
|
+
async findProject(name) {
|
|
21
|
+
const state = await this.getProjects();
|
|
22
|
+
return state.findProject(name);
|
|
23
|
+
}
|
|
13
24
|
}
|
|
14
25
|
exports.TaskListClient = TaskListClient;
|
|
15
26
|
//# sourceMappingURL=TaskListClient.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaskListClient.js","sourceRoot":"","sources":["../src/TaskListClient.ts"],"names":[],"mappings":";;;AAKA;;;GAGG;AACH,MAAsB,cAAc;IACH;IAA/B,YAA+B,MAAsB;QAAtB,WAAM,GAAN,MAAM,CAAgB;IAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"TaskListClient.js","sourceRoot":"","sources":["../src/TaskListClient.ts"],"names":[],"mappings":";;;AAKA;;;GAGG;AACH,MAAsB,cAAc;IACH;IAA/B,YAA+B,MAAsB;QAAtB,WAAM,GAAN,MAAM,CAAgB;IAAG,CAAC;IAsBzD;;;;;;OAMG;IACH,KAAK,CAAC,WAAW,CAAC,IAAY;QAC5B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACvC,OAAO,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;CACF;AAlCD,wCAkCC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
export { type
|
|
1
|
+
export { type CreateTaskOptions, type UpdateTaskParams, type TrelloConfig, type LinearConfig, type TaskListConfig, type Provider, } from "./types.js";
|
|
2
2
|
export { TaskListClient } from "./TaskListClient.js";
|
|
3
3
|
export { Task } from "./Task.js";
|
|
4
|
-
export {
|
|
5
|
-
export { BoardState } from "./BoardState.js";
|
|
4
|
+
export { Project } from "./Project.js";
|
|
6
5
|
export { FullState } from "./FullState.js";
|
|
7
6
|
export { TrelloTaskListClient } from "./trello";
|
|
7
|
+
export { LinearTaskListClient } from "./linear";
|
|
8
8
|
import type { TaskListClient } from "./TaskListClient.js";
|
|
9
9
|
import type { TaskListConfig } from "./types.js";
|
|
10
10
|
/**
|
|
@@ -15,11 +15,13 @@ import type { TaskListConfig } from "./types.js";
|
|
|
15
15
|
* // Trello (uses env vars by default)
|
|
16
16
|
* const client = createTaskListClient({ type: 'trello' });
|
|
17
17
|
*
|
|
18
|
+
* // Linear (team-scoped)
|
|
19
|
+
* const client = createTaskListClient({ type: 'linear', teamId: 'team-uuid' });
|
|
20
|
+
*
|
|
18
21
|
* // Usage
|
|
19
|
-
* const
|
|
20
|
-
* const
|
|
21
|
-
*
|
|
22
|
-
* await task.update({ name: "Updated task" });
|
|
22
|
+
* const project = await client.findProject("My Project");
|
|
23
|
+
* const task = await project.createTask("New task");
|
|
24
|
+
* await task.update({ status: "done" });
|
|
23
25
|
* ```
|
|
24
26
|
*/
|
|
25
27
|
export declare function createTaskListClient(config: TaskListConfig): TaskListClient;
|