@zenith-open/zenithcms-types 0.1.0 → 1.0.0-beta.10
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 +21 -0
- package/README.md +32 -0
- package/dist/database.d.ts +41 -11
- package/dist/generated.d.ts +39 -19
- package/dist/index.d.ts +42 -5
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/package.json +22 -16
- package/src/database.d.ts +0 -84
- package/src/database.js +0 -1
- package/src/database.js.map +0 -1
- package/src/database.ts +0 -164
- package/src/generated.d.ts +0 -274
- package/src/generated.js +0 -7
- package/src/generated.js.map +0 -1
- package/src/generated.ts +0 -143
- package/src/index.d.ts +0 -193
- package/src/index.js +0 -9
- package/src/index.js.map +0 -1
- package/src/index.ts +0 -378
- package/tsconfig.json +0 -15
package/src/index.ts
DELETED
|
@@ -1,378 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Zenith CMS — Core Type System
|
|
3
|
-
* ─────────────────────────────
|
|
4
|
-
* Strictly typed configuration schema for collections, fields, and plugins.
|
|
5
|
-
* Uses Discriminated Unions for robust field-level validation and IntelliSense.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import type React from 'react'
|
|
9
|
-
|
|
10
|
-
export interface ZenithDocument {
|
|
11
|
-
_id?: string
|
|
12
|
-
id?: string
|
|
13
|
-
siteId?: string | null
|
|
14
|
-
_status?: 'draft' | 'published' | string
|
|
15
|
-
_version?: number
|
|
16
|
-
workflowStatus?: string
|
|
17
|
-
deletedAt?: Date | null
|
|
18
|
-
[key: string]: unknown
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export type FieldType =
|
|
22
|
-
| 'text'
|
|
23
|
-
| 'number'
|
|
24
|
-
| 'email'
|
|
25
|
-
| 'textarea'
|
|
26
|
-
| 'checkbox'
|
|
27
|
-
| 'date'
|
|
28
|
-
| 'select'
|
|
29
|
-
| 'media'
|
|
30
|
-
| 'richtext'
|
|
31
|
-
| 'json'
|
|
32
|
-
| 'group'
|
|
33
|
-
| 'tabs'
|
|
34
|
-
| 'array'
|
|
35
|
-
| 'relation'
|
|
36
|
-
| 'blocks'
|
|
37
|
-
| 'boolean'
|
|
38
|
-
| 'code'
|
|
39
|
-
| 'collapsible'
|
|
40
|
-
| 'join'
|
|
41
|
-
| 'point'
|
|
42
|
-
| 'radio'
|
|
43
|
-
| 'row'
|
|
44
|
-
| 'ui'
|
|
45
|
-
| 'dz'
|
|
46
|
-
|
|
47
|
-
export interface BlockDefinition {
|
|
48
|
-
slug: string
|
|
49
|
-
labels?: { singular: string; plural: string }
|
|
50
|
-
fields: FieldConfig[]
|
|
51
|
-
admin?: {
|
|
52
|
-
description?: string
|
|
53
|
-
icon?: string
|
|
54
|
-
imageURL?: string
|
|
55
|
-
category?: string
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
export interface FieldAdminConfig {
|
|
60
|
-
placeholder?: string
|
|
61
|
-
description?: string
|
|
62
|
-
hidden?: boolean
|
|
63
|
-
readOnly?: boolean
|
|
64
|
-
width?: string
|
|
65
|
-
condition?: (data: unknown, siblingData: unknown) => boolean
|
|
66
|
-
readAccess?: string[]
|
|
67
|
-
writeAccess?: string[]
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
export interface BaseFieldConfig {
|
|
71
|
-
name: string
|
|
72
|
-
label?: string
|
|
73
|
-
required?: boolean
|
|
74
|
-
unique?: boolean
|
|
75
|
-
localized?: boolean
|
|
76
|
-
virtual?: boolean
|
|
77
|
-
defaultValue?: unknown
|
|
78
|
-
admin?: FieldAdminConfig
|
|
79
|
-
hooks?: {
|
|
80
|
-
beforeChange?: (value: unknown) => unknown | Promise<unknown>
|
|
81
|
-
afterRead?: (value: unknown) => unknown | Promise<unknown>
|
|
82
|
-
validate?: (value: unknown, data: unknown) => boolean | string | Promise<boolean | string>
|
|
83
|
-
}
|
|
84
|
-
access?: {
|
|
85
|
-
read?: (user: unknown) => boolean
|
|
86
|
-
update?: (user: unknown) => boolean
|
|
87
|
-
create?: (user: unknown) => boolean
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
// ── Specific Field Interfaces ────────────────────────────────────────────────
|
|
92
|
-
|
|
93
|
-
export interface TextFieldConfig extends BaseFieldConfig {
|
|
94
|
-
type: 'text' | 'email' | 'textarea' | 'password' | 'uid' | 'color'
|
|
95
|
-
minLength?: number
|
|
96
|
-
maxLength?: number
|
|
97
|
-
}
|
|
98
|
-
export interface NumberFieldConfig extends BaseFieldConfig {
|
|
99
|
-
type: 'number'
|
|
100
|
-
min?: number
|
|
101
|
-
max?: number
|
|
102
|
-
}
|
|
103
|
-
export interface CheckboxFieldConfig extends BaseFieldConfig {
|
|
104
|
-
type: 'checkbox' | 'boolean'
|
|
105
|
-
}
|
|
106
|
-
export interface SelectFieldConfig extends BaseFieldConfig {
|
|
107
|
-
type: 'select'
|
|
108
|
-
options: (string | { label: string; value: string })[]
|
|
109
|
-
hasMany?: boolean
|
|
110
|
-
}
|
|
111
|
-
export interface MediaFieldConfig extends BaseFieldConfig {
|
|
112
|
-
type: 'media'
|
|
113
|
-
hasMany?: boolean
|
|
114
|
-
options?: {
|
|
115
|
-
focalPoint?: boolean
|
|
116
|
-
blurhash?: boolean
|
|
117
|
-
responsive?: boolean
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
export type OnDeletePolicy = 'SET_NULL' | 'CASCADE' | 'RESTRICT' | 'NO_ACTION'
|
|
121
|
-
|
|
122
|
-
export interface RelationFieldConfig extends BaseFieldConfig {
|
|
123
|
-
type: 'relation'
|
|
124
|
-
relationTo: string | string[]
|
|
125
|
-
hasMany?: boolean
|
|
126
|
-
junctionTable?: string
|
|
127
|
-
pivotFields?: FieldConfig[]
|
|
128
|
-
onDelete?: OnDeletePolicy
|
|
129
|
-
}
|
|
130
|
-
export interface ArrayFieldConfig extends BaseFieldConfig {
|
|
131
|
-
type: 'array'
|
|
132
|
-
fields: FieldConfig[]
|
|
133
|
-
minRows?: number
|
|
134
|
-
maxRows?: number
|
|
135
|
-
}
|
|
136
|
-
export interface GroupFieldConfig extends BaseFieldConfig {
|
|
137
|
-
type: 'group'
|
|
138
|
-
fields: FieldConfig[]
|
|
139
|
-
}
|
|
140
|
-
export interface BlocksFieldConfig extends BaseFieldConfig {
|
|
141
|
-
type: 'blocks'
|
|
142
|
-
blocks: BlockDefinition[]
|
|
143
|
-
}
|
|
144
|
-
export interface RichTextFieldConfig extends BaseFieldConfig {
|
|
145
|
-
type: 'richtext'
|
|
146
|
-
format?: 'html' | 'json'
|
|
147
|
-
}
|
|
148
|
-
export interface BasicFieldConfig extends BaseFieldConfig {
|
|
149
|
-
type: 'date' | 'json'
|
|
150
|
-
}
|
|
151
|
-
export interface CodeFieldConfig extends BaseFieldConfig {
|
|
152
|
-
type: 'code'
|
|
153
|
-
language?: string
|
|
154
|
-
minLength?: number
|
|
155
|
-
maxLength?: number
|
|
156
|
-
}
|
|
157
|
-
export interface CollapsibleFieldConfig extends BaseFieldConfig {
|
|
158
|
-
type: 'collapsible'
|
|
159
|
-
fields: FieldConfig[]
|
|
160
|
-
initCollapsed?: boolean
|
|
161
|
-
}
|
|
162
|
-
export interface JoinFieldConfig extends Omit<BaseFieldConfig, 'required'> {
|
|
163
|
-
type: 'join'
|
|
164
|
-
collection: string | string[]
|
|
165
|
-
on: string
|
|
166
|
-
maxDepth?: number
|
|
167
|
-
where?: Record<string, unknown>
|
|
168
|
-
defaultLimit?: number
|
|
169
|
-
defaultSort?: string
|
|
170
|
-
}
|
|
171
|
-
export interface PointFieldConfig extends BaseFieldConfig {
|
|
172
|
-
type: 'point'
|
|
173
|
-
}
|
|
174
|
-
export interface RadioFieldConfig extends BaseFieldConfig {
|
|
175
|
-
type: 'radio'
|
|
176
|
-
options: (string | { label: string; value: string })[]
|
|
177
|
-
layout?: 'horizontal' | 'vertical'
|
|
178
|
-
}
|
|
179
|
-
export interface RowFieldConfig extends Omit<BaseFieldConfig, 'required' | 'unique' | 'localized' | 'virtual' | 'defaultValue' | 'admin' | 'hooks' | 'access'> {
|
|
180
|
-
type: 'row'
|
|
181
|
-
fields: FieldConfig[]
|
|
182
|
-
admin?: {
|
|
183
|
-
className?: string
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
export interface UIFieldConfig extends Omit<BaseFieldConfig, 'required' | 'unique' | 'localized' | 'virtual' | 'defaultValue' | 'hooks' | 'access'> {
|
|
187
|
-
type: 'ui'
|
|
188
|
-
admin?: {
|
|
189
|
-
components?: {
|
|
190
|
-
Field?: React.ComponentType<unknown>
|
|
191
|
-
}
|
|
192
|
-
condition?: (data: unknown, siblingData: unknown) => boolean
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
export interface DZFieldConfig extends BaseFieldConfig {
|
|
197
|
-
type: 'dz'
|
|
198
|
-
/** List of available component types (block slugs) for this dynamic zone */
|
|
199
|
-
components?: string[]
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
export type FieldConfig =
|
|
203
|
-
| TextFieldConfig
|
|
204
|
-
| NumberFieldConfig
|
|
205
|
-
| CheckboxFieldConfig
|
|
206
|
-
| SelectFieldConfig
|
|
207
|
-
| MediaFieldConfig
|
|
208
|
-
| RelationFieldConfig
|
|
209
|
-
| ArrayFieldConfig
|
|
210
|
-
| GroupFieldConfig
|
|
211
|
-
| BlocksFieldConfig
|
|
212
|
-
| RichTextFieldConfig
|
|
213
|
-
| BasicFieldConfig
|
|
214
|
-
| CodeFieldConfig
|
|
215
|
-
| CollapsibleFieldConfig
|
|
216
|
-
| JoinFieldConfig
|
|
217
|
-
| PointFieldConfig
|
|
218
|
-
| RadioFieldConfig
|
|
219
|
-
| RowFieldConfig
|
|
220
|
-
| UIFieldConfig
|
|
221
|
-
| DZFieldConfig
|
|
222
|
-
|
|
223
|
-
// ── Collection & Global Config ───────────────────────────────────────────────
|
|
224
|
-
|
|
225
|
-
export interface CollectionConfig {
|
|
226
|
-
name: string
|
|
227
|
-
slug: string
|
|
228
|
-
labels?: { singular: string; plural: string }
|
|
229
|
-
fields: FieldConfig[]
|
|
230
|
-
drafts?: boolean
|
|
231
|
-
seo?: boolean
|
|
232
|
-
timestamps?: boolean
|
|
233
|
-
singleton?: boolean
|
|
234
|
-
versions?: boolean
|
|
235
|
-
maxVersions?: number
|
|
236
|
-
scheduling?: boolean
|
|
237
|
-
publicRead?: boolean
|
|
238
|
-
softDelete?: boolean
|
|
239
|
-
hooks?: {
|
|
240
|
-
beforeValidate?: (data: unknown, user: unknown, context: { hookType: string }) => unknown | Promise<unknown>
|
|
241
|
-
beforeCreate?: (data: unknown, user: unknown, context: { hookType: string }) => unknown | Promise<unknown>
|
|
242
|
-
afterCreate?: (doc: unknown, user: unknown, context: { hookType: string }) => void | Promise<void>
|
|
243
|
-
beforeUpdate?: (data: unknown, user: unknown, context: { hookType: string }) => unknown | Promise<unknown>
|
|
244
|
-
afterUpdate?: (doc: unknown, user: unknown, context: { hookType: string }) => void | Promise<void>
|
|
245
|
-
beforeDelete?: (id: string, user: unknown, context: { hookType: string }) => void | Promise<void>
|
|
246
|
-
afterDelete?: (id: string, user: unknown, context: { hookType: string }) => void | Promise<void>
|
|
247
|
-
afterRead?: (doc: unknown, user: unknown, context: { hookType: string }) => unknown | Promise<unknown>
|
|
248
|
-
afterError?: (error: Error, data: unknown, user: unknown) => void | Promise<void>
|
|
249
|
-
}
|
|
250
|
-
access?: {
|
|
251
|
-
/** Return false to deny, or an object to merge as query constraints (Row-Level Security). */
|
|
252
|
-
read?: (user: unknown, context?: { req?: unknown }) => boolean | object
|
|
253
|
-
/** Return false to deny, or an object to constrain which documents the user may create. */
|
|
254
|
-
create?: (user: unknown, context?: { req?: unknown }) => boolean
|
|
255
|
-
/** Return false to deny, or an object to constrain which documents the user may update. */
|
|
256
|
-
update?: (user: unknown, context?: { req?: unknown }) => boolean | object
|
|
257
|
-
/** Return false to deny, or an object to constrain which documents the user may delete. */
|
|
258
|
-
delete?: (user: unknown, context?: { req?: unknown }) => boolean | object
|
|
259
|
-
}
|
|
260
|
-
admin?: {
|
|
261
|
-
group?: string
|
|
262
|
-
hidden?: boolean
|
|
263
|
-
useAsTitle?: string
|
|
264
|
-
displayTemplate?: string
|
|
265
|
-
defaultColumns?: string[]
|
|
266
|
-
icon?: string
|
|
267
|
-
previewUrl?: string | ((doc: unknown) => string)
|
|
268
|
-
}
|
|
269
|
-
endpoints?: {
|
|
270
|
-
path: string
|
|
271
|
-
method: 'get' | 'post' | 'put' | 'delete' | 'patch'
|
|
272
|
-
handler: (req: unknown, res: unknown) => void | Promise<void>
|
|
273
|
-
}[]
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
export type GlobalConfig = CollectionConfig // Globals are singletons
|
|
277
|
-
|
|
278
|
-
// ── Plugin & System Config ───────────────────────────────────────────────────
|
|
279
|
-
|
|
280
|
-
export interface ZenithPlugin {
|
|
281
|
-
/** Unique identifier (slug). Use reverse-domain notation: `zenith-seo`, `acme-analytics` */
|
|
282
|
-
id: string
|
|
283
|
-
/** Display name shown in admin UI */
|
|
284
|
-
name: string
|
|
285
|
-
version?: string
|
|
286
|
-
description?: string
|
|
287
|
-
author?: string
|
|
288
|
-
/** Plugin home page / documentation URL */
|
|
289
|
-
homepage?: string
|
|
290
|
-
/** NPM package name if installable via package manager */
|
|
291
|
-
packageName?: string
|
|
292
|
-
downloads?: number
|
|
293
|
-
/** Minimum Zenith engine version required */
|
|
294
|
-
minEngineVersion?: string
|
|
295
|
-
/** Other plugin IDs this plugin depends on */
|
|
296
|
-
dependencies?: string[]
|
|
297
|
-
/** Whether the plugin is active. Disabled plugins are not applied. */
|
|
298
|
-
enabled?: boolean
|
|
299
|
-
/**
|
|
300
|
-
* JSON Schema for plugin configuration options.
|
|
301
|
-
* Used by the admin UI to render a settings form.
|
|
302
|
-
*/
|
|
303
|
-
configSchema?: Record<string, {
|
|
304
|
-
type: 'string' | 'number' | 'boolean' | 'select' | 'multiselect' | 'url' | 'secret'
|
|
305
|
-
label: string
|
|
306
|
-
description?: string
|
|
307
|
-
default?: unknown
|
|
308
|
-
options?: Array<{ label: string; value: string }>
|
|
309
|
-
required?: boolean
|
|
310
|
-
}>
|
|
311
|
-
/** Runtime config values (set by admin UI) */
|
|
312
|
-
config?: Record<string, unknown>
|
|
313
|
-
/**
|
|
314
|
-
* Transform the CMS config (add collections, fields, hooks, etc.).
|
|
315
|
-
* Called at engine bootstrap for each enabled plugin.
|
|
316
|
-
*/
|
|
317
|
-
apply: (config: CMSConfig, pluginConfig?: Record<string, unknown>) => CMSConfig | void
|
|
318
|
-
/** Called after all plugins are applied, before routes are mounted */
|
|
319
|
-
onInit?: (ctx: PluginContext) => void | Promise<void>
|
|
320
|
-
/** Called after the engine is fully started and listening */
|
|
321
|
-
onReady?: (ctx: PluginContext) => void | Promise<void>
|
|
322
|
-
/** Called when the engine is shutting down */
|
|
323
|
-
onDestroy?: (ctx: PluginContext) => void | Promise<void>
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
export interface PluginContext {
|
|
327
|
-
/** Express application instance */
|
|
328
|
-
app: unknown
|
|
329
|
-
/** Active database adapter */
|
|
330
|
-
adapter: unknown
|
|
331
|
-
/** Current CMS config (after all plugins applied) */
|
|
332
|
-
config: CMSConfig
|
|
333
|
-
/** Hook registry — use to register lifecycle hooks */
|
|
334
|
-
hooks: {
|
|
335
|
-
on: <T = unknown>(hook: string, handler: (payload: T) => T | Promise<T> | void, priority?: number) => () => void
|
|
336
|
-
emit: (hook: string, payload: unknown) => Promise<void>
|
|
337
|
-
}
|
|
338
|
-
/** Register admin UI components */
|
|
339
|
-
admin: {
|
|
340
|
-
registerComponent: (slot: string, component: { id: string; label: string; icon?: string }) => void
|
|
341
|
-
}
|
|
342
|
-
/** Logger instance */
|
|
343
|
-
logger: {
|
|
344
|
-
info: (msg: string, meta?: Record<string, unknown>) => void
|
|
345
|
-
warn: (msg: string, meta?: Record<string, unknown>) => void
|
|
346
|
-
error: (msg: string, meta?: Record<string, unknown>) => void
|
|
347
|
-
debug: (msg: string, meta?: Record<string, unknown>) => void
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
export type DeploymentProvider = 'cloudflare' | 'netlify' | 'vercel' | 'custom'
|
|
352
|
-
|
|
353
|
-
export interface DeploymentConfig {
|
|
354
|
-
provider: DeploymentProvider
|
|
355
|
-
hookUrl: string
|
|
356
|
-
triggerOn?: string[]
|
|
357
|
-
autoTrigger?: boolean
|
|
358
|
-
}
|
|
359
|
-
|
|
360
|
-
export interface WebhookTarget {
|
|
361
|
-
url: string
|
|
362
|
-
events: string[]
|
|
363
|
-
secret?: string
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
export interface CMSConfig {
|
|
367
|
-
collections: CollectionConfig[]
|
|
368
|
-
globals?: GlobalConfig[]
|
|
369
|
-
plugins?: ZenithPlugin[]
|
|
370
|
-
webhooks?: WebhookTarget[]
|
|
371
|
-
deployment?: DeploymentConfig
|
|
372
|
-
cors?: {
|
|
373
|
-
origins: string[]
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
export * from './generated'
|
|
378
|
-
export * from './database'
|