@doist/todoist-api-typescript 4.0.0-alpha.1 → 4.0.0-alpha.3

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.
@@ -1,98 +1,117 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.User = exports.Comment = exports.Attachment = exports.Label = exports.Section = exports.Project = exports.Task = exports.Deadline = exports.Duration = exports.DueDate = exports.Int = void 0;
4
- var runtypes_1 = require("runtypes");
5
- exports.Int = runtypes_1.Number.withConstraint(function (n) { return Number.isInteger(n) || "".concat(n, " is not a valid entity id. Should be a string"); });
6
- exports.DueDate = (0, runtypes_1.Record)({
7
- isRecurring: runtypes_1.Boolean,
8
- string: runtypes_1.String,
9
- date: runtypes_1.String,
10
- }).And((0, runtypes_1.Partial)({
11
- datetime: runtypes_1.String.Or(runtypes_1.Null),
12
- timezone: runtypes_1.String.Or(runtypes_1.Null),
13
- lang: runtypes_1.String.Or(runtypes_1.Null),
14
- }));
15
- exports.Duration = (0, runtypes_1.Record)({
16
- amount: runtypes_1.Number.withConstraint(function (n) { return n > 0 || 'Value should be greater than zero'; }),
17
- unit: (0, runtypes_1.Union)((0, runtypes_1.Literal)('minute'), (0, runtypes_1.Literal)('day')),
3
+ exports.ColorSchema = exports.UserSchema = exports.CommentSchema = exports.AttachmentSchema = exports.LabelSchema = exports.SectionSchema = exports.ProjectSchema = exports.TaskSchema = exports.DeadlineSchema = exports.DurationSchema = exports.DueDateSchema = void 0;
4
+ var zod_1 = require("zod");
5
+ exports.DueDateSchema = zod_1.z
6
+ .object({
7
+ isRecurring: zod_1.z.boolean(),
8
+ string: zod_1.z.string(),
9
+ date: zod_1.z.string(),
10
+ })
11
+ .extend({
12
+ datetime: zod_1.z.string().nullable().optional(),
13
+ timezone: zod_1.z.string().nullable().optional(),
14
+ lang: zod_1.z.string().nullable().optional(),
18
15
  });
19
- exports.Deadline = (0, runtypes_1.Record)({
20
- date: runtypes_1.String,
21
- lang: runtypes_1.String,
16
+ exports.DurationSchema = zod_1.z.object({
17
+ amount: zod_1.z.number().positive('Value should be greater than zero'),
18
+ unit: zod_1.z.enum(['minute', 'day']),
22
19
  });
23
- exports.Task = (0, runtypes_1.Record)({
24
- id: runtypes_1.String,
25
- assignerId: runtypes_1.String.Or(runtypes_1.Null),
26
- assigneeId: runtypes_1.String.Or(runtypes_1.Null),
27
- projectId: runtypes_1.String,
28
- sectionId: runtypes_1.String.Or(runtypes_1.Null),
29
- parentId: runtypes_1.String.Or(runtypes_1.Null),
30
- order: exports.Int,
31
- content: runtypes_1.String,
32
- description: runtypes_1.String,
33
- isCompleted: runtypes_1.Boolean,
34
- labels: (0, runtypes_1.Array)(runtypes_1.String),
35
- priority: exports.Int,
36
- commentCount: exports.Int,
37
- creatorId: runtypes_1.String,
38
- createdAt: runtypes_1.String,
39
- due: exports.DueDate.Or(runtypes_1.Null),
40
- url: runtypes_1.String,
41
- duration: exports.Duration.Or(runtypes_1.Null),
42
- deadline: exports.Deadline.Or(runtypes_1.Null),
20
+ exports.DeadlineSchema = zod_1.z.object({
21
+ date: zod_1.z.string(),
22
+ lang: zod_1.z.string(),
43
23
  });
44
- exports.Project = (0, runtypes_1.Record)({
45
- id: runtypes_1.String,
46
- parentId: runtypes_1.String.Or(runtypes_1.Null),
47
- order: exports.Int.Or(runtypes_1.Null),
48
- color: runtypes_1.String,
49
- name: runtypes_1.String,
50
- commentCount: exports.Int,
51
- isShared: runtypes_1.Boolean,
52
- isFavorite: runtypes_1.Boolean,
53
- isInboxProject: runtypes_1.Boolean,
54
- isTeamInbox: runtypes_1.Boolean,
55
- url: runtypes_1.String,
56
- viewStyle: runtypes_1.String,
24
+ exports.TaskSchema = zod_1.z.object({
25
+ id: zod_1.z.string(),
26
+ assignerId: zod_1.z.string().nullable(),
27
+ assigneeId: zod_1.z.string().nullable(),
28
+ projectId: zod_1.z.string(),
29
+ sectionId: zod_1.z.string().nullable(),
30
+ parentId: zod_1.z.string().nullable(),
31
+ order: zod_1.z.number().int(),
32
+ content: zod_1.z.string(),
33
+ description: zod_1.z.string(),
34
+ isCompleted: zod_1.z.boolean(),
35
+ labels: zod_1.z.array(zod_1.z.string()),
36
+ priority: zod_1.z.number().int(),
37
+ commentCount: zod_1.z.number().int(),
38
+ creatorId: zod_1.z.string(),
39
+ createdAt: zod_1.z.string(),
40
+ due: exports.DueDateSchema.nullable(),
41
+ url: zod_1.z.string(),
42
+ duration: exports.DurationSchema.nullable(),
43
+ deadline: exports.DeadlineSchema.nullable(),
57
44
  });
58
- exports.Section = (0, runtypes_1.Record)({
59
- id: runtypes_1.String,
60
- order: exports.Int,
61
- name: runtypes_1.String,
62
- projectId: runtypes_1.String,
45
+ exports.ProjectSchema = zod_1.z.object({
46
+ id: zod_1.z.string(),
47
+ parentId: zod_1.z.string().nullable(),
48
+ order: zod_1.z.number().int().nullable(),
49
+ color: zod_1.z.string(),
50
+ name: zod_1.z.string(),
51
+ commentCount: zod_1.z.number().int(),
52
+ isShared: zod_1.z.boolean(),
53
+ isFavorite: zod_1.z.boolean(),
54
+ isInboxProject: zod_1.z.boolean(),
55
+ isTeamInbox: zod_1.z.boolean(),
56
+ url: zod_1.z.string(),
57
+ viewStyle: zod_1.z.string(),
63
58
  });
64
- exports.Label = (0, runtypes_1.Record)({
65
- id: runtypes_1.String,
66
- order: exports.Int.Or(runtypes_1.Null),
67
- name: runtypes_1.String,
68
- color: runtypes_1.String,
69
- isFavorite: runtypes_1.Boolean,
59
+ exports.SectionSchema = zod_1.z.object({
60
+ id: zod_1.z.string(),
61
+ order: zod_1.z.number().int(),
62
+ name: zod_1.z.string(),
63
+ projectId: zod_1.z.string(),
70
64
  });
71
- exports.Attachment = (0, runtypes_1.Record)({
72
- resourceType: runtypes_1.String,
73
- }).And((0, runtypes_1.Partial)({
74
- fileName: runtypes_1.String.Or(runtypes_1.Null),
75
- fileSize: exports.Int.Or(runtypes_1.Null),
76
- fileType: runtypes_1.String.Or(runtypes_1.Null),
77
- fileUrl: runtypes_1.String.Or(runtypes_1.Null),
78
- fileDuration: exports.Int.Or(runtypes_1.Null),
79
- uploadState: (0, runtypes_1.Union)((0, runtypes_1.Literal)('pending'), (0, runtypes_1.Literal)('completed')).Or(runtypes_1.Null),
80
- image: runtypes_1.String.Or(runtypes_1.Null),
81
- imageWidth: exports.Int.Or(runtypes_1.Null),
82
- imageHeight: exports.Int.Or(runtypes_1.Null),
83
- url: runtypes_1.String.Or(runtypes_1.Null),
84
- title: runtypes_1.String.Or(runtypes_1.Null),
85
- }));
86
- exports.Comment = (0, runtypes_1.Record)({
87
- id: runtypes_1.String,
88
- taskId: runtypes_1.String.Or(runtypes_1.Null),
89
- projectId: runtypes_1.String.Or(runtypes_1.Null),
90
- content: runtypes_1.String,
91
- postedAt: runtypes_1.String,
92
- attachment: exports.Attachment.Or(runtypes_1.Null),
65
+ exports.LabelSchema = zod_1.z.object({
66
+ id: zod_1.z.string(),
67
+ order: zod_1.z.number().int().nullable(),
68
+ name: zod_1.z.string(),
69
+ color: zod_1.z.string(),
70
+ isFavorite: zod_1.z.boolean(),
93
71
  });
94
- exports.User = (0, runtypes_1.Record)({
95
- id: runtypes_1.String,
96
- name: runtypes_1.String,
97
- email: runtypes_1.String,
72
+ exports.AttachmentSchema = zod_1.z
73
+ .object({
74
+ resourceType: zod_1.z.string(),
75
+ })
76
+ .extend({
77
+ fileName: zod_1.z.string().nullable().optional(),
78
+ fileSize: zod_1.z.number().int().nullable().optional(),
79
+ fileType: zod_1.z.string().nullable().optional(),
80
+ fileUrl: zod_1.z.string().nullable().optional(),
81
+ fileDuration: zod_1.z.number().int().nullable().optional(),
82
+ uploadState: zod_1.z.enum(['pending', 'completed']).nullable().optional(),
83
+ image: zod_1.z.string().nullable().optional(),
84
+ imageWidth: zod_1.z.number().int().nullable().optional(),
85
+ imageHeight: zod_1.z.number().int().nullable().optional(),
86
+ url: zod_1.z.string().nullable().optional(),
87
+ title: zod_1.z.string().nullable().optional(),
88
+ });
89
+ exports.CommentSchema = zod_1.z.object({
90
+ id: zod_1.z.string(),
91
+ taskId: zod_1.z.string().nullable(),
92
+ projectId: zod_1.z.string().nullable(),
93
+ content: zod_1.z.string(),
94
+ postedAt: zod_1.z.string(),
95
+ attachment: exports.AttachmentSchema.nullable(),
96
+ });
97
+ exports.UserSchema = zod_1.z.object({
98
+ id: zod_1.z.string(),
99
+ name: zod_1.z.string(),
100
+ email: zod_1.z.string(),
101
+ });
102
+ exports.ColorSchema = zod_1.z.object({
103
+ /** @deprecated No longer used */
104
+ id: zod_1.z.number(),
105
+ /** The key of the color (i.e. 'berry_red') */
106
+ key: zod_1.z.string(),
107
+ /** The display name of the color (i.e. 'Berry Red') */
108
+ displayName: zod_1.z.string(),
109
+ /** @deprecated Use {@link Color.displayName} instead */
110
+ name: zod_1.z.string(),
111
+ /** The hex value of the color (i.e. '#b8255f') */
112
+ hexValue: zod_1.z.string(),
113
+ /**
114
+ * @deprecated Use {@link Color.hexValue} instead
115
+ */
116
+ value: zod_1.z.string(),
98
117
  });
@@ -1,5 +1,8 @@
1
1
  import type { RequireAllOrNone, RequireOneOrNone, RequireExactlyOne } from 'type-fest';
2
- import type { Duration, ProjectViewStyle } from './entities';
2
+ import type { Comment, Deadline, DueDate, Duration, Label, Project, ProjectViewStyle, Section, Task, User } from './entities';
3
+ /**
4
+ * @see https://developer.todoist.com/rest/v2/#create-a-new-task
5
+ */
3
6
  export type AddTaskArgs = {
4
7
  content: string;
5
8
  description?: string;
@@ -21,13 +24,9 @@ export type AddTaskArgs = {
21
24
  duration?: Duration['amount'];
22
25
  durationUnit?: Duration['unit'];
23
26
  }>;
24
- export type QuickAddTaskArgs = {
25
- text: string;
26
- note?: string;
27
- reminder?: string;
28
- autoReminder?: boolean;
29
- meta?: boolean;
30
- };
27
+ /**
28
+ * @see https://developer.todoist.com/rest/v2/#tasks
29
+ */
31
30
  export type GetTasksArgs = {
32
31
  projectId?: string;
33
32
  sectionId?: string;
@@ -38,6 +37,16 @@ export type GetTasksArgs = {
38
37
  cursor?: string | null;
39
38
  limit?: number;
40
39
  };
40
+ /**
41
+ * @see https://developer.todoist.com/rest/v2/#tasks
42
+ */
43
+ export type GetTasksResponse = {
44
+ results: Task[];
45
+ nextCursor: string | null;
46
+ };
47
+ /**
48
+ * @see https://developer.todoist.com/rest/v2/#update-a-task
49
+ */
41
50
  export type UpdateTaskArgs = {
42
51
  content?: string;
43
52
  description?: string;
@@ -55,10 +64,67 @@ export type UpdateTaskArgs = {
55
64
  duration?: Duration['amount'];
56
65
  durationUnit?: Duration['unit'];
57
66
  }>;
67
+ /**
68
+ * @see https://developer.todoist.com/rest/v2/#quick-add-task
69
+ */
70
+ export type QuickAddTaskArgs = {
71
+ text: string;
72
+ note?: string;
73
+ reminder?: string;
74
+ autoReminder?: boolean;
75
+ meta?: boolean;
76
+ };
77
+ /**
78
+ * @see https://developer.todoist.com/rest/v2/#quick-add-task
79
+ */
80
+ export type SyncTask = {
81
+ id: string;
82
+ projectId: string;
83
+ content: string;
84
+ description: string;
85
+ priority: number;
86
+ sectionId: string | null;
87
+ parentId: string | null;
88
+ childOrder: number;
89
+ labels: string[];
90
+ assignedByUid: string | null;
91
+ responsibleUid: string | null;
92
+ checked: boolean;
93
+ addedAt: string;
94
+ addedByUid: string | null;
95
+ duration: Duration | null;
96
+ due: DueDate | null;
97
+ deadline: Deadline | null;
98
+ };
99
+ /**
100
+ * @see https://developer.todoist.com/rest/v2/#quick-add-task
101
+ */
102
+ export type QuickAddTaskResponse = SyncTask;
103
+ /**
104
+ * @see https://developer.todoist.com/sync/v9/#move-an-item
105
+ */
106
+ export type MoveTaskArgs = RequireExactlyOne<{
107
+ projectId?: string;
108
+ sectionId?: string;
109
+ parentId?: string;
110
+ }>;
111
+ /**
112
+ * @see https://developer.todoist.com/rest/v2/#get-all-projects
113
+ */
58
114
  export type GetProjectsArgs = {
59
115
  cursor?: string | null;
60
116
  limit?: number;
61
117
  };
118
+ /**
119
+ * @see https://developer.todoist.com/rest/v2/#get-all-projects
120
+ */
121
+ export type GetProjectsResponse = {
122
+ results: Project[];
123
+ nextCursor: string | null;
124
+ };
125
+ /**
126
+ * @see https://developer.todoist.com/rest/v2/#create-a-new-project
127
+ */
62
128
  export type AddProjectArgs = {
63
129
  name: string;
64
130
  parentId?: string;
@@ -66,57 +132,146 @@ export type AddProjectArgs = {
66
132
  isFavorite?: boolean;
67
133
  viewStyle?: ProjectViewStyle;
68
134
  };
135
+ /**
136
+ * @see https://developer.todoist.com/rest/v2/#update-a-project
137
+ */
69
138
  export type UpdateProjectArgs = {
70
139
  name?: string;
71
140
  color?: string;
72
141
  isFavorite?: boolean;
73
142
  viewStyle?: ProjectViewStyle;
74
143
  };
144
+ /**
145
+ * @see https://developer.todoist.com/rest/v2/#get-all-collaborators
146
+ */
75
147
  export type GetProjectCollaboratorsArgs = {
76
148
  cursor?: string | null;
77
149
  limit?: number;
78
150
  };
79
- export type GetSections = {
151
+ /**
152
+ * @see https://developer.todoist.com/rest/v2/#get-all-collaborators
153
+ */
154
+ export type GetProjectCollaboratorsResponse = {
155
+ results: User[];
156
+ nextCursor: string | null;
157
+ };
158
+ /**
159
+ * @see https://developer.todoist.com/rest/v2/#sections
160
+ */
161
+ export type GetSectionsArgs = {
80
162
  projectId: string | null;
81
163
  cursor?: string | null;
82
164
  limit?: number;
83
165
  };
166
+ /**
167
+ * @see https://developer.todoist.com/rest/v2/#sections
168
+ */
169
+ export type GetSectionsResponse = {
170
+ results: Section[];
171
+ nextCursor: string | null;
172
+ };
173
+ /**
174
+ * @see https://developer.todoist.com/rest/v2/#create-a-new-section
175
+ */
84
176
  export type AddSectionArgs = {
85
177
  name: string;
86
178
  projectId: string;
87
179
  order?: number | null;
88
180
  };
181
+ /**
182
+ * @see https://developer.todoist.com/rest/v2/#update-a-section
183
+ */
89
184
  export type UpdateSectionArgs = {
90
185
  name: string;
91
186
  };
187
+ /**
188
+ * @see https://developer.todoist.com/rest/v2/#get-all-personal-labels
189
+ */
92
190
  export type GetLabelsArgs = {
93
191
  cursor?: string | null;
94
192
  limit?: number;
95
193
  };
194
+ /**
195
+ * @see https://developer.todoist.com/rest/v2/#get-all-personal-labels
196
+ */
197
+ export type GetLabelsResponse = {
198
+ results: Label[];
199
+ nextCursor: string | null;
200
+ };
201
+ /**
202
+ * @see https://developer.todoist.com/rest/v2/#create-a-new-personal-label
203
+ */
96
204
  export type AddLabelArgs = {
97
205
  name: string;
98
206
  order?: number | null;
99
207
  color?: string | number;
100
208
  isFavorite?: boolean;
101
209
  };
210
+ /**
211
+ * @see https://developer.todoist.com/rest/v2/#update-a-personal-label
212
+ */
102
213
  export type UpdateLabelArgs = {
103
214
  name?: string;
104
215
  order?: number | null;
105
216
  color?: string;
106
217
  isFavorite?: boolean;
107
218
  };
108
- export type GetCommentsBaseArgs = {
219
+ /**
220
+ * @see https://developer.todoist.com/rest/v2/#get-all-shared-labels
221
+ */
222
+ export type GetSharedLabelsArgs = {
223
+ omitPersonal?: boolean;
109
224
  cursor?: string | null;
110
225
  limit?: number;
111
226
  };
112
- export type GetTaskCommentsArgs = GetCommentsBaseArgs & {
227
+ /**
228
+ * @see https://developer.todoist.com/rest/v2/#get-all-shared-labels
229
+ */
230
+ export type GetSharedLabelsResponse = {
231
+ results: string[];
232
+ nextCursor: string | null;
233
+ };
234
+ /**
235
+ * @see https://developer.todoist.com/rest/v2/#rename-shared-labels
236
+ */
237
+ export type RenameSharedLabelArgs = {
238
+ name: string;
239
+ newName: string;
240
+ };
241
+ /**
242
+ * @see https://developer.todoist.com/rest/v2/#remove-shared-labels
243
+ */
244
+ export type RemoveSharedLabelArgs = {
245
+ name: string;
246
+ };
247
+ /**
248
+ * @see https://developer.todoist.com/rest/v2/#get-all-comments
249
+ */
250
+ export type GetTaskCommentsArgs = {
113
251
  taskId: string;
114
252
  projectId?: never;
253
+ cursor?: string | null;
254
+ limit?: number;
115
255
  };
116
- export type GetProjectCommentsArgs = GetCommentsBaseArgs & {
256
+ /**
257
+ * @see https://developer.todoist.com/rest/v2/#get-all-comments
258
+ */
259
+ export type GetProjectCommentsArgs = {
117
260
  projectId: string;
118
261
  taskId?: never;
262
+ cursor?: string | null;
263
+ limit?: number;
119
264
  };
265
+ /**
266
+ * @see https://developer.todoist.com/rest/v2/#get-all-comments
267
+ */
268
+ export type GetCommentsResponse = {
269
+ results: Comment[];
270
+ nextCursor: string | null;
271
+ };
272
+ /**
273
+ * @see https://developer.todoist.com/rest/v2/#create-a-new-comment
274
+ */
120
275
  export type AddCommentArgs = {
121
276
  content: string;
122
277
  attachment?: {
@@ -129,18 +284,9 @@ export type AddCommentArgs = {
129
284
  taskId?: string;
130
285
  projectId?: string;
131
286
  }>;
287
+ /**
288
+ * @see https://developer.todoist.com/rest/v2/#update-a-comment
289
+ */
132
290
  export type UpdateCommentArgs = {
133
291
  content: string;
134
292
  };
135
- export type GetSharedLabelsArgs = {
136
- omitPersonal?: boolean;
137
- cursor?: string | null;
138
- limit?: number;
139
- };
140
- export type RenameSharedLabelArgs = {
141
- name: string;
142
- newName: string;
143
- };
144
- export type RemoveSharedLabelArgs = {
145
- name: string;
146
- };
@@ -0,0 +1,21 @@
1
+ import type { SyncTask } from './requests';
2
+ export type Command = {
3
+ type: string;
4
+ uuid: string;
5
+ args: Record<string, unknown>;
6
+ };
7
+ export type SyncError = {
8
+ error: string;
9
+ error_code: number;
10
+ error_extra: Record<string, unknown>;
11
+ error_tag: string;
12
+ http_code: number;
13
+ };
14
+ export type SyncRequest = {
15
+ commands: Command[];
16
+ resource_types?: string[];
17
+ };
18
+ export type SyncResponse = {
19
+ items?: SyncTask[];
20
+ sync_status?: Record<string, 'ok' | SyncError>;
21
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -22,11 +22,25 @@ export declare const taupe: Color;
22
22
  export declare const colors: readonly [Color, Color, Color, Color, Color, Color, Color, Color, Color, Color, Color, Color, Color, Color, Color, Color, Color, Color, Color, Color];
23
23
  export declare const defaultColor: Color;
24
24
  /**
25
+ * @private
25
26
  * @deprecated Use {@link getColorByKey} instead
26
27
  */
27
28
  export declare function getColorById(colorId: number): Color;
28
29
  /**
30
+ * @private
29
31
  * @deprecated Use {@link getColorByKey} instead
30
32
  */
31
33
  export declare function getColorByName(colorName: string): Color;
34
+ /**
35
+ * Retrieves a {@link Color} object by its key identifier.
36
+ *
37
+ * @param colorKey - The unique key identifier of the color to find (e.g., 'berry_red', 'sky_blue')
38
+ * @returns The matching Color object if found, otherwise returns the default color (charcoal)
39
+ *
40
+ * @example
41
+ * ```typescript
42
+ * const color = getColorByKey('berry_red');
43
+ * console.log(color.hexValue); // '#b8255f'
44
+ * ```
45
+ */
32
46
  export declare function getColorByKey(colorKey: string): Color;
@@ -185,6 +185,7 @@ exports.colors = [
185
185
  ];
186
186
  exports.defaultColor = exports.charcoal;
187
187
  /**
188
+ * @private
188
189
  * @deprecated Use {@link getColorByKey} instead
189
190
  */
190
191
  function getColorById(colorId) {
@@ -193,6 +194,7 @@ function getColorById(colorId) {
193
194
  }
194
195
  exports.getColorById = getColorById;
195
196
  /**
197
+ * @private
196
198
  * @deprecated Use {@link getColorByKey} instead
197
199
  */
198
200
  function getColorByName(colorName) {
@@ -200,6 +202,18 @@ function getColorByName(colorName) {
200
202
  return color !== null && color !== void 0 ? color : exports.defaultColor;
201
203
  }
202
204
  exports.getColorByName = getColorByName;
205
+ /**
206
+ * Retrieves a {@link Color} object by its key identifier.
207
+ *
208
+ * @param colorKey - The unique key identifier of the color to find (e.g., 'berry_red', 'sky_blue')
209
+ * @returns The matching Color object if found, otherwise returns the default color (charcoal)
210
+ *
211
+ * @example
212
+ * ```typescript
213
+ * const color = getColorByKey('berry_red');
214
+ * console.log(color.hexValue); // '#b8255f'
215
+ * ```
216
+ */
203
217
  function getColorByKey(colorKey) {
204
218
  var color = exports.colors.find(function (color) { return color.key === colorKey; });
205
219
  return color !== null && color !== void 0 ? color : exports.defaultColor;
@@ -2,5 +2,34 @@ import { Task } from '../types';
2
2
  export type TaskWithSanitizedContent = Task & {
3
3
  sanitizedContent: string;
4
4
  };
5
+ /**
6
+ * Sanitizes a string by removing Todoist's formatting syntax (e.g. bold, italic, code blocks, links).
7
+ *
8
+ * @example
9
+ * // Removes bold/italic formatting
10
+ * getSanitizedContent('Some **bold** and *italic*') // 'Some bold and italic'
11
+ *
12
+ * // Removes markdown links
13
+ * getSanitizedContent('A [markdown](http://url.com) link') // 'A markdown link'
14
+ *
15
+ * // Removes app-specific links
16
+ * getSanitizedContent('A [[gmail=id, link from gmail]]') // 'A link from gmail'
17
+ *
18
+ * @param input - The string to sanitize
19
+ * @returns The sanitized string with all formatting removed
20
+ */
5
21
  export declare function getSanitizedContent(input: string): string;
22
+ /**
23
+ * Takes an array of tasks and returns a new array with sanitized content
24
+ * added as 'sanitizedContent' property to each task.
25
+ *
26
+ * @see {@link getSanitizedContent}
27
+ *
28
+ * @example
29
+ * const tasks = [{ content: '**Bold** task', ... }]
30
+ * getSanitizedTasks(tasks) // [{ content: '**Bold** task', sanitizedContent: 'Bold task', ... }]
31
+ *
32
+ * @param tasks - Array of Task objects to sanitize
33
+ * @returns Array of tasks with added sanitizedContent property
34
+ */
6
35
  export declare function getSanitizedTasks(tasks: Task[]): TaskWithSanitizedContent[];
@@ -83,6 +83,22 @@ function removeAppLinks(input) {
83
83
  }
84
84
  return input;
85
85
  }
86
+ /**
87
+ * Sanitizes a string by removing Todoist's formatting syntax (e.g. bold, italic, code blocks, links).
88
+ *
89
+ * @example
90
+ * // Removes bold/italic formatting
91
+ * getSanitizedContent('Some **bold** and *italic*') // 'Some bold and italic'
92
+ *
93
+ * // Removes markdown links
94
+ * getSanitizedContent('A [markdown](http://url.com) link') // 'A markdown link'
95
+ *
96
+ * // Removes app-specific links
97
+ * getSanitizedContent('A [[gmail=id, link from gmail]]') // 'A link from gmail'
98
+ *
99
+ * @param input - The string to sanitize
100
+ * @returns The sanitized string with all formatting removed
101
+ */
86
102
  function getSanitizedContent(input) {
87
103
  input = removeStyleFormatting(input);
88
104
  input = removeCodeFormatting(input);
@@ -93,6 +109,19 @@ function getSanitizedContent(input) {
93
109
  return input;
94
110
  }
95
111
  exports.getSanitizedContent = getSanitizedContent;
112
+ /**
113
+ * Takes an array of tasks and returns a new array with sanitized content
114
+ * added as 'sanitizedContent' property to each task.
115
+ *
116
+ * @see {@link getSanitizedContent}
117
+ *
118
+ * @example
119
+ * const tasks = [{ content: '**Bold** task', ... }]
120
+ * getSanitizedTasks(tasks) // [{ content: '**Bold** task', sanitizedContent: 'Bold task', ... }]
121
+ *
122
+ * @param tasks - Array of Task objects to sanitize
123
+ * @returns Array of tasks with added sanitizedContent property
124
+ */
96
125
  function getSanitizedTasks(tasks) {
97
126
  return tasks.map(function (task) { return (__assign(__assign({}, task), { sanitizedContent: getSanitizedContent(task.content) })); });
98
127
  }
@@ -17,7 +17,7 @@ function getTaskFromQuickAddResponse(responseData) {
17
17
  isCompleted: responseData.checked,
18
18
  labels: responseData.labels,
19
19
  priority: responseData.priority,
20
- commentCount: 0,
20
+ commentCount: 0, // Will always be 0 for a quick add
21
21
  createdAt: responseData.addedAt,
22
22
  url: getTaskUrlFromQuickAddResponse(responseData),
23
23
  creatorId: (_a = responseData.addedByUid) !== null && _a !== void 0 ? _a : '',
@@ -1,4 +1,4 @@
1
- import { Label, Project, Section, Task, User, Comment } from '../types';
1
+ import { type Task, type Project, type Section, type Label, type Comment, type User } from '../types/entities';
2
2
  export declare function validateTask(input: unknown): Task;
3
3
  export declare function validateTaskArray(input: unknown[]): Task[];
4
4
  export declare function validateProject(input: unknown): Project;