@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
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config Contract
|
|
3
|
+
*
|
|
4
|
+
* Unified contract for complete Config (root configuration) 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 Config definitions.
|
|
11
|
+
*
|
|
12
|
+
* @module @revealui/contracts/core/contracts/config-contract
|
|
13
|
+
*/
|
|
14
|
+
import { z } from 'zod/v4';
|
|
15
|
+
import { createContract } from '../foundation/contract.js';
|
|
16
|
+
import { CollectionStructureSchema, GlobalStructureSchema } from './structure.js';
|
|
17
|
+
/**
|
|
18
|
+
* Config structure schema (Zod)
|
|
19
|
+
* Validates the structure of the root Config object
|
|
20
|
+
*
|
|
21
|
+
* Note: This schema validates the STRUCTURE of the config, not function contracts.
|
|
22
|
+
* Functions (access, hooks, onInit, etc.) are validated by TypeScript at compile time.
|
|
23
|
+
*/
|
|
24
|
+
const ConfigStructureSchema = z
|
|
25
|
+
.object({
|
|
26
|
+
// Required
|
|
27
|
+
secret: z.string().min(1, 'Secret is required'),
|
|
28
|
+
// Collections and globals
|
|
29
|
+
collections: z.array(CollectionStructureSchema).optional(),
|
|
30
|
+
globals: z.array(GlobalStructureSchema).optional(),
|
|
31
|
+
// Server
|
|
32
|
+
serverURL: z.union([z.url(), z.literal('')]).optional(),
|
|
33
|
+
// Admin configuration
|
|
34
|
+
admin: z
|
|
35
|
+
.object({
|
|
36
|
+
user: z.string().optional(),
|
|
37
|
+
meta: z
|
|
38
|
+
.object({
|
|
39
|
+
titleSuffix: z.string().optional(),
|
|
40
|
+
ogImage: z.string().optional(),
|
|
41
|
+
favicon: z.string().optional(),
|
|
42
|
+
icons: z
|
|
43
|
+
.array(z.object({
|
|
44
|
+
url: z.string().optional(),
|
|
45
|
+
sizes: z.string().optional(),
|
|
46
|
+
type: z.string().optional(),
|
|
47
|
+
rel: z.string().optional(),
|
|
48
|
+
fetchPriority: z.enum(['high', 'low', 'auto']).optional(),
|
|
49
|
+
}))
|
|
50
|
+
.optional(),
|
|
51
|
+
})
|
|
52
|
+
.optional(),
|
|
53
|
+
importMap: z
|
|
54
|
+
.object({
|
|
55
|
+
autoGenerate: z.boolean().optional(),
|
|
56
|
+
baseDir: z.string().optional(),
|
|
57
|
+
})
|
|
58
|
+
.passthrough()
|
|
59
|
+
.optional(),
|
|
60
|
+
css: z.string().optional(),
|
|
61
|
+
scss: z.string().optional(),
|
|
62
|
+
dateFormat: z.string().optional(),
|
|
63
|
+
avatar: z.union([z.literal('default'), z.literal('gravatar'), z.unknown()]).optional(),
|
|
64
|
+
disable: z.boolean().optional(),
|
|
65
|
+
livePreview: z
|
|
66
|
+
.object({
|
|
67
|
+
url: z.union([z.string(), z.unknown()]).optional(), // Function type validated by TypeScript
|
|
68
|
+
collections: z.array(z.string()).optional(),
|
|
69
|
+
globals: z.array(z.string()).optional(),
|
|
70
|
+
breakpoints: z
|
|
71
|
+
.array(z.object({
|
|
72
|
+
label: z.string(),
|
|
73
|
+
name: z.string(),
|
|
74
|
+
width: z.number(),
|
|
75
|
+
height: z.number(),
|
|
76
|
+
}))
|
|
77
|
+
.optional(),
|
|
78
|
+
})
|
|
79
|
+
// Keep passthrough on livePreview for extensibility (documented)
|
|
80
|
+
.passthrough()
|
|
81
|
+
.optional(),
|
|
82
|
+
})
|
|
83
|
+
// No passthrough on admin root - validate strictly
|
|
84
|
+
.optional(),
|
|
85
|
+
// Email configuration
|
|
86
|
+
email: z
|
|
87
|
+
.object({
|
|
88
|
+
fromName: z.string().optional(),
|
|
89
|
+
fromAddress: z.string().email().optional(),
|
|
90
|
+
})
|
|
91
|
+
// No passthrough - validate email config strictly
|
|
92
|
+
.optional(),
|
|
93
|
+
// Localization
|
|
94
|
+
localization: z
|
|
95
|
+
.union([
|
|
96
|
+
z.object({
|
|
97
|
+
locales: z.union([
|
|
98
|
+
z.array(z.string()),
|
|
99
|
+
z.array(z.object({
|
|
100
|
+
label: z.string(),
|
|
101
|
+
code: z.string(),
|
|
102
|
+
})),
|
|
103
|
+
]),
|
|
104
|
+
defaultLocale: z.string(),
|
|
105
|
+
fallback: z.boolean().optional(),
|
|
106
|
+
}),
|
|
107
|
+
z.literal(false),
|
|
108
|
+
])
|
|
109
|
+
.optional(),
|
|
110
|
+
// i18n (internationalization)
|
|
111
|
+
i18n: z
|
|
112
|
+
.object({
|
|
113
|
+
locales: z.array(z.string()).optional(),
|
|
114
|
+
defaultLocale: z.string().optional(),
|
|
115
|
+
fallback: z.boolean().optional(),
|
|
116
|
+
supportedLanguages: z.record(z.string(), z.unknown()).optional(),
|
|
117
|
+
})
|
|
118
|
+
.optional(),
|
|
119
|
+
// CORS
|
|
120
|
+
cors: z
|
|
121
|
+
.union([
|
|
122
|
+
z.string(),
|
|
123
|
+
z.array(z.string()),
|
|
124
|
+
z.object({
|
|
125
|
+
origins: z.array(z.string()),
|
|
126
|
+
headers: z.array(z.string()).optional(),
|
|
127
|
+
}),
|
|
128
|
+
])
|
|
129
|
+
.optional(),
|
|
130
|
+
// CSRF
|
|
131
|
+
csrf: z.array(z.string()).optional(),
|
|
132
|
+
// Rate limiting
|
|
133
|
+
rateLimit: z
|
|
134
|
+
.object({
|
|
135
|
+
window: z.number().optional(),
|
|
136
|
+
max: z.number().optional(),
|
|
137
|
+
trustProxy: z.boolean().optional(),
|
|
138
|
+
// skip is a function - not validated here
|
|
139
|
+
})
|
|
140
|
+
// No passthrough - validate rateLimit config strictly
|
|
141
|
+
.optional(),
|
|
142
|
+
// Uploads
|
|
143
|
+
upload: z
|
|
144
|
+
.object({
|
|
145
|
+
limits: z
|
|
146
|
+
.object({
|
|
147
|
+
fileSize: z.number().optional(),
|
|
148
|
+
})
|
|
149
|
+
.optional(),
|
|
150
|
+
})
|
|
151
|
+
.optional(),
|
|
152
|
+
// Debug
|
|
153
|
+
debug: z.boolean().optional(),
|
|
154
|
+
// TypeScript
|
|
155
|
+
typescript: z
|
|
156
|
+
.object({
|
|
157
|
+
outputFile: z.string().optional(),
|
|
158
|
+
declare: z.boolean().optional(),
|
|
159
|
+
autoGenerate: z.boolean().optional(),
|
|
160
|
+
})
|
|
161
|
+
.optional(),
|
|
162
|
+
// Telemetry
|
|
163
|
+
telemetry: z.boolean().optional(),
|
|
164
|
+
// Hooks - functions are not validated here (TypeScript-only)
|
|
165
|
+
hooks: z
|
|
166
|
+
.object({
|
|
167
|
+
// afterError is an array of functions - not validated here
|
|
168
|
+
})
|
|
169
|
+
// No passthrough - validate hooks config strictly
|
|
170
|
+
.optional(),
|
|
171
|
+
// onInit, plugins, editor, sharp, db are functions/any - not validated here
|
|
172
|
+
// These are validated by TypeScript at compile time
|
|
173
|
+
// Custom properties for extensibility (documented extensibility point)
|
|
174
|
+
custom: z.record(z.string(), z.unknown()).optional(),
|
|
175
|
+
})
|
|
176
|
+
.refine((data) => {
|
|
177
|
+
// At least one collection or global must be present
|
|
178
|
+
return ((data.collections && data.collections.length > 0) ||
|
|
179
|
+
(data.globals && data.globals.length > 0));
|
|
180
|
+
}, {
|
|
181
|
+
message: 'RevealUI config must have at least one collection or global',
|
|
182
|
+
path: ['collections'],
|
|
183
|
+
});
|
|
184
|
+
/**
|
|
185
|
+
* Config Contract
|
|
186
|
+
*
|
|
187
|
+
* This contract validates Config (root configuration) at runtime
|
|
188
|
+
* and provides TypeScript types at compile time.
|
|
189
|
+
*
|
|
190
|
+
* Note: This is a simplified contract. The full Config type includes
|
|
191
|
+
* function contracts (access, hooks) which are validated by TypeScript
|
|
192
|
+
* at compile time, not by Zod at runtime.
|
|
193
|
+
*/
|
|
194
|
+
export const ConfigContract = createContract({
|
|
195
|
+
name: 'Config',
|
|
196
|
+
version: '1.0.0',
|
|
197
|
+
schema: ConfigStructureSchema,
|
|
198
|
+
description: 'Root configuration contract',
|
|
199
|
+
docsUrl: 'https://revealui.dev/docs/api-reference/config',
|
|
200
|
+
tags: ['config', 'root', 'cms'],
|
|
201
|
+
});
|
|
202
|
+
/**
|
|
203
|
+
* Validate a config structure
|
|
204
|
+
*/
|
|
205
|
+
export function validateConfigStructure(data) {
|
|
206
|
+
return ConfigContract.validate(data);
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Type guard for config structures
|
|
210
|
+
*/
|
|
211
|
+
export function isConfigStructure(data) {
|
|
212
|
+
return ConfigContract.isType(data);
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Parse config structure (throws on validation failure)
|
|
216
|
+
*/
|
|
217
|
+
export function parseConfigStructure(data) {
|
|
218
|
+
return ConfigContract.parse(data);
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=config-contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-contract.js","sourceRoot":"","sources":["../../src/cms/config-contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Combined Configuration Types
|
|
3
|
+
*
|
|
4
|
+
* These types combine Zod-validated structure with TypeScript function contracts.
|
|
5
|
+
*
|
|
6
|
+
* Structure (validated by Zod at runtime):
|
|
7
|
+
* - Field names, types, constraints
|
|
8
|
+
* - Admin configuration
|
|
9
|
+
* - Labels, slugs
|
|
10
|
+
*
|
|
11
|
+
* Functions (enforced by TypeScript at compile time):
|
|
12
|
+
* - Access functions
|
|
13
|
+
* - Hook functions
|
|
14
|
+
* - Validation functions
|
|
15
|
+
* - Condition functions
|
|
16
|
+
*
|
|
17
|
+
* @module @revealui/contracts/core/contracts/config
|
|
18
|
+
*/
|
|
19
|
+
import type { AccessFunction, CollectionAccessConfig, CollectionHooksConfig, ConditionFunction, EndpointConfig, FieldAccessConfig, FieldHooksConfig, FieldValidateArgs, FilterOptionsFunction, GlobalAccessConfig, GlobalHooksConfig } from './functions.js';
|
|
20
|
+
import type { CollectionStructure, FieldStructure, GlobalStructure } from './structure.js';
|
|
21
|
+
export type UnknownRecord = Record<string, unknown>;
|
|
22
|
+
type HookFn = (args: UnknownRecord) => unknown;
|
|
23
|
+
type FieldBeforeReadHook = HookFn;
|
|
24
|
+
type LooseFieldAccessConfig = FieldAccessConfig<UnknownRecord, UnknownRecord>;
|
|
25
|
+
type LooseFieldHooksConfig = FieldHooksConfig<unknown, UnknownRecord, UnknownRecord> & {
|
|
26
|
+
beforeRead?: FieldBeforeReadHook[];
|
|
27
|
+
};
|
|
28
|
+
type LooseCollectionAccessConfig<T = UnknownRecord> = CollectionAccessConfig<T> & {
|
|
29
|
+
readVersions?: AccessFunction<T>;
|
|
30
|
+
};
|
|
31
|
+
type LooseCollectionHooksConfig<T = UnknownRecord> = CollectionHooksConfig<T> & {
|
|
32
|
+
afterLogin?: HookFn[];
|
|
33
|
+
afterLogout?: HookFn[];
|
|
34
|
+
afterRefresh?: HookFn[];
|
|
35
|
+
afterMe?: HookFn[];
|
|
36
|
+
afterForgotPassword?: HookFn[];
|
|
37
|
+
};
|
|
38
|
+
type LooseGlobalHooksConfig = GlobalHooksConfig<UnknownRecord> & {
|
|
39
|
+
beforeValidate?: HookFn[];
|
|
40
|
+
};
|
|
41
|
+
type LooseFieldValidateArgs = FieldValidateArgs<unknown, UnknownRecord, UnknownRecord>;
|
|
42
|
+
type LooseGlobalAccessConfig = GlobalAccessConfig & {
|
|
43
|
+
readVersions?: AccessFunction<UnknownRecord>;
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Complete Field type combining structure and functions
|
|
47
|
+
*
|
|
48
|
+
* This is a simplified, non-generic Field type that works with any document type.
|
|
49
|
+
* For typed field definitions, use the TypeScript helper `defineField<T>()`.
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```typescript
|
|
53
|
+
* // Basic text field
|
|
54
|
+
* const titleField: Field = {
|
|
55
|
+
* name: 'title',
|
|
56
|
+
* type: 'text',
|
|
57
|
+
* required: true,
|
|
58
|
+
* };
|
|
59
|
+
*
|
|
60
|
+
* // Field with hooks
|
|
61
|
+
* const slugField: Field = {
|
|
62
|
+
* name: 'slug',
|
|
63
|
+
* type: 'text',
|
|
64
|
+
* hooks: {
|
|
65
|
+
* beforeChange: [({ value, siblingData }) => {
|
|
66
|
+
* return value || String(siblingData?.title)?.toLowerCase().replace(/\s+/g, '-');
|
|
67
|
+
* }],
|
|
68
|
+
* },
|
|
69
|
+
* };
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
72
|
+
export interface Field extends Omit<FieldStructure, 'fields' | 'blocks' | 'tabs'> {
|
|
73
|
+
access?: LooseFieldAccessConfig;
|
|
74
|
+
hooks?: LooseFieldHooksConfig;
|
|
75
|
+
validate?: (value: unknown, args: LooseFieldValidateArgs) => string | true | Promise<string | true>;
|
|
76
|
+
condition?: ConditionFunction<UnknownRecord, UnknownRecord>;
|
|
77
|
+
filterOptions?: FilterOptionsFunction<UnknownRecord>;
|
|
78
|
+
fields?: Field[];
|
|
79
|
+
blocks?: unknown[];
|
|
80
|
+
tabs?: Array<{
|
|
81
|
+
label: string;
|
|
82
|
+
name?: string;
|
|
83
|
+
description?: string;
|
|
84
|
+
fields: Field[];
|
|
85
|
+
custom?: Record<string, unknown>;
|
|
86
|
+
}>;
|
|
87
|
+
editor?: unknown;
|
|
88
|
+
custom?: Record<string, unknown>;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Complete CollectionConfig type combining structure and functions
|
|
92
|
+
*
|
|
93
|
+
* Generic over the document type to provide proper type inference for hooks and access functions.
|
|
94
|
+
* Defaults to UnknownRecord for backward compatibility.
|
|
95
|
+
*
|
|
96
|
+
* @template T - The document type for this collection (defaults to UnknownRecord)
|
|
97
|
+
*
|
|
98
|
+
* @example
|
|
99
|
+
* ```typescript
|
|
100
|
+
* // Without type parameter (backward compatible)
|
|
101
|
+
* const Posts: CollectionConfig = {
|
|
102
|
+
* slug: 'posts',
|
|
103
|
+
* fields: [
|
|
104
|
+
* { name: 'title', type: 'text', required: true },
|
|
105
|
+
* { name: 'slug', type: 'text', required: true },
|
|
106
|
+
* ],
|
|
107
|
+
* access: {
|
|
108
|
+
* read: () => true,
|
|
109
|
+
* create: ({ req }) => Boolean(req.user),
|
|
110
|
+
* },
|
|
111
|
+
* hooks: {
|
|
112
|
+
* afterChange: [({ doc }) => {
|
|
113
|
+
* // Log the update
|
|
114
|
+
* return doc;
|
|
115
|
+
* }],
|
|
116
|
+
* },
|
|
117
|
+
* };
|
|
118
|
+
*
|
|
119
|
+
* // With type parameter (typed hooks and access functions)
|
|
120
|
+
* interface Post {
|
|
121
|
+
* id: string;
|
|
122
|
+
* title: string;
|
|
123
|
+
* slug: string;
|
|
124
|
+
* }
|
|
125
|
+
*
|
|
126
|
+
* const Posts: CollectionConfig<Post> = {
|
|
127
|
+
* slug: 'posts',
|
|
128
|
+
* fields: [...],
|
|
129
|
+
* hooks: {
|
|
130
|
+
* afterChange: [({ doc }) => {
|
|
131
|
+
* // doc is properly typed as Post
|
|
132
|
+
* return doc;
|
|
133
|
+
* }],
|
|
134
|
+
* },
|
|
135
|
+
* };
|
|
136
|
+
* ```
|
|
137
|
+
*/
|
|
138
|
+
export interface CollectionConfig<T = UnknownRecord> extends Omit<CollectionStructure, 'fields'> {
|
|
139
|
+
schemaVersion?: number;
|
|
140
|
+
fields: Field[];
|
|
141
|
+
access?: LooseCollectionAccessConfig<T>;
|
|
142
|
+
hooks?: LooseCollectionHooksConfig<T>;
|
|
143
|
+
endpoints?: EndpointConfig[] | false;
|
|
144
|
+
custom?: Record<string, unknown>;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Complete GlobalConfig type combining structure and functions
|
|
148
|
+
*
|
|
149
|
+
* This is a simplified, non-generic GlobalConfig type that works with any document.
|
|
150
|
+
* For typed global definitions, use the TypeScript helper `defineGlobal<T>()`.
|
|
151
|
+
*
|
|
152
|
+
* @example
|
|
153
|
+
* ```typescript
|
|
154
|
+
* const Settings: GlobalConfig = {
|
|
155
|
+
* slug: 'settings',
|
|
156
|
+
* fields: [
|
|
157
|
+
* { name: 'siteName', type: 'text', required: true },
|
|
158
|
+
* { name: 'siteDescription', type: 'textarea' },
|
|
159
|
+
* ],
|
|
160
|
+
* access: {
|
|
161
|
+
* read: () => true,
|
|
162
|
+
* update: ({ req }) => Boolean(req.user),
|
|
163
|
+
* },
|
|
164
|
+
* };
|
|
165
|
+
* ```
|
|
166
|
+
*/
|
|
167
|
+
export interface GlobalConfig extends Omit<GlobalStructure, 'fields'> {
|
|
168
|
+
schemaVersion?: number;
|
|
169
|
+
fields: Field[];
|
|
170
|
+
access?: LooseGlobalAccessConfig;
|
|
171
|
+
hooks?: LooseGlobalHooksConfig;
|
|
172
|
+
endpoints?: EndpointConfig[] | false;
|
|
173
|
+
custom?: Record<string, unknown>;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Database adapter configuration (simplified)
|
|
177
|
+
*/
|
|
178
|
+
export interface DatabaseAdapterConfig {
|
|
179
|
+
pool?: unknown;
|
|
180
|
+
idType?: 'serial' | 'uuid';
|
|
181
|
+
custom?: Record<string, unknown>;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Email configuration
|
|
185
|
+
*/
|
|
186
|
+
export interface EmailConfig {
|
|
187
|
+
transportOptions?: unknown;
|
|
188
|
+
fromName?: string;
|
|
189
|
+
fromAddress?: string;
|
|
190
|
+
custom?: Record<string, unknown>;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Admin panel configuration
|
|
194
|
+
*/
|
|
195
|
+
export interface AdminConfig {
|
|
196
|
+
user?: string;
|
|
197
|
+
meta?: {
|
|
198
|
+
titleSuffix?: string;
|
|
199
|
+
ogImage?: string;
|
|
200
|
+
favicon?: string;
|
|
201
|
+
icons?: Array<{
|
|
202
|
+
url?: string;
|
|
203
|
+
sizes?: string;
|
|
204
|
+
type?: string;
|
|
205
|
+
rel?: string;
|
|
206
|
+
fetchPriority?: 'high' | 'low' | 'auto';
|
|
207
|
+
}>;
|
|
208
|
+
};
|
|
209
|
+
importMap?: {
|
|
210
|
+
autoGenerate?: boolean;
|
|
211
|
+
baseDir?: string;
|
|
212
|
+
custom?: Record<string, unknown>;
|
|
213
|
+
};
|
|
214
|
+
components?: unknown;
|
|
215
|
+
css?: string;
|
|
216
|
+
scss?: string;
|
|
217
|
+
dateFormat?: string;
|
|
218
|
+
avatar?: string;
|
|
219
|
+
disable?: boolean;
|
|
220
|
+
livePreview?: {
|
|
221
|
+
url?: string | ((args: {
|
|
222
|
+
data: unknown;
|
|
223
|
+
locale?: string;
|
|
224
|
+
}) => string);
|
|
225
|
+
collections?: string[];
|
|
226
|
+
globals?: string[];
|
|
227
|
+
breakpoints?: Array<{
|
|
228
|
+
label: string;
|
|
229
|
+
name: string;
|
|
230
|
+
width: number;
|
|
231
|
+
height: number;
|
|
232
|
+
}>;
|
|
233
|
+
custom?: Record<string, unknown>;
|
|
234
|
+
};
|
|
235
|
+
custom?: Record<string, unknown>;
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Localization configuration
|
|
239
|
+
*/
|
|
240
|
+
export interface LocalizationConfig {
|
|
241
|
+
locales: string[] | Array<{
|
|
242
|
+
label: string;
|
|
243
|
+
code: string;
|
|
244
|
+
}>;
|
|
245
|
+
defaultLocale: string;
|
|
246
|
+
fallback?: boolean;
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Complete RevealUI Config type
|
|
250
|
+
*
|
|
251
|
+
* This is the root configuration passed to buildConfig()
|
|
252
|
+
*/
|
|
253
|
+
export interface Config {
|
|
254
|
+
secret: string;
|
|
255
|
+
collections?: CollectionConfig<any>[];
|
|
256
|
+
globals?: GlobalConfig[];
|
|
257
|
+
db?: unknown;
|
|
258
|
+
serverURL?: string;
|
|
259
|
+
admin?: AdminConfig;
|
|
260
|
+
email?: EmailConfig;
|
|
261
|
+
localization?: LocalizationConfig | false;
|
|
262
|
+
i18n?: {
|
|
263
|
+
locales?: string[];
|
|
264
|
+
defaultLocale?: string;
|
|
265
|
+
fallback?: boolean;
|
|
266
|
+
supportedLanguages?: Record<string, unknown>;
|
|
267
|
+
};
|
|
268
|
+
cors?: string | string[] | {
|
|
269
|
+
origins: string[];
|
|
270
|
+
headers?: string[];
|
|
271
|
+
};
|
|
272
|
+
csrf?: string[];
|
|
273
|
+
rateLimit?: {
|
|
274
|
+
window?: number;
|
|
275
|
+
max?: number;
|
|
276
|
+
trustProxy?: boolean;
|
|
277
|
+
skip?: (req: unknown) => boolean;
|
|
278
|
+
};
|
|
279
|
+
upload?: {
|
|
280
|
+
limits?: {
|
|
281
|
+
fileSize?: number;
|
|
282
|
+
};
|
|
283
|
+
};
|
|
284
|
+
debug?: boolean;
|
|
285
|
+
typescript?: {
|
|
286
|
+
outputFile?: string;
|
|
287
|
+
declare?: boolean;
|
|
288
|
+
autoGenerate?: boolean;
|
|
289
|
+
};
|
|
290
|
+
telemetry?: boolean;
|
|
291
|
+
hooks?: {
|
|
292
|
+
afterError?: Array<(args: {
|
|
293
|
+
error: Error;
|
|
294
|
+
context: unknown;
|
|
295
|
+
}) => void | Promise<void>>;
|
|
296
|
+
};
|
|
297
|
+
onInit?: (revealui: unknown) => unknown;
|
|
298
|
+
plugins?: unknown[];
|
|
299
|
+
editor?: unknown;
|
|
300
|
+
sharp?: unknown;
|
|
301
|
+
custom?: Record<string, unknown>;
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Sanitized config (after RevealUI processes it)
|
|
305
|
+
* This is what's available at runtime
|
|
306
|
+
*/
|
|
307
|
+
export interface SanitizedConfig extends Config {
|
|
308
|
+
collections: CollectionConfig<any>[];
|
|
309
|
+
globals: GlobalConfig[];
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Typed collection config for advanced type inference
|
|
313
|
+
* Use this when you need TypeScript to know the document type
|
|
314
|
+
*/
|
|
315
|
+
export interface TypedCollectionConfig<T> extends CollectionConfig {
|
|
316
|
+
__docType?: T;
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Typed global config for advanced type inference
|
|
320
|
+
* Use this when you need TypeScript to know the document type
|
|
321
|
+
*/
|
|
322
|
+
export interface TypedGlobalConfig<T> extends GlobalConfig {
|
|
323
|
+
__docType?: T;
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Helper to create a typed collection config
|
|
327
|
+
*
|
|
328
|
+
* @example
|
|
329
|
+
* ```typescript
|
|
330
|
+
* interface Post {
|
|
331
|
+
* id: string;
|
|
332
|
+
* title: string;
|
|
333
|
+
* }
|
|
334
|
+
*
|
|
335
|
+
* const Posts = defineCollection<Post>({
|
|
336
|
+
* slug: 'posts',
|
|
337
|
+
* fields: [{ name: 'title', type: 'text' }],
|
|
338
|
+
* });
|
|
339
|
+
* ```
|
|
340
|
+
*/
|
|
341
|
+
export declare function defineCollection<T = unknown>(config: CollectionConfig): TypedCollectionConfig<T>;
|
|
342
|
+
/**
|
|
343
|
+
* Helper to create a typed global config
|
|
344
|
+
*/
|
|
345
|
+
export declare function defineGlobal<T = unknown>(config: GlobalConfig): TypedGlobalConfig<T>;
|
|
346
|
+
/**
|
|
347
|
+
* Helper to create a field
|
|
348
|
+
*/
|
|
349
|
+
export declare function defineField(field: Field): Field;
|
|
350
|
+
export {};
|
|
351
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/cms/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Combined Configuration Types
|
|
3
|
+
*
|
|
4
|
+
* These types combine Zod-validated structure with TypeScript function contracts.
|
|
5
|
+
*
|
|
6
|
+
* Structure (validated by Zod at runtime):
|
|
7
|
+
* - Field names, types, constraints
|
|
8
|
+
* - Admin configuration
|
|
9
|
+
* - Labels, slugs
|
|
10
|
+
*
|
|
11
|
+
* Functions (enforced by TypeScript at compile time):
|
|
12
|
+
* - Access functions
|
|
13
|
+
* - Hook functions
|
|
14
|
+
* - Validation functions
|
|
15
|
+
* - Condition functions
|
|
16
|
+
*
|
|
17
|
+
* @module @revealui/contracts/core/contracts/config
|
|
18
|
+
*/
|
|
19
|
+
/**
|
|
20
|
+
* Helper to create a typed collection config
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```typescript
|
|
24
|
+
* interface Post {
|
|
25
|
+
* id: string;
|
|
26
|
+
* title: string;
|
|
27
|
+
* }
|
|
28
|
+
*
|
|
29
|
+
* const Posts = defineCollection<Post>({
|
|
30
|
+
* slug: 'posts',
|
|
31
|
+
* fields: [{ name: 'title', type: 'text' }],
|
|
32
|
+
* });
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export function defineCollection(config) {
|
|
36
|
+
return config;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Helper to create a typed global config
|
|
40
|
+
*/
|
|
41
|
+
export function defineGlobal(config) {
|
|
42
|
+
return config;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Helper to create a field
|
|
46
|
+
*/
|
|
47
|
+
export function defineField(field) {
|
|
48
|
+
return field;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/cms/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAqaH;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,gBAAgB,CAAc,MAAwB;IACpE,OAAO,MAAkC,CAAA;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAc,MAAoB;IAC5D,OAAO,MAA8B,CAAA;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,KAAY;IACtC,OAAO,KAAK,CAAA;AACd,CAAC"}
|