@baasix/types 1.0.4 → 1.0.6
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/index.d.mts +10 -0
- package/dist/index.d.ts +10 -0
- package/package.json +1 -1
- package/src/common.ts +244 -241
- package/src/schema.ts +7 -0
package/dist/index.d.mts
CHANGED
|
@@ -410,6 +410,13 @@ interface SchemaDefinition {
|
|
|
410
410
|
timestamps?: boolean;
|
|
411
411
|
paranoid?: boolean;
|
|
412
412
|
sortEnabled?: boolean;
|
|
413
|
+
/**
|
|
414
|
+
* Controls tenant context enforcement for this collection.
|
|
415
|
+
* - true: enforce tenant scoping
|
|
416
|
+
* - false: global/shared collection (no tenant enforcement)
|
|
417
|
+
* - undefined: use default runtime behavior
|
|
418
|
+
*/
|
|
419
|
+
tenantScoped?: boolean;
|
|
413
420
|
/**
|
|
414
421
|
* Track user who created/updated records (adds createdBy_Id, updatedBy_Id)
|
|
415
422
|
*/
|
|
@@ -1394,6 +1401,9 @@ interface BackgroundTask {
|
|
|
1394
1401
|
id: string | number;
|
|
1395
1402
|
task_status: string;
|
|
1396
1403
|
scheduled_time: Date;
|
|
1404
|
+
max_retries?: number;
|
|
1405
|
+
retry_count?: number;
|
|
1406
|
+
started_at?: Date | null;
|
|
1397
1407
|
[key: string]: unknown;
|
|
1398
1408
|
}
|
|
1399
1409
|
/**
|
package/dist/index.d.ts
CHANGED
|
@@ -410,6 +410,13 @@ interface SchemaDefinition {
|
|
|
410
410
|
timestamps?: boolean;
|
|
411
411
|
paranoid?: boolean;
|
|
412
412
|
sortEnabled?: boolean;
|
|
413
|
+
/**
|
|
414
|
+
* Controls tenant context enforcement for this collection.
|
|
415
|
+
* - true: enforce tenant scoping
|
|
416
|
+
* - false: global/shared collection (no tenant enforcement)
|
|
417
|
+
* - undefined: use default runtime behavior
|
|
418
|
+
*/
|
|
419
|
+
tenantScoped?: boolean;
|
|
413
420
|
/**
|
|
414
421
|
* Track user who created/updated records (adds createdBy_Id, updatedBy_Id)
|
|
415
422
|
*/
|
|
@@ -1394,6 +1401,9 @@ interface BackgroundTask {
|
|
|
1394
1401
|
id: string | number;
|
|
1395
1402
|
task_status: string;
|
|
1396
1403
|
scheduled_time: Date;
|
|
1404
|
+
max_retries?: number;
|
|
1405
|
+
retry_count?: number;
|
|
1406
|
+
started_at?: Date | null;
|
|
1397
1407
|
[key: string]: unknown;
|
|
1398
1408
|
}
|
|
1399
1409
|
/**
|
package/package.json
CHANGED
package/src/common.ts
CHANGED
|
@@ -1,241 +1,244 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Common/Utility Types
|
|
3
|
-
* Shared across all packages
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
// ============================================================================
|
|
7
|
-
// Base Types
|
|
8
|
-
// ============================================================================
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Generic record type with ID
|
|
12
|
-
*/
|
|
13
|
-
export interface BaseItem {
|
|
14
|
-
id: string;
|
|
15
|
-
createdAt?: string;
|
|
16
|
-
updatedAt?: string;
|
|
17
|
-
deletedAt?: string;
|
|
18
|
-
[key: string]: unknown;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Timestamped item
|
|
23
|
-
*/
|
|
24
|
-
export interface TimestampedItem {
|
|
25
|
-
createdAt: string;
|
|
26
|
-
updatedAt?: string;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Soft deletable item
|
|
31
|
-
*/
|
|
32
|
-
export interface SoftDeletableItem {
|
|
33
|
-
deletedAt?: string | null;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
// ============================================================================
|
|
37
|
-
// Utility Types
|
|
38
|
-
// ============================================================================
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Make all properties of T optional recursively
|
|
42
|
-
*/
|
|
43
|
-
export type DeepPartial<T> = {
|
|
44
|
-
[P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* Extract the item type from a collection
|
|
49
|
-
*/
|
|
50
|
-
export type CollectionItem<T> = T extends Array<infer U> ? U : T;
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* Make specific properties required
|
|
54
|
-
*/
|
|
55
|
-
export type WithRequired<T, K extends keyof T> = T & { [P in K]-?: T[P] };
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* Make specific properties optional
|
|
59
|
-
*/
|
|
60
|
-
export type WithOptional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Extract keys of T that have values of type V
|
|
64
|
-
*/
|
|
65
|
-
export type KeysOfType<T, V> = { [K in keyof T]: T[K] extends V ? K : never }[keyof T];
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Record with string keys and unknown values
|
|
69
|
-
*/
|
|
70
|
-
export type AnyRecord = Record<string, unknown>;
|
|
71
|
-
|
|
72
|
-
// ============================================================================
|
|
73
|
-
// Settings Types
|
|
74
|
-
// ============================================================================
|
|
75
|
-
|
|
76
|
-
/**
|
|
77
|
-
* Generic settings
|
|
78
|
-
*/
|
|
79
|
-
export interface Settings {
|
|
80
|
-
[key: string]: unknown;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* Tenant settings
|
|
85
|
-
*/
|
|
86
|
-
export interface TenantSettings {
|
|
87
|
-
tenant_Id?: string | number | null;
|
|
88
|
-
project_name?: string;
|
|
89
|
-
title?: string;
|
|
90
|
-
project_url?: string | null;
|
|
91
|
-
app_url?: string | null;
|
|
92
|
-
project_color?: string;
|
|
93
|
-
secondary_color?: string;
|
|
94
|
-
description?: string;
|
|
95
|
-
keywords?: string;
|
|
96
|
-
from_email_name?: string;
|
|
97
|
-
smtp_enabled?: boolean;
|
|
98
|
-
smtp_host?: string;
|
|
99
|
-
smtp_port?: number;
|
|
100
|
-
smtp_secure?: boolean;
|
|
101
|
-
smtp_user?: string;
|
|
102
|
-
smtp_pass?: string;
|
|
103
|
-
smtp_from_address?: string;
|
|
104
|
-
timezone?: string;
|
|
105
|
-
language?: string;
|
|
106
|
-
date_format?: string;
|
|
107
|
-
currency?: string;
|
|
108
|
-
email_signature?: string;
|
|
109
|
-
email_icon?: any;
|
|
110
|
-
metadata?: Record<string, any>;
|
|
111
|
-
modules?: Record<string, any>;
|
|
112
|
-
[key: string]: any;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
// ============================================================================
|
|
116
|
-
// Task Types
|
|
117
|
-
// ============================================================================
|
|
118
|
-
|
|
119
|
-
/**
|
|
120
|
-
* Background task
|
|
121
|
-
*/
|
|
122
|
-
export interface BackgroundTask {
|
|
123
|
-
id: string | number;
|
|
124
|
-
task_status: string;
|
|
125
|
-
scheduled_time: Date;
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
| "items.
|
|
141
|
-
| "
|
|
142
|
-
| "
|
|
143
|
-
| "
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Common/Utility Types
|
|
3
|
+
* Shared across all packages
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
// ============================================================================
|
|
7
|
+
// Base Types
|
|
8
|
+
// ============================================================================
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Generic record type with ID
|
|
12
|
+
*/
|
|
13
|
+
export interface BaseItem {
|
|
14
|
+
id: string;
|
|
15
|
+
createdAt?: string;
|
|
16
|
+
updatedAt?: string;
|
|
17
|
+
deletedAt?: string;
|
|
18
|
+
[key: string]: unknown;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Timestamped item
|
|
23
|
+
*/
|
|
24
|
+
export interface TimestampedItem {
|
|
25
|
+
createdAt: string;
|
|
26
|
+
updatedAt?: string;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Soft deletable item
|
|
31
|
+
*/
|
|
32
|
+
export interface SoftDeletableItem {
|
|
33
|
+
deletedAt?: string | null;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// ============================================================================
|
|
37
|
+
// Utility Types
|
|
38
|
+
// ============================================================================
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Make all properties of T optional recursively
|
|
42
|
+
*/
|
|
43
|
+
export type DeepPartial<T> = {
|
|
44
|
+
[P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Extract the item type from a collection
|
|
49
|
+
*/
|
|
50
|
+
export type CollectionItem<T> = T extends Array<infer U> ? U : T;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Make specific properties required
|
|
54
|
+
*/
|
|
55
|
+
export type WithRequired<T, K extends keyof T> = T & { [P in K]-?: T[P] };
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Make specific properties optional
|
|
59
|
+
*/
|
|
60
|
+
export type WithOptional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Extract keys of T that have values of type V
|
|
64
|
+
*/
|
|
65
|
+
export type KeysOfType<T, V> = { [K in keyof T]: T[K] extends V ? K : never }[keyof T];
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Record with string keys and unknown values
|
|
69
|
+
*/
|
|
70
|
+
export type AnyRecord = Record<string, unknown>;
|
|
71
|
+
|
|
72
|
+
// ============================================================================
|
|
73
|
+
// Settings Types
|
|
74
|
+
// ============================================================================
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Generic settings
|
|
78
|
+
*/
|
|
79
|
+
export interface Settings {
|
|
80
|
+
[key: string]: unknown;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Tenant settings
|
|
85
|
+
*/
|
|
86
|
+
export interface TenantSettings {
|
|
87
|
+
tenant_Id?: string | number | null;
|
|
88
|
+
project_name?: string;
|
|
89
|
+
title?: string;
|
|
90
|
+
project_url?: string | null;
|
|
91
|
+
app_url?: string | null;
|
|
92
|
+
project_color?: string;
|
|
93
|
+
secondary_color?: string;
|
|
94
|
+
description?: string;
|
|
95
|
+
keywords?: string;
|
|
96
|
+
from_email_name?: string;
|
|
97
|
+
smtp_enabled?: boolean;
|
|
98
|
+
smtp_host?: string;
|
|
99
|
+
smtp_port?: number;
|
|
100
|
+
smtp_secure?: boolean;
|
|
101
|
+
smtp_user?: string;
|
|
102
|
+
smtp_pass?: string;
|
|
103
|
+
smtp_from_address?: string;
|
|
104
|
+
timezone?: string;
|
|
105
|
+
language?: string;
|
|
106
|
+
date_format?: string;
|
|
107
|
+
currency?: string;
|
|
108
|
+
email_signature?: string;
|
|
109
|
+
email_icon?: any;
|
|
110
|
+
metadata?: Record<string, any>;
|
|
111
|
+
modules?: Record<string, any>;
|
|
112
|
+
[key: string]: any;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// ============================================================================
|
|
116
|
+
// Task Types
|
|
117
|
+
// ============================================================================
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Background task
|
|
121
|
+
*/
|
|
122
|
+
export interface BackgroundTask {
|
|
123
|
+
id: string | number;
|
|
124
|
+
task_status: string;
|
|
125
|
+
scheduled_time: Date;
|
|
126
|
+
max_retries?: number;
|
|
127
|
+
retry_count?: number;
|
|
128
|
+
started_at?: Date | null;
|
|
129
|
+
[key: string]: unknown;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// ============================================================================
|
|
133
|
+
// Hook Types
|
|
134
|
+
// ============================================================================
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Hook events
|
|
138
|
+
*/
|
|
139
|
+
export type HookEvent =
|
|
140
|
+
| "items.create"
|
|
141
|
+
| "items.read"
|
|
142
|
+
| "items.update"
|
|
143
|
+
| "items.delete"
|
|
144
|
+
| "auth.login"
|
|
145
|
+
| "auth.logout"
|
|
146
|
+
| "auth.register";
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Hook handler context
|
|
150
|
+
*/
|
|
151
|
+
export interface HookContext {
|
|
152
|
+
event: HookEvent;
|
|
153
|
+
collection?: string;
|
|
154
|
+
payload?: unknown;
|
|
155
|
+
keys?: string[];
|
|
156
|
+
accountability?: {
|
|
157
|
+
user?: { id: string };
|
|
158
|
+
role?: { id: string; name: string };
|
|
159
|
+
tenant?: { id: string };
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Hook handler function
|
|
165
|
+
*/
|
|
166
|
+
export type HookHandler = (context: HookContext) => void | Promise<void>;
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Hook definition
|
|
170
|
+
*/
|
|
171
|
+
export interface Hook {
|
|
172
|
+
event: HookEvent;
|
|
173
|
+
collection?: string;
|
|
174
|
+
handler: HookHandler;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// ============================================================================
|
|
178
|
+
// HTTP Types
|
|
179
|
+
// ============================================================================
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* HTTP methods
|
|
183
|
+
*/
|
|
184
|
+
export type HttpMethod = "GET" | "POST" | "PUT" | "PATCH" | "DELETE" | "OPTIONS" | "HEAD";
|
|
185
|
+
|
|
186
|
+
// ============================================================================
|
|
187
|
+
// Mail Types
|
|
188
|
+
// ============================================================================
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* Mail options for sending emails
|
|
192
|
+
*/
|
|
193
|
+
export interface MailOptions {
|
|
194
|
+
to: string | string[];
|
|
195
|
+
subject: string;
|
|
196
|
+
html?: string;
|
|
197
|
+
text?: string;
|
|
198
|
+
from?: string;
|
|
199
|
+
cc?: string | string[];
|
|
200
|
+
bcc?: string | string[];
|
|
201
|
+
replyTo?: string;
|
|
202
|
+
attachments?: Array<{
|
|
203
|
+
filename: string;
|
|
204
|
+
content?: string | Buffer;
|
|
205
|
+
path?: string;
|
|
206
|
+
contentType?: string;
|
|
207
|
+
}>;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* Sender configuration for email
|
|
212
|
+
*/
|
|
213
|
+
export interface SenderConfig {
|
|
214
|
+
from: string;
|
|
215
|
+
name?: string;
|
|
216
|
+
replyTo?: string;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
// ============================================================================
|
|
220
|
+
// Seed Types
|
|
221
|
+
// ============================================================================
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* Seed data configuration
|
|
225
|
+
*/
|
|
226
|
+
export interface SeedData {
|
|
227
|
+
collection: string;
|
|
228
|
+
data: Record<string, unknown> | Record<string, unknown>[];
|
|
229
|
+
/** Whether to clear existing data before seeding */
|
|
230
|
+
clearBefore?: boolean;
|
|
231
|
+
/** Whether to skip if data already exists (check by unique fields) */
|
|
232
|
+
skipDuplicates?: boolean;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* Seed operation result
|
|
237
|
+
*/
|
|
238
|
+
export interface SeedResult {
|
|
239
|
+
collection: string;
|
|
240
|
+
created: number;
|
|
241
|
+
skipped: number;
|
|
242
|
+
errors: number;
|
|
243
|
+
errorDetails?: Array<{ item: unknown; error: string }>;
|
|
244
|
+
}
|
package/src/schema.ts
CHANGED
|
@@ -205,6 +205,13 @@ export interface SchemaDefinition {
|
|
|
205
205
|
timestamps?: boolean;
|
|
206
206
|
paranoid?: boolean;
|
|
207
207
|
sortEnabled?: boolean;
|
|
208
|
+
/**
|
|
209
|
+
* Controls tenant context enforcement for this collection.
|
|
210
|
+
* - true: enforce tenant scoping
|
|
211
|
+
* - false: global/shared collection (no tenant enforcement)
|
|
212
|
+
* - undefined: use default runtime behavior
|
|
213
|
+
*/
|
|
214
|
+
tenantScoped?: boolean;
|
|
208
215
|
/**
|
|
209
216
|
* Track user who created/updated records (adds createdBy_Id, updatedBy_Id)
|
|
210
217
|
*/
|