@shin1ohno/sage 0.8.8 → 0.9.1
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 +31 -0
- package/dist/cli/http-server-with-config.d.ts +2 -0
- package/dist/cli/http-server-with-config.d.ts.map +1 -1
- package/dist/cli/http-server-with-config.js +70 -0
- package/dist/cli/http-server-with-config.js.map +1 -1
- package/dist/cli/main-entry.d.ts.map +1 -1
- package/dist/cli/main-entry.js +1 -0
- package/dist/cli/main-entry.js.map +1 -1
- package/dist/cli/parser.d.ts +2 -0
- package/dist/cli/parser.d.ts.map +1 -1
- package/dist/cli/parser.js +7 -0
- package/dist/cli/parser.js.map +1 -1
- package/dist/config/validation.d.ts +721 -0
- package/dist/config/validation.d.ts.map +1 -1
- package/dist/config/validation.js +203 -0
- package/dist/config/validation.js.map +1 -1
- package/dist/integrations/calendar-service.d.ts +14 -0
- package/dist/integrations/calendar-service.d.ts.map +1 -1
- package/dist/integrations/calendar-service.js.map +1 -1
- package/dist/integrations/calendar-source-manager.d.ts +86 -3
- package/dist/integrations/calendar-source-manager.d.ts.map +1 -1
- package/dist/integrations/calendar-source-manager.js +146 -15
- package/dist/integrations/calendar-source-manager.js.map +1 -1
- package/dist/integrations/google-calendar-service.d.ts +55 -3
- package/dist/integrations/google-calendar-service.d.ts.map +1 -1
- package/dist/integrations/google-calendar-service.js +213 -4
- package/dist/integrations/google-calendar-service.js.map +1 -1
- package/dist/oauth/encryption-service.d.ts +104 -0
- package/dist/oauth/encryption-service.d.ts.map +1 -0
- package/dist/oauth/encryption-service.js +271 -0
- package/dist/oauth/encryption-service.js.map +1 -0
- package/dist/oauth/file-mutex.d.ts +68 -0
- package/dist/oauth/file-mutex.d.ts.map +1 -0
- package/dist/oauth/file-mutex.js +140 -0
- package/dist/oauth/file-mutex.js.map +1 -0
- package/dist/oauth/google-oauth-handler.d.ts +8 -9
- package/dist/oauth/google-oauth-handler.d.ts.map +1 -1
- package/dist/oauth/google-oauth-handler.js +30 -65
- package/dist/oauth/google-oauth-handler.js.map +1 -1
- package/dist/oauth/index.d.ts +1 -0
- package/dist/oauth/index.d.ts.map +1 -1
- package/dist/oauth/index.js +2 -0
- package/dist/oauth/index.js.map +1 -1
- package/dist/oauth/oauth-server.d.ts +61 -1
- package/dist/oauth/oauth-server.d.ts.map +1 -1
- package/dist/oauth/oauth-server.js +181 -40
- package/dist/oauth/oauth-server.js.map +1 -1
- package/dist/oauth/persistent-client-store.d.ts +58 -0
- package/dist/oauth/persistent-client-store.d.ts.map +1 -0
- package/dist/oauth/persistent-client-store.js +187 -0
- package/dist/oauth/persistent-client-store.js.map +1 -0
- package/dist/oauth/persistent-refresh-token-store.d.ts +77 -0
- package/dist/oauth/persistent-refresh-token-store.d.ts.map +1 -0
- package/dist/oauth/persistent-refresh-token-store.js +225 -0
- package/dist/oauth/persistent-refresh-token-store.js.map +1 -0
- package/dist/oauth/persistent-session-store.d.ts +69 -0
- package/dist/oauth/persistent-session-store.d.ts.map +1 -0
- package/dist/oauth/persistent-session-store.js +154 -0
- package/dist/oauth/persistent-session-store.js.map +1 -0
- package/dist/oauth/session-store.d.ts +31 -0
- package/dist/oauth/session-store.d.ts.map +1 -0
- package/dist/oauth/session-store.js +47 -0
- package/dist/oauth/session-store.js.map +1 -0
- package/dist/services/working-cadence.d.ts +37 -1
- package/dist/services/working-cadence.d.ts.map +1 -1
- package/dist/services/working-cadence.js +151 -13
- package/dist/services/working-cadence.js.map +1 -1
- package/dist/tools/calendar/handlers.d.ts +82 -3
- package/dist/tools/calendar/handlers.d.ts.map +1 -1
- package/dist/tools/calendar/handlers.js +200 -16
- package/dist/tools/calendar/handlers.js.map +1 -1
- package/dist/types/google-calendar-types.d.ts +150 -3
- package/dist/types/google-calendar-types.d.ts.map +1 -1
- package/dist/types/google-calendar-types.js +79 -2
- package/dist/types/google-calendar-types.js.map +1 -1
- package/dist/types/task.d.ts +14 -0
- package/dist/types/task.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -4,9 +4,94 @@
|
|
|
4
4
|
* Design: .claude/specs/google-calendar-api/design.md (Data Models section)
|
|
5
5
|
*/
|
|
6
6
|
/**
|
|
7
|
-
* Google Calendar Event
|
|
7
|
+
* Google Calendar Event Type
|
|
8
|
+
* Represents all 6 event types supported by Google Calendar API v3
|
|
9
|
+
* Requirement: 6.2
|
|
10
|
+
*/
|
|
11
|
+
export type GoogleCalendarEventType = 'default' | 'outOfOffice' | 'focusTime' | 'workingLocation' | 'birthday' | 'fromGmail';
|
|
12
|
+
/**
|
|
13
|
+
* Auto Decline Mode for Out of Office and Focus Time events
|
|
14
|
+
* Requirement: 1, 2
|
|
15
|
+
*/
|
|
16
|
+
export type AutoDeclineMode = 'declineNone' | 'declineAllConflictingInvitations' | 'declineOnlyNewConflictingInvitations';
|
|
17
|
+
/**
|
|
18
|
+
* Out of Office Properties
|
|
19
|
+
* Used for vacation blocks and automatic decline functionality
|
|
20
|
+
* Requirement: 1
|
|
21
|
+
*/
|
|
22
|
+
export interface OutOfOfficeProperties {
|
|
23
|
+
autoDeclineMode: AutoDeclineMode;
|
|
24
|
+
declineMessage?: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Focus Time Properties
|
|
28
|
+
* Used for deep work time blocks with Google Chat integration
|
|
8
29
|
* Requirement: 2
|
|
9
30
|
*/
|
|
31
|
+
export interface FocusTimeProperties {
|
|
32
|
+
autoDeclineMode: AutoDeclineMode;
|
|
33
|
+
declineMessage?: string;
|
|
34
|
+
chatStatus?: 'available' | 'doNotDisturb';
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Working Location Properties
|
|
38
|
+
* Records remote/office/custom location information
|
|
39
|
+
* Requirement: 3
|
|
40
|
+
*/
|
|
41
|
+
export interface WorkingLocationProperties {
|
|
42
|
+
type: 'homeOffice' | 'officeLocation' | 'customLocation';
|
|
43
|
+
homeOffice?: boolean;
|
|
44
|
+
customLocation?: {
|
|
45
|
+
label: string;
|
|
46
|
+
};
|
|
47
|
+
officeLocation?: {
|
|
48
|
+
buildingId?: string;
|
|
49
|
+
floorId?: string;
|
|
50
|
+
floorSectionId?: string;
|
|
51
|
+
deskId?: string;
|
|
52
|
+
label?: string;
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Birthday Properties
|
|
57
|
+
* Manages birthdays, anniversaries, and other recurring personal events
|
|
58
|
+
* Requirement: 4
|
|
59
|
+
*/
|
|
60
|
+
export interface BirthdayProperties {
|
|
61
|
+
type: 'birthday' | 'anniversary' | 'custom' | 'other' | 'self';
|
|
62
|
+
customTypeName?: string;
|
|
63
|
+
/** People API resource name (read-only) */
|
|
64
|
+
readonly contact?: string;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Event Type Specific Properties (discriminated union)
|
|
68
|
+
* Combines eventType with corresponding properties for type-safe handling
|
|
69
|
+
* Requirement: 6.3
|
|
70
|
+
*/
|
|
71
|
+
export type EventTypeSpecificProperties = {
|
|
72
|
+
eventType: 'default';
|
|
73
|
+
properties?: never;
|
|
74
|
+
} | {
|
|
75
|
+
eventType: 'outOfOffice';
|
|
76
|
+
properties: OutOfOfficeProperties;
|
|
77
|
+
} | {
|
|
78
|
+
eventType: 'focusTime';
|
|
79
|
+
properties: FocusTimeProperties;
|
|
80
|
+
} | {
|
|
81
|
+
eventType: 'workingLocation';
|
|
82
|
+
properties: WorkingLocationProperties;
|
|
83
|
+
} | {
|
|
84
|
+
eventType: 'birthday';
|
|
85
|
+
properties: BirthdayProperties;
|
|
86
|
+
} | {
|
|
87
|
+
eventType: 'fromGmail';
|
|
88
|
+
properties?: never;
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* Google Calendar Event (internal representation from Google Calendar API)
|
|
92
|
+
* Supports all 6 event types: default, outOfOffice, focusTime, workingLocation, birthday, fromGmail
|
|
93
|
+
* Requirement: 2, 6
|
|
94
|
+
*/
|
|
10
95
|
export interface GoogleCalendarEvent {
|
|
11
96
|
id: string;
|
|
12
97
|
summary: string;
|
|
@@ -40,6 +125,36 @@ export interface GoogleCalendarEvent {
|
|
|
40
125
|
email: string;
|
|
41
126
|
displayName?: string;
|
|
42
127
|
};
|
|
128
|
+
/**
|
|
129
|
+
* Event type from Google Calendar API
|
|
130
|
+
* Defaults to 'default' if not specified
|
|
131
|
+
* Requirement: 6.2
|
|
132
|
+
*/
|
|
133
|
+
eventType?: GoogleCalendarEventType;
|
|
134
|
+
/**
|
|
135
|
+
* Properties for out of office events (vacation, leave)
|
|
136
|
+
* Only present when eventType is 'outOfOffice'
|
|
137
|
+
* Requirement: 1
|
|
138
|
+
*/
|
|
139
|
+
outOfOfficeProperties?: OutOfOfficeProperties;
|
|
140
|
+
/**
|
|
141
|
+
* Properties for focus time events (deep work blocks)
|
|
142
|
+
* Only present when eventType is 'focusTime'
|
|
143
|
+
* Requirement: 2
|
|
144
|
+
*/
|
|
145
|
+
focusTimeProperties?: FocusTimeProperties;
|
|
146
|
+
/**
|
|
147
|
+
* Properties for working location events
|
|
148
|
+
* Only present when eventType is 'workingLocation'
|
|
149
|
+
* Requirement: 3
|
|
150
|
+
*/
|
|
151
|
+
workingLocationProperties?: WorkingLocationProperties;
|
|
152
|
+
/**
|
|
153
|
+
* Properties for birthday/anniversary events
|
|
154
|
+
* Only present when eventType is 'birthday'
|
|
155
|
+
* Requirement: 4
|
|
156
|
+
*/
|
|
157
|
+
birthdayProperties?: BirthdayProperties;
|
|
43
158
|
}
|
|
44
159
|
/**
|
|
45
160
|
* OAuth tokens for Google Calendar API
|
|
@@ -105,6 +220,7 @@ export interface SyncStatus {
|
|
|
105
220
|
/**
|
|
106
221
|
* Extended Calendar Event with additional fields for Google Calendar integration
|
|
107
222
|
* Extends the base CalendarEvent from calendar-service.ts
|
|
223
|
+
* Supports event types and type-specific properties for enhanced functionality
|
|
108
224
|
* Requirement: 2, 3, 4, 5, 6
|
|
109
225
|
*/
|
|
110
226
|
export interface CalendarEvent {
|
|
@@ -120,12 +236,43 @@ export interface CalendarEvent {
|
|
|
120
236
|
attendees?: string[];
|
|
121
237
|
status?: 'confirmed' | 'tentative' | 'cancelled';
|
|
122
238
|
iCalUID?: string;
|
|
239
|
+
/**
|
|
240
|
+
* Event type for Google Calendar events
|
|
241
|
+
* Defaults to 'default' for standard events
|
|
242
|
+
* Requirement: 6.2
|
|
243
|
+
*/
|
|
244
|
+
eventType?: GoogleCalendarEventType;
|
|
245
|
+
/**
|
|
246
|
+
* Type-specific properties combining eventType with corresponding properties
|
|
247
|
+
* Enables type-safe access to event-specific data
|
|
248
|
+
* Requirement: 6.3
|
|
249
|
+
*/
|
|
250
|
+
typeSpecificProperties?: EventTypeSpecificProperties;
|
|
123
251
|
}
|
|
252
|
+
/**
|
|
253
|
+
* Detect event type from Google Calendar event
|
|
254
|
+
* Checks eventType field first, then falls back to detecting from type-specific properties
|
|
255
|
+
* Requirement: 6.2
|
|
256
|
+
* @param googleEvent Google Calendar API event object
|
|
257
|
+
* @returns GoogleCalendarEventType ('default' if not detected)
|
|
258
|
+
*/
|
|
259
|
+
export declare function detectEventType(googleEvent: GoogleCalendarEvent): GoogleCalendarEventType;
|
|
260
|
+
/**
|
|
261
|
+
* Extract type-specific properties from Google Calendar event
|
|
262
|
+
* Returns the appropriate properties object based on detected eventType
|
|
263
|
+
* Requirement: 6.3
|
|
264
|
+
* @param googleEvent Google Calendar API event object
|
|
265
|
+
* @param eventType The detected event type
|
|
266
|
+
* @returns EventTypeSpecificProperties or undefined for 'default' and 'fromGmail' types
|
|
267
|
+
*/
|
|
268
|
+
export declare function extractTypeSpecificProperties(googleEvent: GoogleCalendarEvent, eventType: GoogleCalendarEventType): EventTypeSpecificProperties | undefined;
|
|
124
269
|
/**
|
|
125
270
|
* Convert Google Calendar Event to unified CalendarEvent format
|
|
126
|
-
*
|
|
271
|
+
* Calls detectEventType() to determine eventType and extractTypeSpecificProperties() for type-specific data
|
|
272
|
+
* Preserves all existing fields for backward compatibility
|
|
273
|
+
* Requirement: 2, 6, 6.2, 6.3, 8.4, 9.3
|
|
127
274
|
* @param googleEvent Google Calendar API event object
|
|
128
|
-
* @returns Unified CalendarEvent object
|
|
275
|
+
* @returns Unified CalendarEvent object with eventType and typeSpecificProperties
|
|
129
276
|
*/
|
|
130
277
|
export declare function convertGoogleToCalendarEvent(googleEvent: GoogleCalendarEvent): CalendarEvent;
|
|
131
278
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"google-calendar-types.d.ts","sourceRoot":"","sources":["../../src/types/google-calendar-types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"google-calendar-types.d.ts","sourceRoot":"","sources":["../../src/types/google-calendar-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,14 +3,88 @@
|
|
|
3
3
|
* Requirement: 1, 2, 3, 4, 5, 6
|
|
4
4
|
* Design: .claude/specs/google-calendar-api/design.md (Data Models section)
|
|
5
5
|
*/
|
|
6
|
+
/**
|
|
7
|
+
* Detect event type from Google Calendar event
|
|
8
|
+
* Checks eventType field first, then falls back to detecting from type-specific properties
|
|
9
|
+
* Requirement: 6.2
|
|
10
|
+
* @param googleEvent Google Calendar API event object
|
|
11
|
+
* @returns GoogleCalendarEventType ('default' if not detected)
|
|
12
|
+
*/
|
|
13
|
+
export function detectEventType(googleEvent) {
|
|
14
|
+
// Primary: Check for explicit eventType field
|
|
15
|
+
if (googleEvent.eventType) {
|
|
16
|
+
return googleEvent.eventType;
|
|
17
|
+
}
|
|
18
|
+
// Fallback: Detect from type-specific properties
|
|
19
|
+
if (googleEvent.outOfOfficeProperties) {
|
|
20
|
+
return 'outOfOffice';
|
|
21
|
+
}
|
|
22
|
+
if (googleEvent.focusTimeProperties) {
|
|
23
|
+
return 'focusTime';
|
|
24
|
+
}
|
|
25
|
+
if (googleEvent.workingLocationProperties) {
|
|
26
|
+
return 'workingLocation';
|
|
27
|
+
}
|
|
28
|
+
if (googleEvent.birthdayProperties) {
|
|
29
|
+
return 'birthday';
|
|
30
|
+
}
|
|
31
|
+
// Default to 'default' if no eventType detected
|
|
32
|
+
return 'default';
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Extract type-specific properties from Google Calendar event
|
|
36
|
+
* Returns the appropriate properties object based on detected eventType
|
|
37
|
+
* Requirement: 6.3
|
|
38
|
+
* @param googleEvent Google Calendar API event object
|
|
39
|
+
* @param eventType The detected event type
|
|
40
|
+
* @returns EventTypeSpecificProperties or undefined for 'default' and 'fromGmail' types
|
|
41
|
+
*/
|
|
42
|
+
export function extractTypeSpecificProperties(googleEvent, eventType) {
|
|
43
|
+
switch (eventType) {
|
|
44
|
+
case 'outOfOffice':
|
|
45
|
+
if (googleEvent.outOfOfficeProperties) {
|
|
46
|
+
return { eventType: 'outOfOffice', properties: googleEvent.outOfOfficeProperties };
|
|
47
|
+
}
|
|
48
|
+
return undefined;
|
|
49
|
+
case 'focusTime':
|
|
50
|
+
if (googleEvent.focusTimeProperties) {
|
|
51
|
+
return { eventType: 'focusTime', properties: googleEvent.focusTimeProperties };
|
|
52
|
+
}
|
|
53
|
+
return undefined;
|
|
54
|
+
case 'workingLocation':
|
|
55
|
+
if (googleEvent.workingLocationProperties) {
|
|
56
|
+
return { eventType: 'workingLocation', properties: googleEvent.workingLocationProperties };
|
|
57
|
+
}
|
|
58
|
+
return undefined;
|
|
59
|
+
case 'birthday':
|
|
60
|
+
if (googleEvent.birthdayProperties) {
|
|
61
|
+
return { eventType: 'birthday', properties: googleEvent.birthdayProperties };
|
|
62
|
+
}
|
|
63
|
+
return undefined;
|
|
64
|
+
case 'fromGmail':
|
|
65
|
+
// fromGmail events have no type-specific properties
|
|
66
|
+
return undefined;
|
|
67
|
+
case 'default':
|
|
68
|
+
default:
|
|
69
|
+
// default events have no type-specific properties
|
|
70
|
+
return undefined;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
6
73
|
/**
|
|
7
74
|
* Convert Google Calendar Event to unified CalendarEvent format
|
|
8
|
-
*
|
|
75
|
+
* Calls detectEventType() to determine eventType and extractTypeSpecificProperties() for type-specific data
|
|
76
|
+
* Preserves all existing fields for backward compatibility
|
|
77
|
+
* Requirement: 2, 6, 6.2, 6.3, 8.4, 9.3
|
|
9
78
|
* @param googleEvent Google Calendar API event object
|
|
10
|
-
* @returns Unified CalendarEvent object
|
|
79
|
+
* @returns Unified CalendarEvent object with eventType and typeSpecificProperties
|
|
11
80
|
*/
|
|
12
81
|
export function convertGoogleToCalendarEvent(googleEvent) {
|
|
82
|
+
// Detect event type using helper function
|
|
83
|
+
const eventType = detectEventType(googleEvent);
|
|
84
|
+
// Extract type-specific properties using helper function
|
|
85
|
+
const typeSpecificProperties = extractTypeSpecificProperties(googleEvent, eventType);
|
|
13
86
|
return {
|
|
87
|
+
// Existing fields (backward compatibility)
|
|
14
88
|
id: googleEvent.id,
|
|
15
89
|
title: googleEvent.summary,
|
|
16
90
|
start: googleEvent.start.dateTime || googleEvent.start.date || '',
|
|
@@ -23,6 +97,9 @@ export function convertGoogleToCalendarEvent(googleEvent) {
|
|
|
23
97
|
attendees: googleEvent.attendees?.map((a) => a.email),
|
|
24
98
|
status: googleEvent.status,
|
|
25
99
|
iCalUID: googleEvent.iCalUID,
|
|
100
|
+
// New fields for event type support
|
|
101
|
+
eventType,
|
|
102
|
+
typeSpecificProperties,
|
|
26
103
|
};
|
|
27
104
|
}
|
|
28
105
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"google-calendar-types.js","sourceRoot":"","sources":["../../src/types/google-calendar-types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"google-calendar-types.js","sourceRoot":"","sources":["../../src/types/google-calendar-types.ts"],"names":[],"mappings":"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"}
|
package/dist/types/task.d.ts
CHANGED
|
@@ -55,10 +55,24 @@ export interface Reminder {
|
|
|
55
55
|
time: string;
|
|
56
56
|
message?: string;
|
|
57
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* Working location information for a time slot
|
|
60
|
+
* Requirement: 3.7 (google-calendar-event-types spec)
|
|
61
|
+
*/
|
|
62
|
+
export interface WorkingLocationInfo {
|
|
63
|
+
type: 'homeOffice' | 'officeLocation' | 'customLocation' | 'unknown';
|
|
64
|
+
label?: string;
|
|
65
|
+
}
|
|
58
66
|
export interface TimeSlot {
|
|
59
67
|
start: string;
|
|
60
68
|
end: string;
|
|
61
69
|
durationMinutes: number;
|
|
70
|
+
/**
|
|
71
|
+
* Working location context for the time slot
|
|
72
|
+
* Populated when working location events are present for the slot's date
|
|
73
|
+
* Requirement: 3.7 (google-calendar-event-types spec)
|
|
74
|
+
*/
|
|
75
|
+
workingLocation?: WorkingLocationInfo;
|
|
62
76
|
}
|
|
63
77
|
export interface AvailableSlot extends TimeSlot {
|
|
64
78
|
suitability: 'excellent' | 'good' | 'acceptable';
|
package/dist/types/task.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../src/types/task.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,UAAU,GAAG,aAAa,GAAG,aAAa,GAAG,SAAS,GAAG,WAAW,CAAC;AAEjF,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAEjD,MAAM,WAAW,IAAI;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,OAAQ,SAAQ,IAAI;IACnC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,EAAE,YAAY,GAAG,UAAU,GAAG,aAAa,CAAC;CACjD;AAED,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,IAAI,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,YAAY,EAAE,cAAc,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;IACxD,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,IAAI,CAAC;IACf,QAAQ,EAAE,QAAQ,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,kBAAkB,EAAE,QAAQ,EAAE,CAAC;IAC/B,iBAAiB,CAAC,EAAE,QAAQ,CAAC;IAC7B,SAAS,EAAE,iBAAiB,CAAC;IAC7B,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../src/types/task.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,UAAU,GAAG,aAAa,GAAG,aAAa,GAAG,SAAS,GAAG,WAAW,CAAC;AAEjF,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAEjD,MAAM,WAAW,IAAI;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,OAAQ,SAAQ,IAAI;IACnC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,EAAE,YAAY,GAAG,UAAU,GAAG,aAAa,CAAC;CACjD;AAED,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,IAAI,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,YAAY,EAAE,cAAc,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;IACxD,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,IAAI,CAAC;IACf,QAAQ,EAAE,QAAQ,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,kBAAkB,EAAE,QAAQ,EAAE,CAAC;IAC/B,iBAAiB,CAAC,EAAE,QAAQ,CAAC;IAC7B,SAAS,EAAE,iBAAiB,CAAC;IAC7B,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,YAAY,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,SAAS,CAAC;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,eAAe,CAAC,EAAE,mBAAmB,CAAC;CACvC;AAED,MAAM,WAAW,aAAc,SAAQ,QAAQ;IAC7C,WAAW,EAAE,WAAW,GAAG,MAAM,GAAG,YAAY,CAAC;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,WAAW,GAAG,eAAe,GAAG,QAAQ,CAAC;CACnD"}
|