@revealui/contracts 1.0.0
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/LICENSE +22 -0
- package/README.md +160 -0
- package/dist/a2a/index.d.ts +383 -0
- package/dist/a2a/index.d.ts.map +1 -0
- package/dist/a2a/index.js +276 -0
- package/dist/a2a/index.js.map +1 -0
- package/dist/actions/action-validator.d.ts +48 -0
- package/dist/actions/action-validator.d.ts.map +1 -0
- package/dist/actions/action-validator.js +288 -0
- package/dist/actions/action-validator.js.map +1 -0
- package/dist/actions/index.d.ts +7 -0
- package/dist/actions/index.d.ts.map +1 -0
- package/dist/actions/index.js +7 -0
- package/dist/actions/index.js.map +1 -0
- package/dist/agents/index.d.ts +628 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +511 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/types.d.ts +22 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +2 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/api/auth.d.ts +60 -0
- package/dist/api/auth.d.ts.map +1 -0
- package/dist/api/auth.js +84 -0
- package/dist/api/auth.js.map +1 -0
- package/dist/api/chat.d.ts +45 -0
- package/dist/api/chat.d.ts.map +1 -0
- package/dist/api/chat.js +55 -0
- package/dist/api/chat.js.map +1 -0
- package/dist/api/gdpr.d.ts +39 -0
- package/dist/api/gdpr.d.ts.map +1 -0
- package/dist/api/gdpr.js +53 -0
- package/dist/api/gdpr.js.map +1 -0
- package/dist/cms/collection.d.ts +108 -0
- package/dist/cms/collection.d.ts.map +1 -0
- package/dist/cms/collection.js +144 -0
- package/dist/cms/collection.js.map +1 -0
- package/dist/cms/compat.d.ts +128 -0
- package/dist/cms/compat.d.ts.map +1 -0
- package/dist/cms/compat.js +141 -0
- package/dist/cms/compat.js.map +1 -0
- package/dist/cms/config-contract.d.ts +278 -0
- package/dist/cms/config-contract.d.ts.map +1 -0
- package/dist/cms/config-contract.js +220 -0
- package/dist/cms/config-contract.js.map +1 -0
- package/dist/cms/config.d.ts +351 -0
- package/dist/cms/config.d.ts.map +1 -0
- package/dist/cms/config.js +50 -0
- package/dist/cms/config.js.map +1 -0
- package/dist/cms/errors.d.ts +122 -0
- package/dist/cms/errors.d.ts.map +1 -0
- package/dist/cms/errors.js +163 -0
- package/dist/cms/errors.js.map +1 -0
- package/dist/cms/extensibility.d.ts +211 -0
- package/dist/cms/extensibility.d.ts.map +1 -0
- package/dist/cms/extensibility.js +313 -0
- package/dist/cms/extensibility.js.map +1 -0
- package/dist/cms/field.d.ts +69 -0
- package/dist/cms/field.d.ts.map +1 -0
- package/dist/cms/field.js +94 -0
- package/dist/cms/field.js.map +1 -0
- package/dist/cms/functions.d.ts +466 -0
- package/dist/cms/functions.d.ts.map +1 -0
- package/dist/cms/functions.js +19 -0
- package/dist/cms/functions.js.map +1 -0
- package/dist/cms/global.d.ts +45 -0
- package/dist/cms/global.d.ts.map +1 -0
- package/dist/cms/global.js +62 -0
- package/dist/cms/global.js.map +1 -0
- package/dist/cms/index.d.ts +23 -0
- package/dist/cms/index.d.ts.map +1 -0
- package/dist/cms/index.js +42 -0
- package/dist/cms/index.js.map +1 -0
- package/dist/cms/structure.d.ts +1601 -0
- package/dist/cms/structure.d.ts.map +1 -0
- package/dist/cms/structure.js +757 -0
- package/dist/cms/structure.js.map +1 -0
- package/dist/content/index.d.ts +1542 -0
- package/dist/content/index.d.ts.map +1 -0
- package/dist/content/index.js +522 -0
- package/dist/content/index.js.map +1 -0
- package/dist/database/bridge.d.ts +177 -0
- package/dist/database/bridge.d.ts.map +1 -0
- package/dist/database/bridge.js +139 -0
- package/dist/database/bridge.js.map +1 -0
- package/dist/database/index.d.ts +8 -0
- package/dist/database/index.d.ts.map +1 -0
- package/dist/database/index.js +9 -0
- package/dist/database/index.js.map +1 -0
- package/dist/database/type-bridge.d.ts +178 -0
- package/dist/database/type-bridge.d.ts.map +1 -0
- package/dist/database/type-bridge.js +154 -0
- package/dist/database/type-bridge.js.map +1 -0
- package/dist/entities/agent-context.d.ts +280 -0
- package/dist/entities/agent-context.d.ts.map +1 -0
- package/dist/entities/agent-context.js +390 -0
- package/dist/entities/agent-context.js.map +1 -0
- package/dist/entities/agent-memory.d.ts +661 -0
- package/dist/entities/agent-memory.d.ts.map +1 -0
- package/dist/entities/agent-memory.js +544 -0
- package/dist/entities/agent-memory.js.map +1 -0
- package/dist/entities/board.d.ts +95 -0
- package/dist/entities/board.d.ts.map +1 -0
- package/dist/entities/board.js +99 -0
- package/dist/entities/board.js.map +1 -0
- package/dist/entities/code-provenance.d.ts +270 -0
- package/dist/entities/code-provenance.d.ts.map +1 -0
- package/dist/entities/code-provenance.js +339 -0
- package/dist/entities/code-provenance.js.map +1 -0
- package/dist/entities/index.d.ts +22 -0
- package/dist/entities/index.d.ts.map +1 -0
- package/dist/entities/index.js +22 -0
- package/dist/entities/index.js.map +1 -0
- package/dist/entities/media.d.ts +485 -0
- package/dist/entities/media.d.ts.map +1 -0
- package/dist/entities/media.js +606 -0
- package/dist/entities/media.js.map +1 -0
- package/dist/entities/page-revision.d.ts +390 -0
- package/dist/entities/page-revision.d.ts.map +1 -0
- package/dist/entities/page-revision.js +406 -0
- package/dist/entities/page-revision.js.map +1 -0
- package/dist/entities/page.d.ts +2349 -0
- package/dist/entities/page.d.ts.map +1 -0
- package/dist/entities/page.js +377 -0
- package/dist/entities/page.js.map +1 -0
- package/dist/entities/post.d.ts +619 -0
- package/dist/entities/post.d.ts.map +1 -0
- package/dist/entities/post.js +555 -0
- package/dist/entities/post.js.map +1 -0
- package/dist/entities/price.d.ts +772 -0
- package/dist/entities/price.d.ts.map +1 -0
- package/dist/entities/price.js +308 -0
- package/dist/entities/price.js.map +1 -0
- package/dist/entities/product.d.ts +753 -0
- package/dist/entities/product.d.ts.map +1 -0
- package/dist/entities/product.js +307 -0
- package/dist/entities/product.js.map +1 -0
- package/dist/entities/session.d.ts +222 -0
- package/dist/entities/session.d.ts.map +1 -0
- package/dist/entities/session.js +253 -0
- package/dist/entities/session.js.map +1 -0
- package/dist/entities/site.d.ts +387 -0
- package/dist/entities/site.d.ts.map +1 -0
- package/dist/entities/site.js +348 -0
- package/dist/entities/site.js.map +1 -0
- package/dist/entities/ticket-comment.d.ts +49 -0
- package/dist/entities/ticket-comment.d.ts.map +1 -0
- package/dist/entities/ticket-comment.js +58 -0
- package/dist/entities/ticket-comment.js.map +1 -0
- package/dist/entities/ticket-label.d.ts +64 -0
- package/dist/entities/ticket-label.d.ts.map +1 -0
- package/dist/entities/ticket-label.js +77 -0
- package/dist/entities/ticket-label.js.map +1 -0
- package/dist/entities/ticket.d.ts +204 -0
- package/dist/entities/ticket.d.ts.map +1 -0
- package/dist/entities/ticket.js +205 -0
- package/dist/entities/ticket.js.map +1 -0
- package/dist/entities/user.d.ts +336 -0
- package/dist/entities/user.d.ts.map +1 -0
- package/dist/entities/user.js +255 -0
- package/dist/entities/user.js.map +1 -0
- package/dist/foundation/contract.d.ts +221 -0
- package/dist/foundation/contract.d.ts.map +1 -0
- package/dist/foundation/contract.js +133 -0
- package/dist/foundation/contract.js.map +1 -0
- package/dist/foundation/index.d.ts +7 -0
- package/dist/foundation/index.d.ts.map +1 -0
- package/dist/foundation/index.js +7 -0
- package/dist/foundation/index.js.map +1 -0
- package/dist/generated/contracts.d.ts +1514 -0
- package/dist/generated/contracts.d.ts.map +1 -0
- package/dist/generated/contracts.js +959 -0
- package/dist/generated/contracts.js.map +1 -0
- package/dist/generated/database.d.ts +48 -0
- package/dist/generated/database.d.ts.map +1 -0
- package/dist/generated/database.js +17 -0
- package/dist/generated/database.js.map +1 -0
- package/dist/generated/zod-schemas.d.ts +14793 -0
- package/dist/generated/zod-schemas.d.ts.map +1 -0
- package/dist/generated/zod-schemas.js +547 -0
- package/dist/generated/zod-schemas.js.map +1 -0
- package/dist/index.d.ts +50 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +81 -0
- package/dist/index.js.map +1 -0
- package/dist/representation/index.d.ts +304 -0
- package/dist/representation/index.d.ts.map +1 -0
- package/dist/representation/index.js +280 -0
- package/dist/representation/index.js.map +1 -0
- package/package.json +117 -0
package/dist/api/auth.js
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Authentication API Contracts
|
|
3
|
+
*
|
|
4
|
+
* Validation contracts for authentication endpoints
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod/v4';
|
|
7
|
+
import { createContract } from '../foundation/contract.js';
|
|
8
|
+
/**
|
|
9
|
+
* Sign-up request validation
|
|
10
|
+
*
|
|
11
|
+
* Validates user registration data with:
|
|
12
|
+
* - Email format validation and sanitization
|
|
13
|
+
* - Password strength requirements (min 8 chars)
|
|
14
|
+
* - Name validation and sanitization
|
|
15
|
+
*/
|
|
16
|
+
export const SignUpRequestSchema = z.object({
|
|
17
|
+
email: z
|
|
18
|
+
.string()
|
|
19
|
+
.min(1, 'Email is required')
|
|
20
|
+
.email('Invalid email format')
|
|
21
|
+
.transform((email) => email.toLowerCase().trim()),
|
|
22
|
+
password: z.string().min(8, 'Password must be at least 8 characters long'),
|
|
23
|
+
name: z
|
|
24
|
+
.string()
|
|
25
|
+
.min(1, 'Name is required')
|
|
26
|
+
.max(100, 'Name must be less than 100 characters')
|
|
27
|
+
.transform((name) => name
|
|
28
|
+
.replace(/<[^>]*>/g, '')
|
|
29
|
+
.trim()
|
|
30
|
+
.replace(/\s+/g, ' ')),
|
|
31
|
+
});
|
|
32
|
+
export const SignUpRequestContract = createContract({
|
|
33
|
+
name: 'SignUpRequest',
|
|
34
|
+
version: '1',
|
|
35
|
+
description: 'Validates user sign-up request data',
|
|
36
|
+
schema: SignUpRequestSchema,
|
|
37
|
+
});
|
|
38
|
+
/**
|
|
39
|
+
* Sign-in request validation
|
|
40
|
+
*/
|
|
41
|
+
export const SignInRequestSchema = z.object({
|
|
42
|
+
email: z
|
|
43
|
+
.string()
|
|
44
|
+
.min(1, 'Email is required')
|
|
45
|
+
.email('Invalid email format')
|
|
46
|
+
.transform((email) => email.toLowerCase().trim()),
|
|
47
|
+
password: z.string().min(1, 'Password is required'),
|
|
48
|
+
});
|
|
49
|
+
export const SignInRequestContract = createContract({
|
|
50
|
+
name: 'SignInRequest',
|
|
51
|
+
version: '1',
|
|
52
|
+
description: 'Validates user sign-in request data',
|
|
53
|
+
schema: SignInRequestSchema,
|
|
54
|
+
});
|
|
55
|
+
/**
|
|
56
|
+
* Password reset request validation
|
|
57
|
+
*/
|
|
58
|
+
export const PasswordResetRequestSchema = z.object({
|
|
59
|
+
email: z
|
|
60
|
+
.string()
|
|
61
|
+
.min(1, 'Email is required')
|
|
62
|
+
.email('Invalid email format')
|
|
63
|
+
.transform((email) => email.toLowerCase().trim()),
|
|
64
|
+
});
|
|
65
|
+
export const PasswordResetRequestContract = createContract({
|
|
66
|
+
name: 'PasswordResetRequest',
|
|
67
|
+
version: '1',
|
|
68
|
+
description: 'Validates password reset request data',
|
|
69
|
+
schema: PasswordResetRequestSchema,
|
|
70
|
+
});
|
|
71
|
+
/**
|
|
72
|
+
* Password reset with token validation
|
|
73
|
+
*/
|
|
74
|
+
export const PasswordResetTokenSchema = z.object({
|
|
75
|
+
token: z.string().min(1, 'Token is required'),
|
|
76
|
+
password: z.string().min(8, 'Password must be at least 8 characters long'),
|
|
77
|
+
});
|
|
78
|
+
export const PasswordResetTokenContract = createContract({
|
|
79
|
+
name: 'PasswordResetToken',
|
|
80
|
+
version: '1',
|
|
81
|
+
description: 'Validates password reset with token data',
|
|
82
|
+
schema: PasswordResetTokenSchema,
|
|
83
|
+
});
|
|
84
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/api/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chat API Contracts
|
|
3
|
+
*
|
|
4
|
+
* Validation contracts for chat/AI endpoints
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod/v4';
|
|
7
|
+
/**
|
|
8
|
+
* Chat message schema
|
|
9
|
+
*/
|
|
10
|
+
export declare const ChatMessageSchema: z.ZodObject<{
|
|
11
|
+
role: z.ZodEnum<{
|
|
12
|
+
system: "system";
|
|
13
|
+
user: "user";
|
|
14
|
+
assistant: "assistant";
|
|
15
|
+
}>;
|
|
16
|
+
content: z.ZodString;
|
|
17
|
+
}, z.core.$strip>;
|
|
18
|
+
export type ChatMessage = z.infer<typeof ChatMessageSchema>;
|
|
19
|
+
/**
|
|
20
|
+
* Chat request validation
|
|
21
|
+
*
|
|
22
|
+
* Validates chat request with:
|
|
23
|
+
* - Non-empty array of messages
|
|
24
|
+
* - Each message has role and content
|
|
25
|
+
* - Last message must be from user
|
|
26
|
+
* - Last message content max 4000 characters
|
|
27
|
+
*/
|
|
28
|
+
export declare const ChatRequestSchema: z.ZodObject<{
|
|
29
|
+
messages: z.ZodArray<z.ZodObject<{
|
|
30
|
+
role: z.ZodEnum<{
|
|
31
|
+
system: "system";
|
|
32
|
+
user: "user";
|
|
33
|
+
assistant: "assistant";
|
|
34
|
+
}>;
|
|
35
|
+
content: z.ZodString;
|
|
36
|
+
}, z.core.$strip>>;
|
|
37
|
+
}, z.core.$strip>;
|
|
38
|
+
export type ChatRequest = z.infer<typeof ChatRequestSchema>;
|
|
39
|
+
export declare const ChatRequestContract: import("../index.js").Contract<{
|
|
40
|
+
messages: {
|
|
41
|
+
role: "system" | "user" | "assistant";
|
|
42
|
+
content: string;
|
|
43
|
+
}[];
|
|
44
|
+
}>;
|
|
45
|
+
//# sourceMappingURL=chat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/api/chat.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAG1B;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;iBAG5B,CAAA;AAEF,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAE3D;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;iBAiC3B,CAAA;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAE3D,eAAO,MAAM,mBAAmB;;;;;EAK9B,CAAA"}
|
package/dist/api/chat.js
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chat API Contracts
|
|
3
|
+
*
|
|
4
|
+
* Validation contracts for chat/AI endpoints
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod/v4';
|
|
7
|
+
import { createContract } from '../foundation/contract.js';
|
|
8
|
+
/**
|
|
9
|
+
* Chat message schema
|
|
10
|
+
*/
|
|
11
|
+
export const ChatMessageSchema = z.object({
|
|
12
|
+
role: z.enum(['user', 'assistant', 'system']),
|
|
13
|
+
content: z.string().min(1, 'Message content cannot be empty'),
|
|
14
|
+
});
|
|
15
|
+
/**
|
|
16
|
+
* Chat request validation
|
|
17
|
+
*
|
|
18
|
+
* Validates chat request with:
|
|
19
|
+
* - Non-empty array of messages
|
|
20
|
+
* - Each message has role and content
|
|
21
|
+
* - Last message must be from user
|
|
22
|
+
* - Last message content max 4000 characters
|
|
23
|
+
*/
|
|
24
|
+
export const ChatRequestSchema = z
|
|
25
|
+
.object({
|
|
26
|
+
messages: z.array(ChatMessageSchema).min(1, 'Messages must be a non-empty array'),
|
|
27
|
+
})
|
|
28
|
+
.refine((data) => {
|
|
29
|
+
const lastMessage = data.messages[data.messages.length - 1];
|
|
30
|
+
return lastMessage?.role === 'user';
|
|
31
|
+
}, {
|
|
32
|
+
message: 'Last message must be from user',
|
|
33
|
+
path: ['messages'],
|
|
34
|
+
})
|
|
35
|
+
.refine((data) => {
|
|
36
|
+
const lastMessage = data.messages[data.messages.length - 1];
|
|
37
|
+
return lastMessage && lastMessage.content.trim().length > 0;
|
|
38
|
+
}, {
|
|
39
|
+
message: 'Message content must be a non-empty string',
|
|
40
|
+
path: ['messages'],
|
|
41
|
+
})
|
|
42
|
+
.refine((data) => {
|
|
43
|
+
const lastMessage = data.messages[data.messages.length - 1];
|
|
44
|
+
return lastMessage && lastMessage.content.length <= 4000;
|
|
45
|
+
}, {
|
|
46
|
+
message: 'Message too long (max 4000 characters)',
|
|
47
|
+
path: ['messages'],
|
|
48
|
+
});
|
|
49
|
+
export const ChatRequestContract = createContract({
|
|
50
|
+
name: 'ChatRequest',
|
|
51
|
+
version: '1',
|
|
52
|
+
description: 'Validates chat request with messages',
|
|
53
|
+
schema: ChatRequestSchema,
|
|
54
|
+
});
|
|
55
|
+
//# sourceMappingURL=chat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/api/chat.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAE1D;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;IAC7C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,iCAAiC,CAAC;CAC9D,CAAC,CAAA;AAIF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC;KAC/B,MAAM,CAAC;IACN,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,oCAAoC,CAAC;CAClF,CAAC;KACD,MAAM,CACL,CAAC,IAAI,EAAE,EAAE;IACP,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAC3D,OAAO,WAAW,EAAE,IAAI,KAAK,MAAM,CAAA;AACrC,CAAC,EACD;IACE,OAAO,EAAE,gCAAgC;IACzC,IAAI,EAAE,CAAC,UAAU,CAAC;CACnB,CACF;KACA,MAAM,CACL,CAAC,IAAI,EAAE,EAAE;IACP,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAC3D,OAAO,WAAW,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAA;AAC7D,CAAC,EACD;IACE,OAAO,EAAE,4CAA4C;IACrD,IAAI,EAAE,CAAC,UAAU,CAAC;CACnB,CACF;KACA,MAAM,CACL,CAAC,IAAI,EAAE,EAAE;IACP,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAC3D,OAAO,WAAW,IAAI,WAAW,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAA;AAC1D,CAAC,EACD;IACE,OAAO,EAAE,wCAAwC;IACjD,IAAI,EAAE,CAAC,UAAU,CAAC;CACnB,CACF,CAAA;AAIH,MAAM,CAAC,MAAM,mBAAmB,GAAG,cAAc,CAAC;IAChD,IAAI,EAAE,aAAa;IACnB,OAAO,EAAE,GAAG;IACZ,WAAW,EAAE,sCAAsC;IACnD,MAAM,EAAE,iBAAiB;CAC1B,CAAC,CAAA"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GDPR API Contracts
|
|
3
|
+
*
|
|
4
|
+
* Validation contracts for GDPR/privacy endpoints (data export, deletion)
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod/v4';
|
|
7
|
+
/**
|
|
8
|
+
* GDPR Data Export Request validation
|
|
9
|
+
*
|
|
10
|
+
* Validates data export request with userId OR email (at least one required)
|
|
11
|
+
*/
|
|
12
|
+
export declare const GDPRExportRequestSchema: z.ZodObject<{
|
|
13
|
+
userId: z.ZodOptional<z.ZodString>;
|
|
14
|
+
email: z.ZodOptional<z.ZodString>;
|
|
15
|
+
}, z.core.$strip>;
|
|
16
|
+
export type GDPRExportRequest = z.infer<typeof GDPRExportRequestSchema>;
|
|
17
|
+
export declare const GDPRExportRequestContract: import("../index.js").Contract<{
|
|
18
|
+
userId?: string | undefined;
|
|
19
|
+
email?: string | undefined;
|
|
20
|
+
}>;
|
|
21
|
+
/**
|
|
22
|
+
* GDPR Data Deletion Request validation
|
|
23
|
+
*
|
|
24
|
+
* Validates data deletion request with:
|
|
25
|
+
* - userId OR email (at least one required)
|
|
26
|
+
* - confirmation must equal "DELETE" (security measure)
|
|
27
|
+
*/
|
|
28
|
+
export declare const GDPRDeleteRequestSchema: z.ZodObject<{
|
|
29
|
+
userId: z.ZodOptional<z.ZodString>;
|
|
30
|
+
email: z.ZodOptional<z.ZodString>;
|
|
31
|
+
confirmation: z.ZodLiteral<"DELETE">;
|
|
32
|
+
}, z.core.$strip>;
|
|
33
|
+
export type GDPRDeleteRequest = z.infer<typeof GDPRDeleteRequestSchema>;
|
|
34
|
+
export declare const GDPRDeleteRequestContract: import("../index.js").Contract<{
|
|
35
|
+
confirmation: "DELETE";
|
|
36
|
+
userId?: string | undefined;
|
|
37
|
+
email?: string | undefined;
|
|
38
|
+
}>;
|
|
39
|
+
//# sourceMappingURL=gdpr.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gdpr.d.ts","sourceRoot":"","sources":["../../src/api/gdpr.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAG1B;;;;GAIG;AACH,eAAO,MAAM,uBAAuB;;;iBAQhC,CAAA;AAEJ,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAEvE,eAAO,MAAM,yBAAyB;;;EAKpC,CAAA;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB;;;;iBAWhC,CAAA;AAEJ,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAEvE,eAAO,MAAM,yBAAyB;;;;EAKpC,CAAA"}
|
package/dist/api/gdpr.js
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GDPR API Contracts
|
|
3
|
+
*
|
|
4
|
+
* Validation contracts for GDPR/privacy endpoints (data export, deletion)
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod/v4';
|
|
7
|
+
import { createContract } from '../foundation/contract.js';
|
|
8
|
+
/**
|
|
9
|
+
* GDPR Data Export Request validation
|
|
10
|
+
*
|
|
11
|
+
* Validates data export request with userId OR email (at least one required)
|
|
12
|
+
*/
|
|
13
|
+
export const GDPRExportRequestSchema = z
|
|
14
|
+
.object({
|
|
15
|
+
userId: z.string().optional(),
|
|
16
|
+
email: z.string().email('Invalid email format').optional(),
|
|
17
|
+
})
|
|
18
|
+
.refine((data) => data.userId || data.email, {
|
|
19
|
+
message: 'Either userId or email must be provided',
|
|
20
|
+
path: ['body'],
|
|
21
|
+
});
|
|
22
|
+
export const GDPRExportRequestContract = createContract({
|
|
23
|
+
name: 'GDPRExportRequest',
|
|
24
|
+
version: '1',
|
|
25
|
+
description: 'Validates GDPR data export request',
|
|
26
|
+
schema: GDPRExportRequestSchema,
|
|
27
|
+
});
|
|
28
|
+
/**
|
|
29
|
+
* GDPR Data Deletion Request validation
|
|
30
|
+
*
|
|
31
|
+
* Validates data deletion request with:
|
|
32
|
+
* - userId OR email (at least one required)
|
|
33
|
+
* - confirmation must equal "DELETE" (security measure)
|
|
34
|
+
*/
|
|
35
|
+
export const GDPRDeleteRequestSchema = z
|
|
36
|
+
.object({
|
|
37
|
+
userId: z.string().optional(),
|
|
38
|
+
email: z.string().email('Invalid email format').optional(),
|
|
39
|
+
confirmation: z.literal('DELETE', {
|
|
40
|
+
message: "Please confirm deletion by sending 'DELETE' in the confirmation field",
|
|
41
|
+
}),
|
|
42
|
+
})
|
|
43
|
+
.refine((data) => data.userId || data.email, {
|
|
44
|
+
message: 'Either userId or email must be provided',
|
|
45
|
+
path: ['body'],
|
|
46
|
+
});
|
|
47
|
+
export const GDPRDeleteRequestContract = createContract({
|
|
48
|
+
name: 'GDPRDeleteRequest',
|
|
49
|
+
version: '1',
|
|
50
|
+
description: 'Validates GDPR data deletion request with confirmation',
|
|
51
|
+
schema: GDPRDeleteRequestSchema,
|
|
52
|
+
});
|
|
53
|
+
//# sourceMappingURL=gdpr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gdpr.js","sourceRoot":"","sources":["../../src/api/gdpr.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAE1D;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC;KACrC,MAAM,CAAC;IACN,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,QAAQ,EAAE;CAC3D,CAAC;KACD,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE;IAC3C,OAAO,EAAE,yCAAyC;IAClD,IAAI,EAAE,CAAC,MAAM,CAAC;CACf,CAAC,CAAA;AAIJ,MAAM,CAAC,MAAM,yBAAyB,GAAG,cAAc,CAAC;IACtD,IAAI,EAAE,mBAAmB;IACzB,OAAO,EAAE,GAAG;IACZ,WAAW,EAAE,oCAAoC;IACjD,MAAM,EAAE,uBAAuB;CAChC,CAAC,CAAA;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC;KACrC,MAAM,CAAC;IACN,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,QAAQ,EAAE;IAC1D,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE;QAChC,OAAO,EAAE,uEAAuE;KACjF,CAAC;CACH,CAAC;KACD,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE;IAC3C,OAAO,EAAE,yCAAyC;IAClD,IAAI,EAAE,CAAC,MAAM,CAAC;CACf,CAAC,CAAA;AAIJ,MAAM,CAAC,MAAM,yBAAyB,GAAG,cAAc,CAAC;IACtD,IAAI,EAAE,mBAAmB;IACzB,OAAO,EAAE,GAAG;IACZ,WAAW,EAAE,wDAAwD;IACrE,MAAM,EAAE,uBAAuB;CAChC,CAAC,CAAA"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collection Contract
|
|
3
|
+
*
|
|
4
|
+
* Unified contract for Collection configurations that combines:
|
|
5
|
+
* - TypeScript types (compile-time)
|
|
6
|
+
* - Zod schemas (runtime validation)
|
|
7
|
+
* - Validation functions
|
|
8
|
+
* - Type guards
|
|
9
|
+
*
|
|
10
|
+
* This is the single source of truth for Collection definitions.
|
|
11
|
+
*
|
|
12
|
+
* @module @revealui/contracts/core/contracts/collection
|
|
13
|
+
*/
|
|
14
|
+
import { type Contract, type ContractType } from '../foundation/contract.js';
|
|
15
|
+
import type { CollectionConfig, Field } from './config.js';
|
|
16
|
+
import { type AuthConfig, type CollectionStructure, type UploadConfig } from './structure.js';
|
|
17
|
+
/**
|
|
18
|
+
* Collection Contract
|
|
19
|
+
*
|
|
20
|
+
* This contract validates Collection configurations at runtime
|
|
21
|
+
* and provides TypeScript types at compile time.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```typescript
|
|
25
|
+
* const PostsContract = CollectionContract
|
|
26
|
+
*
|
|
27
|
+
* // Validate a collection config
|
|
28
|
+
* const result = PostsContract.validate(userInput)
|
|
29
|
+
* if (result.success) {
|
|
30
|
+
* // result.data is fully typed as CollectionConfig
|
|
31
|
+
* console.log(result.data.slug)
|
|
32
|
+
* }
|
|
33
|
+
*
|
|
34
|
+
* // Type guard
|
|
35
|
+
* if (PostsContract.isType(unknownData)) {
|
|
36
|
+
* // unknownData is now typed as CollectionConfig
|
|
37
|
+
* console.log(unknownData.slug)
|
|
38
|
+
* }
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export declare const CollectionContract: Contract<CollectionStructure>;
|
|
42
|
+
/**
|
|
43
|
+
* Type for Collection configuration
|
|
44
|
+
* Extracted from the CollectionContract
|
|
45
|
+
*/
|
|
46
|
+
export type CollectionContractType = ContractType<typeof CollectionContract>;
|
|
47
|
+
/**
|
|
48
|
+
* Validate a collection configuration
|
|
49
|
+
*
|
|
50
|
+
* @param data - Unknown data to validate
|
|
51
|
+
* @returns Validation result with typed CollectionConfig on success
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```typescript
|
|
55
|
+
* const result = validateCollection(userInput)
|
|
56
|
+
* if (result.success) {
|
|
57
|
+
* const collection = result.data
|
|
58
|
+
* // collection is fully typed
|
|
59
|
+
* }
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
export declare function validateCollection(data: unknown): ReturnType<typeof CollectionContract.validate>;
|
|
63
|
+
/**
|
|
64
|
+
* Type guard for collection configurations
|
|
65
|
+
*
|
|
66
|
+
* @param data - Unknown data to check
|
|
67
|
+
* @returns True if data is a valid collection config
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```typescript
|
|
71
|
+
* if (isCollectionConfig(unknownData)) {
|
|
72
|
+
* // unknownData is now typed as CollectionConfig
|
|
73
|
+
* console.log(unknownData.slug)
|
|
74
|
+
* }
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
export declare function isCollectionConfig(data: unknown): data is CollectionContractType;
|
|
78
|
+
/**
|
|
79
|
+
* Parse collection configuration (throws on validation failure)
|
|
80
|
+
*
|
|
81
|
+
* @param data - Unknown data to parse
|
|
82
|
+
* @returns Validated CollectionConfig
|
|
83
|
+
* @throws ZodError if validation fails
|
|
84
|
+
*
|
|
85
|
+
* @example
|
|
86
|
+
* ```typescript
|
|
87
|
+
* try {
|
|
88
|
+
* const collection = parseCollection(userInput)
|
|
89
|
+
* // collection is fully typed
|
|
90
|
+
* } catch (error) {
|
|
91
|
+
* // Handle validation error
|
|
92
|
+
* }
|
|
93
|
+
* ```
|
|
94
|
+
*/
|
|
95
|
+
export declare function parseCollection(data: unknown): CollectionContractType;
|
|
96
|
+
/**
|
|
97
|
+
* Creates a basic collection config with defaults
|
|
98
|
+
*/
|
|
99
|
+
export declare function createCollectionConfig(slug: string, fields: Field[], options?: Partial<Omit<CollectionConfig, 'slug' | 'fields'>>): CollectionConfig;
|
|
100
|
+
/**
|
|
101
|
+
* Creates an auth-enabled collection config
|
|
102
|
+
*/
|
|
103
|
+
export declare function createAuthCollectionConfig(slug: string, fields: Field[], authOptions?: AuthConfig, options?: Partial<Omit<CollectionConfig, 'slug' | 'fields' | 'auth'>>): CollectionConfig;
|
|
104
|
+
/**
|
|
105
|
+
* Creates an upload-enabled collection config
|
|
106
|
+
*/
|
|
107
|
+
export declare function createUploadCollectionConfig(slug: string, fields: Field[], uploadOptions?: UploadConfig, options?: Partial<Omit<CollectionConfig, 'slug' | 'fields' | 'upload'>>): CollectionConfig;
|
|
108
|
+
//# sourceMappingURL=collection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../../src/cms/collection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,YAAY,EAAkB,MAAM,2BAA2B,CAAA;AAC5F,OAAO,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAC1D,OAAO,EACL,KAAK,UAAU,EAEf,KAAK,mBAAmB,EAExB,KAAK,YAAY,EAClB,MAAM,gBAAgB,CAAA;AAEvB;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,mBAAmB,CAO3D,CAAA;AAEF;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAAG,YAAY,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAE5E;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,QAAQ,CAAC,CAEhG;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,sBAAsB,CAEhF;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,sBAAsB,CAErE;AAMD;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,KAAK,EAAE,EACf,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,GAC3D,gBAAgB,CAQlB;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,KAAK,EAAE,EACf,WAAW,CAAC,EAAE,UAAU,EACxB,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC,CAAC,GACpE,gBAAgB,CASlB;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,KAAK,EAAE,EACf,aAAa,CAAC,EAAE,YAAY,EAC5B,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAAC,GACtE,gBAAgB,CASlB"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collection Contract
|
|
3
|
+
*
|
|
4
|
+
* Unified contract for Collection configurations that combines:
|
|
5
|
+
* - TypeScript types (compile-time)
|
|
6
|
+
* - Zod schemas (runtime validation)
|
|
7
|
+
* - Validation functions
|
|
8
|
+
* - Type guards
|
|
9
|
+
*
|
|
10
|
+
* This is the single source of truth for Collection definitions.
|
|
11
|
+
*
|
|
12
|
+
* @module @revealui/contracts/core/contracts/collection
|
|
13
|
+
*/
|
|
14
|
+
import { createContract } from '../foundation/contract.js';
|
|
15
|
+
import { COLLECTION_SCHEMA_VERSION, CollectionStructureSchema, } from './structure.js';
|
|
16
|
+
/**
|
|
17
|
+
* Collection Contract
|
|
18
|
+
*
|
|
19
|
+
* This contract validates Collection configurations at runtime
|
|
20
|
+
* and provides TypeScript types at compile time.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```typescript
|
|
24
|
+
* const PostsContract = CollectionContract
|
|
25
|
+
*
|
|
26
|
+
* // Validate a collection config
|
|
27
|
+
* const result = PostsContract.validate(userInput)
|
|
28
|
+
* if (result.success) {
|
|
29
|
+
* // result.data is fully typed as CollectionConfig
|
|
30
|
+
* console.log(result.data.slug)
|
|
31
|
+
* }
|
|
32
|
+
*
|
|
33
|
+
* // Type guard
|
|
34
|
+
* if (PostsContract.isType(unknownData)) {
|
|
35
|
+
* // unknownData is now typed as CollectionConfig
|
|
36
|
+
* console.log(unknownData.slug)
|
|
37
|
+
* }
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
export const CollectionContract = createContract({
|
|
41
|
+
name: 'Collection',
|
|
42
|
+
version: '1.0.0',
|
|
43
|
+
schema: CollectionStructureSchema,
|
|
44
|
+
description: 'Collection configuration contract',
|
|
45
|
+
docsUrl: 'https://revealui.dev/docs/api-reference/collections',
|
|
46
|
+
tags: ['collection', 'config', 'cms'],
|
|
47
|
+
});
|
|
48
|
+
/**
|
|
49
|
+
* Validate a collection configuration
|
|
50
|
+
*
|
|
51
|
+
* @param data - Unknown data to validate
|
|
52
|
+
* @returns Validation result with typed CollectionConfig on success
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* ```typescript
|
|
56
|
+
* const result = validateCollection(userInput)
|
|
57
|
+
* if (result.success) {
|
|
58
|
+
* const collection = result.data
|
|
59
|
+
* // collection is fully typed
|
|
60
|
+
* }
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
export function validateCollection(data) {
|
|
64
|
+
return CollectionContract.validate(data);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Type guard for collection configurations
|
|
68
|
+
*
|
|
69
|
+
* @param data - Unknown data to check
|
|
70
|
+
* @returns True if data is a valid collection config
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```typescript
|
|
74
|
+
* if (isCollectionConfig(unknownData)) {
|
|
75
|
+
* // unknownData is now typed as CollectionConfig
|
|
76
|
+
* console.log(unknownData.slug)
|
|
77
|
+
* }
|
|
78
|
+
* ```
|
|
79
|
+
*/
|
|
80
|
+
export function isCollectionConfig(data) {
|
|
81
|
+
return CollectionContract.isType(data);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Parse collection configuration (throws on validation failure)
|
|
85
|
+
*
|
|
86
|
+
* @param data - Unknown data to parse
|
|
87
|
+
* @returns Validated CollectionConfig
|
|
88
|
+
* @throws ZodError if validation fails
|
|
89
|
+
*
|
|
90
|
+
* @example
|
|
91
|
+
* ```typescript
|
|
92
|
+
* try {
|
|
93
|
+
* const collection = parseCollection(userInput)
|
|
94
|
+
* // collection is fully typed
|
|
95
|
+
* } catch (error) {
|
|
96
|
+
* // Handle validation error
|
|
97
|
+
* }
|
|
98
|
+
* ```
|
|
99
|
+
*/
|
|
100
|
+
export function parseCollection(data) {
|
|
101
|
+
return CollectionContract.parse(data);
|
|
102
|
+
}
|
|
103
|
+
// =============================================================================
|
|
104
|
+
// Factory Functions
|
|
105
|
+
// =============================================================================
|
|
106
|
+
/**
|
|
107
|
+
* Creates a basic collection config with defaults
|
|
108
|
+
*/
|
|
109
|
+
export function createCollectionConfig(slug, fields, options) {
|
|
110
|
+
return {
|
|
111
|
+
schemaVersion: COLLECTION_SCHEMA_VERSION,
|
|
112
|
+
slug,
|
|
113
|
+
fields,
|
|
114
|
+
timestamps: true,
|
|
115
|
+
...options,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Creates an auth-enabled collection config
|
|
120
|
+
*/
|
|
121
|
+
export function createAuthCollectionConfig(slug, fields, authOptions, options) {
|
|
122
|
+
return {
|
|
123
|
+
schemaVersion: COLLECTION_SCHEMA_VERSION,
|
|
124
|
+
slug,
|
|
125
|
+
fields: [{ name: 'email', type: 'email', required: true, unique: true }, ...fields],
|
|
126
|
+
auth: authOptions ?? {},
|
|
127
|
+
timestamps: true,
|
|
128
|
+
...options,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Creates an upload-enabled collection config
|
|
133
|
+
*/
|
|
134
|
+
export function createUploadCollectionConfig(slug, fields, uploadOptions, options) {
|
|
135
|
+
return {
|
|
136
|
+
schemaVersion: COLLECTION_SCHEMA_VERSION,
|
|
137
|
+
slug,
|
|
138
|
+
fields,
|
|
139
|
+
upload: uploadOptions ?? {},
|
|
140
|
+
timestamps: true,
|
|
141
|
+
...options,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=collection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collection.js","sourceRoot":"","sources":["../../src/cms/collection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAoC,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAE5F,OAAO,EAEL,yBAAyB,EAEzB,yBAAyB,GAE1B,MAAM,gBAAgB,CAAA;AAEvB;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAkC,cAAc,CAAC;IAC9E,IAAI,EAAE,YAAY;IAClB,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,yBAAyB;IACjC,WAAW,EAAE,mCAAmC;IAChD,OAAO,EAAE,qDAAqD;IAC9D,IAAI,EAAE,CAAC,YAAY,EAAE,QAAQ,EAAE,KAAK,CAAC;CACtC,CAAC,CAAA;AAQF;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAa;IAC9C,OAAO,kBAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;AAC1C,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAa;IAC9C,OAAO,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;AACxC,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,eAAe,CAAC,IAAa;IAC3C,OAAO,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;AACvC,CAAC;AAED,gFAAgF;AAChF,oBAAoB;AACpB,gFAAgF;AAEhF;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,IAAY,EACZ,MAAe,EACf,OAA4D;IAE5D,OAAO;QACL,aAAa,EAAE,yBAAyB;QACxC,IAAI;QACJ,MAAM;QACN,UAAU,EAAE,IAAI;QAChB,GAAG,OAAO;KACX,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,CACxC,IAAY,EACZ,MAAe,EACf,WAAwB,EACxB,OAAqE;IAErE,OAAO;QACL,aAAa,EAAE,yBAAyB;QACxC,IAAI;QACJ,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,MAAM,CAAC;QACnF,IAAI,EAAE,WAAW,IAAI,EAAE;QACvB,UAAU,EAAE,IAAI;QAChB,GAAG,OAAO;KACX,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,4BAA4B,CAC1C,IAAY,EACZ,MAAe,EACf,aAA4B,EAC5B,OAAuE;IAEvE,OAAO;QACL,aAAa,EAAE,yBAAyB;QACxC,IAAI;QACJ,MAAM;QACN,MAAM,EAAE,aAAa,IAAI,EAAE;QAC3B,UAAU,EAAE,IAAI;QAChB,GAAG,OAAO;KACX,CAAA;AACH,CAAC"}
|