@timothyw/pat-common 1.0.92 → 1.0.94
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/dist/types/api/account/get-user-types.d.ts +2 -1
- package/dist/types/api/account/update-user-types.d.ts +5 -4
- package/dist/types/api/habits/create-habit-entry-types.d.ts +3 -3
- package/dist/types/api/habits/create-habit-types.d.ts +3 -2
- package/dist/types/api/habits/create-habit-types.js +2 -2
- package/dist/types/api/habits/delete-habit-entry-types.d.ts +3 -2
- package/dist/types/api/habits/get-habits-types.d.ts +3 -2
- package/dist/types/api/habits/update-habit-types.d.ts +2 -1
- package/dist/types/api/items/complete-item-types.d.ts +2 -1
- package/dist/types/api/items/create-item-types.d.ts +4 -3
- package/dist/types/api/items/get-items-types.d.ts +2 -1
- package/dist/types/api/items/update-item-types.d.ts +4 -3
- package/dist/types/api/people/create-person-note-types.d.ts +2 -1
- package/dist/types/api/people/create-person-types.d.ts +8 -8
- package/dist/types/api/people/get-people-types.d.ts +2 -1
- package/dist/types/api/people/get-person-notes-types.d.ts +2 -1
- package/dist/types/api/people/update-person-note-types.d.ts +2 -1
- package/dist/types/api/people/update-person-types.d.ts +8 -8
- package/dist/types/api/tasks/complete-task-types.d.ts +3 -10
- package/dist/types/api/tasks/create-task-list-types.d.ts +3 -7
- package/dist/types/api/tasks/create-task-types.d.ts +4 -11
- package/dist/types/api/tasks/get-task-lists-types.d.ts +3 -7
- package/dist/types/api/tasks/get-tasks-types.d.ts +3 -10
- package/dist/types/api/tasks/update-task-list-types.d.ts +3 -7
- package/dist/types/api/tasks/update-task-types.d.ts +5 -12
- package/dist/types/api/thoughts/create-thought-types.d.ts +3 -4
- package/dist/types/api/thoughts/get-thoughts-types.d.ts +3 -4
- package/dist/types/api/thoughts/update-thought-types.d.ts +3 -4
- package/dist/types/models/item-data.d.ts +0 -7
- package/dist/types/models/item-data.js +0 -58
- package/dist/types/models/user-data.d.ts +2 -2
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.js +1 -0
- package/dist/utils/serializing-utils.d.ts +21 -0
- package/dist/utils/serializing-utils.js +93 -0
- package/package.json +1 -1
- package/src/types/api/account/get-user-types.ts +2 -1
- package/src/types/api/account/update-user-types.ts +2 -1
- package/src/types/api/habits/create-habit-entry-types.ts +3 -3
- package/src/types/api/habits/create-habit-types.ts +3 -3
- package/src/types/api/habits/delete-habit-entry-types.ts +3 -2
- package/src/types/api/habits/get-habits-types.ts +3 -2
- package/src/types/api/habits/update-habit-types.ts +2 -1
- package/src/types/api/items/complete-item-types.ts +2 -1
- package/src/types/api/items/create-item-types.ts +2 -1
- package/src/types/api/items/get-items-types.ts +2 -1
- package/src/types/api/items/update-item-types.ts +2 -1
- package/src/types/api/people/create-person-note-types.ts +3 -2
- package/src/types/api/people/create-person-types.ts +4 -3
- package/src/types/api/people/get-people-types.ts +3 -3
- package/src/types/api/people/get-person-notes-types.ts +3 -3
- package/src/types/api/people/update-person-note-types.ts +3 -3
- package/src/types/api/people/update-person-types.ts +4 -3
- package/src/types/api/tasks/complete-task-types.ts +3 -10
- package/src/types/api/tasks/create-task-list-types.ts +3 -7
- package/src/types/api/tasks/create-task-types.ts +4 -10
- package/src/types/api/tasks/get-task-lists-types.ts +3 -7
- package/src/types/api/tasks/get-tasks-types.ts +3 -10
- package/src/types/api/tasks/update-task-list-types.ts +3 -7
- package/src/types/api/tasks/update-task-types.ts +4 -10
- package/src/types/api/thoughts/create-thought-types.ts +3 -4
- package/src/types/api/thoughts/get-thoughts-types.ts +4 -4
- package/src/types/api/thoughts/update-thought-types.ts +3 -4
- package/src/types/id-types.ts +0 -1
- package/src/types/models/item-data.ts +0 -81
- package/src/utils/index.ts +2 -1
- package/src/utils/serializing-utils.ts +128 -0
|
@@ -13,85 +13,4 @@ export interface ItemData {
|
|
|
13
13
|
urgent: boolean;
|
|
14
14
|
category?: string;
|
|
15
15
|
type?: string;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export type Serialized<T> = T extends Date
|
|
19
|
-
? string
|
|
20
|
-
: T extends Date | undefined
|
|
21
|
-
? string | undefined
|
|
22
|
-
: T extends Date | null
|
|
23
|
-
? string | null
|
|
24
|
-
: T extends (infer U)[]
|
|
25
|
-
? Serialized<U>[]
|
|
26
|
-
: T extends object
|
|
27
|
-
? { [K in keyof T]: Serialized<T[K]> }
|
|
28
|
-
: T;
|
|
29
|
-
|
|
30
|
-
export function serialize<T>(obj: T): Serialized<T> {
|
|
31
|
-
return serializeRecursive(obj) as Serialized<T>;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export function deserialize<T>(obj: Serialized<T>): T {
|
|
35
|
-
return deserializeRecursive(obj) as T;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
function serializeRecursive(obj: any): any {
|
|
39
|
-
if (obj === null || obj === undefined) {
|
|
40
|
-
return obj;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
if (obj instanceof Date) {
|
|
44
|
-
return obj.toISOString();
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
if (Array.isArray(obj)) {
|
|
48
|
-
return obj.map(item => serializeRecursive(item));
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
if (typeof obj === 'object') {
|
|
52
|
-
const result: any = {};
|
|
53
|
-
for (const [key, value] of Object.entries(obj)) {
|
|
54
|
-
result[key] = serializeRecursive(value);
|
|
55
|
-
}
|
|
56
|
-
return result;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
return obj;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
function deserializeRecursive(obj: any): any {
|
|
63
|
-
if (obj === null || obj === undefined) {
|
|
64
|
-
return obj;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
if (typeof obj === 'string' && isISODateString(obj)) {
|
|
68
|
-
return new Date(obj);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
if (Array.isArray(obj)) {
|
|
72
|
-
return obj.map(item => deserializeRecursive(item));
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
if (typeof obj === 'object') {
|
|
76
|
-
const result: any = {};
|
|
77
|
-
for (const [key, value] of Object.entries(obj)) {
|
|
78
|
-
result[key] = deserializeRecursive(value);
|
|
79
|
-
}
|
|
80
|
-
return result;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
return obj;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
function isISODateString(value: string): boolean {
|
|
87
|
-
const isoRegex = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{3})?Z?$/;
|
|
88
|
-
return isoRegex.test(value) && !isNaN(Date.parse(value));
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
export function serializeItemData(item: ItemData): Serialized<ItemData> {
|
|
92
|
-
return serialize(item);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
export function deserializeItemData(apiData: Serialized<ItemData>): ItemData {
|
|
96
|
-
return deserialize(apiData) as unknown as ItemData;
|
|
97
16
|
}
|
package/src/utils/index.ts
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
export * from './date-utils'
|
|
1
|
+
export * from './date-utils'
|
|
2
|
+
export * from './serializing-utils'
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { HabitData, HabitEntryData, ItemData, PersonData, PersonNoteData, TaskData } from "../types";
|
|
2
|
+
|
|
3
|
+
export type Serialized<T> = T extends Date
|
|
4
|
+
? string
|
|
5
|
+
: T extends Date | undefined
|
|
6
|
+
? string | undefined
|
|
7
|
+
: T extends Date | null
|
|
8
|
+
? string | null
|
|
9
|
+
: T extends (infer U)[]
|
|
10
|
+
? Serialized<U>[]
|
|
11
|
+
: T extends object
|
|
12
|
+
? { [K in keyof T]: Serialized<T[K]> }
|
|
13
|
+
: T;
|
|
14
|
+
|
|
15
|
+
export class Serializer {
|
|
16
|
+
static serialize<T>(obj: T): Serialized<T> {
|
|
17
|
+
return serializeRecursive(obj) as Serialized<T>;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
static deserialize<T>(obj: Serialized<T>): T {
|
|
21
|
+
return deserializeRecursive(obj) as T;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
static serializeItemData(data: ItemData): Serialized<ItemData> {
|
|
25
|
+
return this.serialize(data);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
static deserializeItemData(data: Serialized<ItemData>): ItemData {
|
|
29
|
+
return this.deserialize(data) as unknown as ItemData;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
static serializeHabitData(data: HabitData): Serialized<HabitData> {
|
|
33
|
+
return this.serialize(data);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
static deserializeHabitData(data: Serialized<HabitData>): HabitData {
|
|
37
|
+
return this.deserialize(data) as unknown as HabitData;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
static serializeHabitDataEntry(data: HabitEntryData): Serialized<HabitEntryData> {
|
|
41
|
+
return this.serialize(data);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
static deserializeHabitDataEntry(data: Serialized<HabitEntryData>): HabitEntryData {
|
|
45
|
+
return this.deserialize(data) as unknown as HabitEntryData;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
static serializePersonData(data: PersonData): Serialized<PersonData> {
|
|
49
|
+
return this.serialize(data);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
static deserializePersonData(data: Serialized<PersonData>): PersonData {
|
|
53
|
+
return this.deserialize(data) as unknown as PersonData;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
static serializePersonNoteData(data: PersonNoteData): Serialized<PersonNoteData> {
|
|
57
|
+
return this.serialize(data);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
static deserializePersonNoteData(data: Serialized<PersonNoteData>): PersonNoteData {
|
|
61
|
+
return this.deserialize(data) as unknown as PersonNoteData;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
static serializeTaskData(data: TaskData): Serialized<TaskData> {
|
|
65
|
+
return this.serialize(data);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
static deserializeTaskData(data: Serialized<TaskData>): TaskData {
|
|
69
|
+
return this.deserialize(data) as unknown as TaskData;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
static serializeTaskListData(data: TaskData[]): Serialized<TaskData[]> {
|
|
73
|
+
return this.serialize(data);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function serializeRecursive(obj: any): any {
|
|
78
|
+
if (obj === null || obj === undefined) {
|
|
79
|
+
return obj;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
if (obj instanceof Date) {
|
|
83
|
+
return obj.toISOString();
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
if (Array.isArray(obj)) {
|
|
87
|
+
return obj.map(item => serializeRecursive(item));
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
if (typeof obj === 'object') {
|
|
91
|
+
const result: any = {};
|
|
92
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
93
|
+
result[key] = serializeRecursive(value);
|
|
94
|
+
}
|
|
95
|
+
return result;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
return obj;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
function deserializeRecursive(obj: any): any {
|
|
102
|
+
if (obj === null || obj === undefined) {
|
|
103
|
+
return obj;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
if (typeof obj === 'string' && isISODateString(obj)) {
|
|
107
|
+
return new Date(obj);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
if (Array.isArray(obj)) {
|
|
111
|
+
return obj.map(item => deserializeRecursive(item));
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
if (typeof obj === 'object') {
|
|
115
|
+
const result: any = {};
|
|
116
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
117
|
+
result[key] = deserializeRecursive(value);
|
|
118
|
+
}
|
|
119
|
+
return result;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
return obj;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
function isISODateString(value: string): boolean {
|
|
126
|
+
const isoRegex = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{3})?Z?$/;
|
|
127
|
+
return isoRegex.test(value) && !isNaN(Date.parse(value));
|
|
128
|
+
}
|