@dyrected/core 2.5.55 → 2.5.58

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.cjs CHANGED
@@ -27,9 +27,33 @@ __export(index_exports, {
27
27
  canViewWorkflowDraft: () => canViewWorkflowDraft,
28
28
  createLifecycleEvent: () => createLifecycleEvent,
29
29
  createWorkflowDocument: () => createWorkflowDocument,
30
+ defineArrayField: () => defineArrayField,
31
+ defineBlock: () => defineBlock,
32
+ defineBlocksField: () => defineBlocksField,
33
+ defineBooleanField: () => defineBooleanField,
30
34
  defineCollection: () => defineCollection,
31
35
  defineConfig: () => defineConfig,
36
+ defineDateField: () => defineDateField,
37
+ defineDateTimeField: () => defineDateTimeField,
38
+ defineEmailField: () => defineEmailField,
39
+ defineField: () => defineField,
32
40
  defineGlobal: () => defineGlobal,
41
+ defineIconField: () => defineIconField,
42
+ defineImageField: () => defineImageField,
43
+ defineJoinField: () => defineJoinField,
44
+ defineJsonField: () => defineJsonField,
45
+ defineMultiSelectField: () => defineMultiSelectField,
46
+ defineNumberField: () => defineNumberField,
47
+ defineObjectField: () => defineObjectField,
48
+ defineRadioField: () => defineRadioField,
49
+ defineRelationshipField: () => defineRelationshipField,
50
+ defineRichTextField: () => defineRichTextField,
51
+ defineRowField: () => defineRowField,
52
+ defineSelectField: () => defineSelectField,
53
+ defineTextField: () => defineTextField,
54
+ defineTextareaField: () => defineTextareaField,
55
+ defineTimeField: () => defineTimeField,
56
+ defineUrlField: () => defineUrlField,
33
57
  dispatchLifecycleEvent: () => dispatchLifecycleEvent,
34
58
  dispatchPendingLifecycleEvents: () => dispatchPendingLifecycleEvents,
35
59
  executeFieldAfterRead: () => executeFieldAfterRead,
@@ -1757,6 +1781,37 @@ function defineGlobal(config) {
1757
1781
  function defineConfig(config) {
1758
1782
  return config;
1759
1783
  }
1784
+ function defineField(field) {
1785
+ return field;
1786
+ }
1787
+ function defineBlock(block) {
1788
+ return block;
1789
+ }
1790
+ function createFieldDefiner(type) {
1791
+ return (field) => ({ ...field, type });
1792
+ }
1793
+ var defineTextField = createFieldDefiner("text");
1794
+ var defineTextareaField = createFieldDefiner("textarea");
1795
+ var defineRichTextField = createFieldDefiner("richText");
1796
+ var defineNumberField = createFieldDefiner("number");
1797
+ var defineBooleanField = createFieldDefiner("boolean");
1798
+ var defineDateField = createFieldDefiner("date");
1799
+ var defineDateTimeField = createFieldDefiner("datetime");
1800
+ var defineTimeField = createFieldDefiner("time");
1801
+ var defineSelectField = createFieldDefiner("select");
1802
+ var defineMultiSelectField = createFieldDefiner("multiSelect");
1803
+ var defineRadioField = createFieldDefiner("radio");
1804
+ var defineRelationshipField = createFieldDefiner("relationship");
1805
+ var defineArrayField = createFieldDefiner("array");
1806
+ var defineObjectField = createFieldDefiner("object");
1807
+ var defineJsonField = createFieldDefiner("json");
1808
+ var defineBlocksField = createFieldDefiner("blocks");
1809
+ var defineImageField = createFieldDefiner("image");
1810
+ var defineEmailField = createFieldDefiner("email");
1811
+ var defineUrlField = createFieldDefiner("url");
1812
+ var defineIconField = createFieldDefiner("icon");
1813
+ var defineJoinField = createFieldDefiner("join");
1814
+ var defineRowField = createFieldDefiner("row");
1760
1815
  // Annotate the CommonJS export names for ESM import in node:
1761
1816
  0 && (module.exports = {
1762
1817
  LIFECYCLE_EVENTS_COLLECTION,
@@ -1766,9 +1821,33 @@ function defineConfig(config) {
1766
1821
  canViewWorkflowDraft,
1767
1822
  createLifecycleEvent,
1768
1823
  createWorkflowDocument,
1824
+ defineArrayField,
1825
+ defineBlock,
1826
+ defineBlocksField,
1827
+ defineBooleanField,
1769
1828
  defineCollection,
1770
1829
  defineConfig,
1830
+ defineDateField,
1831
+ defineDateTimeField,
1832
+ defineEmailField,
1833
+ defineField,
1771
1834
  defineGlobal,
1835
+ defineIconField,
1836
+ defineImageField,
1837
+ defineJoinField,
1838
+ defineJsonField,
1839
+ defineMultiSelectField,
1840
+ defineNumberField,
1841
+ defineObjectField,
1842
+ defineRadioField,
1843
+ defineRelationshipField,
1844
+ defineRichTextField,
1845
+ defineRowField,
1846
+ defineSelectField,
1847
+ defineTextField,
1848
+ defineTextareaField,
1849
+ defineTimeField,
1850
+ defineUrlField,
1772
1851
  dispatchLifecycleEvent,
1773
1852
  dispatchPendingLifecycleEvents,
1774
1853
  executeFieldAfterRead,
package/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- import { F as Field, B as Block, D as DyrectedConfig, C as CollectionConfig, A as AdminAuthConfig, P as PublicAdminAuthConfig, W as WorkflowConfig, a as AuthenticatedUser, b as WorkflowTransition, L as LifecycleEventName, c as LifecycleEvent, d as BaseDocument, H as HookRequestContext, G as GlobalConfig } from './app-config-DqCipvSI.cjs';
2
- export { e as AccessFunction, f as AdminAuthAccessResolution, g as AdminAuthClaimMapping, h as AdminAuthMember, i as AdminAuthProvider, j as AdminAuthProviderMembersConfig, k as AdminAuthProvisioningMode, l as AdminAuthResolveAccessArgs, m as AdminAuthResolvedIdentity, n as AdminConfig, o as AdminDashboardComponentSlots, p as AdminIconName, q as ArrayField, r as BaseAdminAuthProvider, s as BaseFieldAdmin, t as BlockVariant, u as BlocksField, v as BooleanField, w as BooleanFieldAdmin, x as CharacterLimitFieldAdmin, y as CharacterLimitFieldConfig, z as CollectionAfterChangeHook, E as CollectionAfterDeleteHook, I as CollectionAfterReadHook, J as CollectionAfterTransitionHook, K as CollectionBeforeChangeHook, M as CollectionBeforeDeleteHook, N as CollectionBeforeReadHook, O as CollectionBeforeTransitionHook, Q as CollectionListComponentSlots, R as CustomAdminAuthProvider, S as DatabaseAdapter, T as DateField, U as DateTimeField, V as DynamicOptionItem, X as DynamicOptionsConfig, Y as DynamicOptionsResolver, Z as DynamicOptionsResolverArgs, _ as EmailField, $ as EmailFieldAdmin, a0 as FieldAdminHooks, a1 as FieldAdminOnChangeHook, a2 as FieldAdminOnChangeHookArgs, a3 as FieldAdminOptionsHook, a4 as FieldAdminOptionsHookArgs, a5 as FieldAdminOptionsHookResult, a6 as FieldAfterReadHook, a7 as FieldAfterReadHookArgs, a8 as FieldBase, a9 as FieldBeforeChangeHook, aa as FieldBeforeChangeHookArgs, ab as FieldHook, ac as FieldHooks, ad as FieldType, ae as FileData, af as GlobalAfterChangeHook, ag as GlobalAfterReadHook, ah as GlobalBeforeChangeHook, ai as GlobalBeforeReadHook, aj as HookFunction, ak as IconField, al as IconFieldAdmin, am as ImageField, an as ImageService, ao as JoinField, ap as JsonField, aq as LIFECYCLE_EVENT_NAMES, ar as LifecycleEventHandler, as as MultiSelectField, at as MultiSelectFieldAdmin, au as NumberField, av as OIDCAdminAuthProvider, aw as ObjectField, ax as PaginatedResult, ay as PublicAdminAuthProvider, az as RadioField, aA as RadioFieldAdmin, aB as ReadonlyDatabaseAdapter, aC as RelationshipField, aD as RichTextField, aE as RowField, aF as SelectField, aG as SelectFieldAdmin, aH as StorageAdapter, aI as TextField, aJ as TextFieldAdmin, aK as TextareaField, aL as TextareaFieldAdmin, aM as TimeField, aN as TypedField, aO as UploadConfig, aP as UrlField, aQ as UrlFieldAdmin, aR as WordLimitFieldAdmin, aS as WordLimitFieldConfig, aT as WorkflowMetadata, aU as WorkflowRole, aV as WorkflowState, aW as WorkflowTransitionContext } from './app-config-DqCipvSI.cjs';
1
+ import { F as Field, B as Block, D as DyrectedConfig, C as CollectionConfig, A as AdminAuthConfig, P as PublicAdminAuthConfig, W as WorkflowConfig, a as AuthenticatedUser, b as WorkflowTransition, L as LifecycleEventName, c as LifecycleEvent, d as BaseDocument, H as HookRequestContext, e as ArrayField, f as BlocksField, g as BooleanField, h as DateField, i as DateTimeField, E as EmailField, G as GlobalConfig, I as IconField, j as ImageField, J as JoinField, k as JsonField, M as MultiSelectField, N as NumberField, O as ObjectField, R as RadioField, l as RelationshipField, m as RichTextField, n as RowField, S as SelectField, T as TextField, o as TextareaField, p as TimeField, U as UrlField } from './app-config-oU1EGHND.cjs';
2
+ export { q as AccessFunction, r as AccessFunctionArgs, s as AccessPolicyResolver, t as AccessResult, u as AccessRule, v as AdminAuthAccessResolution, w as AdminAuthClaimMapping, x as AdminAuthMember, y as AdminAuthProvider, z as AdminAuthProviderMembersConfig, K as AdminAuthProvisioningMode, Q as AdminAuthResolveAccessArgs, V as AdminAuthResolvedIdentity, X as AdminConfig, Y as AdminDashboardComponentSlots, Z as AdminIconName, _ as BaseAdminAuthProvider, $ as BaseFieldAdmin, a0 as BlockVariant, a1 as BooleanFieldAdmin, a2 as CharacterLimitFieldAdmin, a3 as CharacterLimitFieldConfig, a4 as CollectionAfterChangeHook, a5 as CollectionAfterDeleteHook, a6 as CollectionAfterReadHook, a7 as CollectionAfterTransitionHook, a8 as CollectionBeforeChangeHook, a9 as CollectionBeforeDeleteHook, aa as CollectionBeforeReadHook, ab as CollectionBeforeTransitionHook, ac as CollectionListComponentSlots, ad as CustomAdminAuthProvider, ae as DatabaseAdapter, af as DynamicOptionItem, ag as DynamicOptionsConfig, ah as DynamicOptionsResolver, ai as DynamicOptionsResolverArgs, aj as EmailFieldAdmin, ak as FieldAdminHooks, al as FieldAdminOnChangeHook, am as FieldAdminOnChangeHookArgs, an as FieldAdminOptionsHook, ao as FieldAdminOptionsHookArgs, ap as FieldAdminOptionsHookResult, aq as FieldAfterReadHook, ar as FieldAfterReadHookArgs, as as FieldBase, at as FieldBeforeChangeHook, au as FieldBeforeChangeHookArgs, av as FieldHook, aw as FieldHooks, ax as FieldType, ay as FileData, az as GlobalAfterChangeHook, aA as GlobalAfterReadHook, aB as GlobalBeforeChangeHook, aC as GlobalBeforeReadHook, aD as HeadingLevel, aE as HookFunction, aF as IconFieldAdmin, aG as ImageService, aH as LIFECYCLE_EVENT_NAMES, aI as LifecycleEventHandler, aJ as MultiSelectFieldAdmin, aK as NamedAccessPolicy, aL as OIDCAdminAuthProvider, aM as PaginatedResult, aN as PublicAdminAuthProvider, aO as RadioFieldAdmin, aP as ReadonlyDatabaseAdapter, aQ as RichTextFeature, aR as RichTextFieldConfig, aS as SelectFieldAdmin, aT as StorageAdapter, aU as TextFieldAdmin, aV as TextareaFieldAdmin, aW as TypedField, aX as UploadConfig, aY as UrlFieldAdmin, aZ as WordLimitFieldAdmin, a_ as WordLimitFieldConfig, a$ as WorkflowMetadata, b0 as WorkflowRole, b1 as WorkflowState, b2 as WorkflowTransitionContext } from './app-config-oU1EGHND.cjs';
3
3
  import 'lucide-react';
4
4
 
5
5
  type Prettify<T> = {
@@ -260,8 +260,8 @@ declare function transitionWorkflow(args: {
260
260
  * export const Posts = defineCollection({
261
261
  * slug: 'posts',
262
262
  * fields: [
263
- * { name: 'title', type: 'text', required: true },
264
- * { name: 'status', type: 'select', options: ['draft', 'published'], required: true },
263
+ * defineTextField({ name: 'title', required: true }),
264
+ * defineSelectField({ name: 'status', options: ['draft', 'published'], required: true }),
265
265
  * ],
266
266
  * hooks: {
267
267
  * beforeChange: [({ data }) => {
@@ -313,8 +313,8 @@ declare function defineCollection<TDoc extends object>(config: CollectionConfig<
313
313
  * export const Settings = defineGlobal({
314
314
  * slug: 'site-settings',
315
315
  * fields: [
316
- * { name: 'siteName', type: 'text', required: true },
317
- * { name: 'maintenanceMode', type: 'boolean' },
316
+ * defineTextField({ name: 'siteName', required: true }),
317
+ * defineBooleanField({ name: 'maintenanceMode' }),
318
318
  * ],
319
319
  * hooks: {
320
320
  * afterChange: [({ doc }) => {
@@ -341,5 +341,127 @@ declare function defineGlobal<TDoc extends object>(config: GlobalConfig<TDoc>):
341
341
  * server-level configuration.
342
342
  */
343
343
  declare function defineConfig(config: DyrectedConfig): DyrectedConfig;
344
+ /**
345
+ * Define a single field of any type. This is an identity helper: it returns the
346
+ * field unchanged at runtime but preserves the exact literal type, so document
347
+ * shapes still infer correctly when the field is placed in a `defineCollection`
348
+ * or `defineGlobal` `fields` array.
349
+ *
350
+ * Use it when you want autocomplete and type-checking on a field written on its
351
+ * own — for example a shared field reused across collections:
352
+ *
353
+ * ```ts
354
+ * const slug = defineField({ name: 'slug', type: 'text', required: true, unique: true })
355
+ *
356
+ * export const Posts = defineCollection({ slug: 'posts', fields: [slug, ...] })
357
+ * ```
358
+ *
359
+ * For a field of a known type, prefer the dedicated helper (e.g.
360
+ * {@link defineTextField}) so you don't have to repeat the `type`.
361
+ */
362
+ declare function defineField<const T extends Field>(field: T): T;
363
+ /**
364
+ * Define a {@link Block} for use in a `blocks` field. Identity helper that
365
+ * preserves the block's literal type (slug + fields) so `blocks`-field values
366
+ * stay fully inferred.
367
+ *
368
+ * ```ts
369
+ * const Hero = defineBlock({
370
+ * slug: 'hero',
371
+ * fields: [defineTextField({ name: 'heading', required: true })],
372
+ * })
373
+ *
374
+ * defineBlocksField({ name: 'layout', blocks: [Hero] })
375
+ * ```
376
+ */
377
+ declare function defineBlock<const T extends Block>(block: T): T;
378
+ /** Define a `text` field. */
379
+ declare const defineTextField: <const T extends Omit<TextField, "type">>(field: T) => T & {
380
+ type: "text";
381
+ };
382
+ /** Define a `textarea` field. */
383
+ declare const defineTextareaField: <const T extends Omit<TextareaField, "type">>(field: T) => T & {
384
+ type: "textarea";
385
+ };
386
+ /** Define a `richText` field, including its editor `features` and `headingLevels`. */
387
+ declare const defineRichTextField: <const T extends Omit<RichTextField, "type">>(field: T) => T & {
388
+ type: "richText";
389
+ };
390
+ /** Define a `number` field. */
391
+ declare const defineNumberField: <const T extends Omit<NumberField, "type">>(field: T) => T & {
392
+ type: "number";
393
+ };
394
+ /** Define a `boolean` field. */
395
+ declare const defineBooleanField: <const T extends Omit<BooleanField, "type">>(field: T) => T & {
396
+ type: "boolean";
397
+ };
398
+ /** Define a `date` field. */
399
+ declare const defineDateField: <const T extends Omit<DateField, "type">>(field: T) => T & {
400
+ type: "date";
401
+ };
402
+ /** Define a `datetime` field. */
403
+ declare const defineDateTimeField: <const T extends Omit<DateTimeField, "type">>(field: T) => T & {
404
+ type: "datetime";
405
+ };
406
+ /** Define a `time` field. */
407
+ declare const defineTimeField: <const T extends Omit<TimeField, "type">>(field: T) => T & {
408
+ type: "time";
409
+ };
410
+ /** Define a `select` field. */
411
+ declare const defineSelectField: <const T extends Omit<SelectField, "type">>(field: T) => T & {
412
+ type: "select";
413
+ };
414
+ /** Define a `multiSelect` field. */
415
+ declare const defineMultiSelectField: <const T extends Omit<MultiSelectField, "type">>(field: T) => T & {
416
+ type: "multiSelect";
417
+ };
418
+ /** Define a `radio` field. */
419
+ declare const defineRadioField: <const T extends Omit<RadioField, "type">>(field: T) => T & {
420
+ type: "radio";
421
+ };
422
+ /** Define a `relationship` field. */
423
+ declare const defineRelationshipField: <const T extends Omit<RelationshipField, "type">>(field: T) => T & {
424
+ type: "relationship";
425
+ };
426
+ /** Define an `array` field. */
427
+ declare const defineArrayField: <const T extends Omit<ArrayField, "type">>(field: T) => T & {
428
+ type: "array";
429
+ };
430
+ /** Define an `object` field. */
431
+ declare const defineObjectField: <const T extends Omit<ObjectField, "type">>(field: T) => T & {
432
+ type: "object";
433
+ };
434
+ /** Define a `json` field. */
435
+ declare const defineJsonField: <const T extends Omit<JsonField, "type">>(field: T) => T & {
436
+ type: "json";
437
+ };
438
+ /** Define a `blocks` field. */
439
+ declare const defineBlocksField: <const T extends Omit<BlocksField, "type">>(field: T) => T & {
440
+ type: "blocks";
441
+ };
442
+ /** Define an `image` field. */
443
+ declare const defineImageField: <const T extends Omit<ImageField, "type">>(field: T) => T & {
444
+ type: "image";
445
+ };
446
+ /** Define an `email` field. */
447
+ declare const defineEmailField: <const T extends Omit<EmailField, "type">>(field: T) => T & {
448
+ type: "email";
449
+ };
450
+ /** Define a `url` field. */
451
+ declare const defineUrlField: <const T extends Omit<UrlField, "type">>(field: T) => T & {
452
+ type: "url";
453
+ };
454
+ /** Define an `icon` field. */
455
+ declare const defineIconField: <const T extends Omit<IconField, "type">>(field: T) => T & {
456
+ type: "icon";
457
+ };
458
+ /** Define a `join` field. */
459
+ declare const defineJoinField: <const T extends Omit<JoinField, "type">>(field: T) => T & {
460
+ type: "join";
461
+ };
462
+ /** Define a layout-only `row` field. */
463
+ declare const defineRowField: <const T extends Omit<RowField, "type">>(field: T) => T & {
464
+ type: "row";
465
+ };
344
466
 
345
- export { AdminAuthConfig, type AuthDocFields, AuthenticatedUser, BaseDocument, Block, CollectionConfig, DyrectedConfig, Field, GlobalConfig, HookRequestContext, type InferDocShape, LIFECYCLE_EVENTS_COLLECTION, LifecycleEvent, LifecycleEventName, type Prettify, PublicAdminAuthConfig, type SortClause, type SortDirection, type SqlWhereResult, type SystemDocFields, type UploadDocFields, WORKFLOW_HISTORY_COLLECTION, type WhereClause, type WhereOperator, type WhereOperatorName, WorkflowConfig, WorkflowTransition, availableWorkflowTransitions, canViewWorkflowDraft, createLifecycleEvent, createWorkflowDocument, defineCollection, defineConfig, defineGlobal, dispatchLifecycleEvent, dispatchPendingLifecycleEvents, executeFieldAfterRead, executeFieldBeforeChange, generateOpenApi, getAdminAuthCollection, getPublicAdminAuthConfig, initializeWorkflowDocument, materializeWorkflowDocument, normalizeConfig, parseMongoWhere, parseSort, parseSqlWhere, publishingWorkflow, resolveAdminAuthCollection, runCollectionHooks, saveWorkflowDraft, transitionWorkflow, workflowCapabilities };
467
+ export { AdminAuthConfig, ArrayField, type AuthDocFields, AuthenticatedUser, BaseDocument, Block, BlocksField, BooleanField, CollectionConfig, DateField, DateTimeField, DyrectedConfig, EmailField, Field, GlobalConfig, HookRequestContext, IconField, ImageField, type InferDocShape, JoinField, JsonField, LIFECYCLE_EVENTS_COLLECTION, LifecycleEvent, LifecycleEventName, MultiSelectField, NumberField, ObjectField, type Prettify, PublicAdminAuthConfig, RadioField, RelationshipField, RichTextField, RowField, SelectField, type SortClause, type SortDirection, type SqlWhereResult, type SystemDocFields, TextField, TextareaField, TimeField, type UploadDocFields, UrlField, WORKFLOW_HISTORY_COLLECTION, type WhereClause, type WhereOperator, type WhereOperatorName, WorkflowConfig, WorkflowTransition, availableWorkflowTransitions, canViewWorkflowDraft, createLifecycleEvent, createWorkflowDocument, defineArrayField, defineBlock, defineBlocksField, defineBooleanField, defineCollection, defineConfig, defineDateField, defineDateTimeField, defineEmailField, defineField, defineGlobal, defineIconField, defineImageField, defineJoinField, defineJsonField, defineMultiSelectField, defineNumberField, defineObjectField, defineRadioField, defineRelationshipField, defineRichTextField, defineRowField, defineSelectField, defineTextField, defineTextareaField, defineTimeField, defineUrlField, dispatchLifecycleEvent, dispatchPendingLifecycleEvents, executeFieldAfterRead, executeFieldBeforeChange, generateOpenApi, getAdminAuthCollection, getPublicAdminAuthConfig, initializeWorkflowDocument, materializeWorkflowDocument, normalizeConfig, parseMongoWhere, parseSort, parseSqlWhere, publishingWorkflow, resolveAdminAuthCollection, runCollectionHooks, saveWorkflowDraft, transitionWorkflow, workflowCapabilities };
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { F as Field, B as Block, D as DyrectedConfig, C as CollectionConfig, A as AdminAuthConfig, P as PublicAdminAuthConfig, W as WorkflowConfig, a as AuthenticatedUser, b as WorkflowTransition, L as LifecycleEventName, c as LifecycleEvent, d as BaseDocument, H as HookRequestContext, G as GlobalConfig } from './app-config-DqCipvSI.js';
2
- export { e as AccessFunction, f as AdminAuthAccessResolution, g as AdminAuthClaimMapping, h as AdminAuthMember, i as AdminAuthProvider, j as AdminAuthProviderMembersConfig, k as AdminAuthProvisioningMode, l as AdminAuthResolveAccessArgs, m as AdminAuthResolvedIdentity, n as AdminConfig, o as AdminDashboardComponentSlots, p as AdminIconName, q as ArrayField, r as BaseAdminAuthProvider, s as BaseFieldAdmin, t as BlockVariant, u as BlocksField, v as BooleanField, w as BooleanFieldAdmin, x as CharacterLimitFieldAdmin, y as CharacterLimitFieldConfig, z as CollectionAfterChangeHook, E as CollectionAfterDeleteHook, I as CollectionAfterReadHook, J as CollectionAfterTransitionHook, K as CollectionBeforeChangeHook, M as CollectionBeforeDeleteHook, N as CollectionBeforeReadHook, O as CollectionBeforeTransitionHook, Q as CollectionListComponentSlots, R as CustomAdminAuthProvider, S as DatabaseAdapter, T as DateField, U as DateTimeField, V as DynamicOptionItem, X as DynamicOptionsConfig, Y as DynamicOptionsResolver, Z as DynamicOptionsResolverArgs, _ as EmailField, $ as EmailFieldAdmin, a0 as FieldAdminHooks, a1 as FieldAdminOnChangeHook, a2 as FieldAdminOnChangeHookArgs, a3 as FieldAdminOptionsHook, a4 as FieldAdminOptionsHookArgs, a5 as FieldAdminOptionsHookResult, a6 as FieldAfterReadHook, a7 as FieldAfterReadHookArgs, a8 as FieldBase, a9 as FieldBeforeChangeHook, aa as FieldBeforeChangeHookArgs, ab as FieldHook, ac as FieldHooks, ad as FieldType, ae as FileData, af as GlobalAfterChangeHook, ag as GlobalAfterReadHook, ah as GlobalBeforeChangeHook, ai as GlobalBeforeReadHook, aj as HookFunction, ak as IconField, al as IconFieldAdmin, am as ImageField, an as ImageService, ao as JoinField, ap as JsonField, aq as LIFECYCLE_EVENT_NAMES, ar as LifecycleEventHandler, as as MultiSelectField, at as MultiSelectFieldAdmin, au as NumberField, av as OIDCAdminAuthProvider, aw as ObjectField, ax as PaginatedResult, ay as PublicAdminAuthProvider, az as RadioField, aA as RadioFieldAdmin, aB as ReadonlyDatabaseAdapter, aC as RelationshipField, aD as RichTextField, aE as RowField, aF as SelectField, aG as SelectFieldAdmin, aH as StorageAdapter, aI as TextField, aJ as TextFieldAdmin, aK as TextareaField, aL as TextareaFieldAdmin, aM as TimeField, aN as TypedField, aO as UploadConfig, aP as UrlField, aQ as UrlFieldAdmin, aR as WordLimitFieldAdmin, aS as WordLimitFieldConfig, aT as WorkflowMetadata, aU as WorkflowRole, aV as WorkflowState, aW as WorkflowTransitionContext } from './app-config-DqCipvSI.js';
1
+ import { F as Field, B as Block, D as DyrectedConfig, C as CollectionConfig, A as AdminAuthConfig, P as PublicAdminAuthConfig, W as WorkflowConfig, a as AuthenticatedUser, b as WorkflowTransition, L as LifecycleEventName, c as LifecycleEvent, d as BaseDocument, H as HookRequestContext, e as ArrayField, f as BlocksField, g as BooleanField, h as DateField, i as DateTimeField, E as EmailField, G as GlobalConfig, I as IconField, j as ImageField, J as JoinField, k as JsonField, M as MultiSelectField, N as NumberField, O as ObjectField, R as RadioField, l as RelationshipField, m as RichTextField, n as RowField, S as SelectField, T as TextField, o as TextareaField, p as TimeField, U as UrlField } from './app-config-oU1EGHND.js';
2
+ export { q as AccessFunction, r as AccessFunctionArgs, s as AccessPolicyResolver, t as AccessResult, u as AccessRule, v as AdminAuthAccessResolution, w as AdminAuthClaimMapping, x as AdminAuthMember, y as AdminAuthProvider, z as AdminAuthProviderMembersConfig, K as AdminAuthProvisioningMode, Q as AdminAuthResolveAccessArgs, V as AdminAuthResolvedIdentity, X as AdminConfig, Y as AdminDashboardComponentSlots, Z as AdminIconName, _ as BaseAdminAuthProvider, $ as BaseFieldAdmin, a0 as BlockVariant, a1 as BooleanFieldAdmin, a2 as CharacterLimitFieldAdmin, a3 as CharacterLimitFieldConfig, a4 as CollectionAfterChangeHook, a5 as CollectionAfterDeleteHook, a6 as CollectionAfterReadHook, a7 as CollectionAfterTransitionHook, a8 as CollectionBeforeChangeHook, a9 as CollectionBeforeDeleteHook, aa as CollectionBeforeReadHook, ab as CollectionBeforeTransitionHook, ac as CollectionListComponentSlots, ad as CustomAdminAuthProvider, ae as DatabaseAdapter, af as DynamicOptionItem, ag as DynamicOptionsConfig, ah as DynamicOptionsResolver, ai as DynamicOptionsResolverArgs, aj as EmailFieldAdmin, ak as FieldAdminHooks, al as FieldAdminOnChangeHook, am as FieldAdminOnChangeHookArgs, an as FieldAdminOptionsHook, ao as FieldAdminOptionsHookArgs, ap as FieldAdminOptionsHookResult, aq as FieldAfterReadHook, ar as FieldAfterReadHookArgs, as as FieldBase, at as FieldBeforeChangeHook, au as FieldBeforeChangeHookArgs, av as FieldHook, aw as FieldHooks, ax as FieldType, ay as FileData, az as GlobalAfterChangeHook, aA as GlobalAfterReadHook, aB as GlobalBeforeChangeHook, aC as GlobalBeforeReadHook, aD as HeadingLevel, aE as HookFunction, aF as IconFieldAdmin, aG as ImageService, aH as LIFECYCLE_EVENT_NAMES, aI as LifecycleEventHandler, aJ as MultiSelectFieldAdmin, aK as NamedAccessPolicy, aL as OIDCAdminAuthProvider, aM as PaginatedResult, aN as PublicAdminAuthProvider, aO as RadioFieldAdmin, aP as ReadonlyDatabaseAdapter, aQ as RichTextFeature, aR as RichTextFieldConfig, aS as SelectFieldAdmin, aT as StorageAdapter, aU as TextFieldAdmin, aV as TextareaFieldAdmin, aW as TypedField, aX as UploadConfig, aY as UrlFieldAdmin, aZ as WordLimitFieldAdmin, a_ as WordLimitFieldConfig, a$ as WorkflowMetadata, b0 as WorkflowRole, b1 as WorkflowState, b2 as WorkflowTransitionContext } from './app-config-oU1EGHND.js';
3
3
  import 'lucide-react';
4
4
 
5
5
  type Prettify<T> = {
@@ -260,8 +260,8 @@ declare function transitionWorkflow(args: {
260
260
  * export const Posts = defineCollection({
261
261
  * slug: 'posts',
262
262
  * fields: [
263
- * { name: 'title', type: 'text', required: true },
264
- * { name: 'status', type: 'select', options: ['draft', 'published'], required: true },
263
+ * defineTextField({ name: 'title', required: true }),
264
+ * defineSelectField({ name: 'status', options: ['draft', 'published'], required: true }),
265
265
  * ],
266
266
  * hooks: {
267
267
  * beforeChange: [({ data }) => {
@@ -313,8 +313,8 @@ declare function defineCollection<TDoc extends object>(config: CollectionConfig<
313
313
  * export const Settings = defineGlobal({
314
314
  * slug: 'site-settings',
315
315
  * fields: [
316
- * { name: 'siteName', type: 'text', required: true },
317
- * { name: 'maintenanceMode', type: 'boolean' },
316
+ * defineTextField({ name: 'siteName', required: true }),
317
+ * defineBooleanField({ name: 'maintenanceMode' }),
318
318
  * ],
319
319
  * hooks: {
320
320
  * afterChange: [({ doc }) => {
@@ -341,5 +341,127 @@ declare function defineGlobal<TDoc extends object>(config: GlobalConfig<TDoc>):
341
341
  * server-level configuration.
342
342
  */
343
343
  declare function defineConfig(config: DyrectedConfig): DyrectedConfig;
344
+ /**
345
+ * Define a single field of any type. This is an identity helper: it returns the
346
+ * field unchanged at runtime but preserves the exact literal type, so document
347
+ * shapes still infer correctly when the field is placed in a `defineCollection`
348
+ * or `defineGlobal` `fields` array.
349
+ *
350
+ * Use it when you want autocomplete and type-checking on a field written on its
351
+ * own — for example a shared field reused across collections:
352
+ *
353
+ * ```ts
354
+ * const slug = defineField({ name: 'slug', type: 'text', required: true, unique: true })
355
+ *
356
+ * export const Posts = defineCollection({ slug: 'posts', fields: [slug, ...] })
357
+ * ```
358
+ *
359
+ * For a field of a known type, prefer the dedicated helper (e.g.
360
+ * {@link defineTextField}) so you don't have to repeat the `type`.
361
+ */
362
+ declare function defineField<const T extends Field>(field: T): T;
363
+ /**
364
+ * Define a {@link Block} for use in a `blocks` field. Identity helper that
365
+ * preserves the block's literal type (slug + fields) so `blocks`-field values
366
+ * stay fully inferred.
367
+ *
368
+ * ```ts
369
+ * const Hero = defineBlock({
370
+ * slug: 'hero',
371
+ * fields: [defineTextField({ name: 'heading', required: true })],
372
+ * })
373
+ *
374
+ * defineBlocksField({ name: 'layout', blocks: [Hero] })
375
+ * ```
376
+ */
377
+ declare function defineBlock<const T extends Block>(block: T): T;
378
+ /** Define a `text` field. */
379
+ declare const defineTextField: <const T extends Omit<TextField, "type">>(field: T) => T & {
380
+ type: "text";
381
+ };
382
+ /** Define a `textarea` field. */
383
+ declare const defineTextareaField: <const T extends Omit<TextareaField, "type">>(field: T) => T & {
384
+ type: "textarea";
385
+ };
386
+ /** Define a `richText` field, including its editor `features` and `headingLevels`. */
387
+ declare const defineRichTextField: <const T extends Omit<RichTextField, "type">>(field: T) => T & {
388
+ type: "richText";
389
+ };
390
+ /** Define a `number` field. */
391
+ declare const defineNumberField: <const T extends Omit<NumberField, "type">>(field: T) => T & {
392
+ type: "number";
393
+ };
394
+ /** Define a `boolean` field. */
395
+ declare const defineBooleanField: <const T extends Omit<BooleanField, "type">>(field: T) => T & {
396
+ type: "boolean";
397
+ };
398
+ /** Define a `date` field. */
399
+ declare const defineDateField: <const T extends Omit<DateField, "type">>(field: T) => T & {
400
+ type: "date";
401
+ };
402
+ /** Define a `datetime` field. */
403
+ declare const defineDateTimeField: <const T extends Omit<DateTimeField, "type">>(field: T) => T & {
404
+ type: "datetime";
405
+ };
406
+ /** Define a `time` field. */
407
+ declare const defineTimeField: <const T extends Omit<TimeField, "type">>(field: T) => T & {
408
+ type: "time";
409
+ };
410
+ /** Define a `select` field. */
411
+ declare const defineSelectField: <const T extends Omit<SelectField, "type">>(field: T) => T & {
412
+ type: "select";
413
+ };
414
+ /** Define a `multiSelect` field. */
415
+ declare const defineMultiSelectField: <const T extends Omit<MultiSelectField, "type">>(field: T) => T & {
416
+ type: "multiSelect";
417
+ };
418
+ /** Define a `radio` field. */
419
+ declare const defineRadioField: <const T extends Omit<RadioField, "type">>(field: T) => T & {
420
+ type: "radio";
421
+ };
422
+ /** Define a `relationship` field. */
423
+ declare const defineRelationshipField: <const T extends Omit<RelationshipField, "type">>(field: T) => T & {
424
+ type: "relationship";
425
+ };
426
+ /** Define an `array` field. */
427
+ declare const defineArrayField: <const T extends Omit<ArrayField, "type">>(field: T) => T & {
428
+ type: "array";
429
+ };
430
+ /** Define an `object` field. */
431
+ declare const defineObjectField: <const T extends Omit<ObjectField, "type">>(field: T) => T & {
432
+ type: "object";
433
+ };
434
+ /** Define a `json` field. */
435
+ declare const defineJsonField: <const T extends Omit<JsonField, "type">>(field: T) => T & {
436
+ type: "json";
437
+ };
438
+ /** Define a `blocks` field. */
439
+ declare const defineBlocksField: <const T extends Omit<BlocksField, "type">>(field: T) => T & {
440
+ type: "blocks";
441
+ };
442
+ /** Define an `image` field. */
443
+ declare const defineImageField: <const T extends Omit<ImageField, "type">>(field: T) => T & {
444
+ type: "image";
445
+ };
446
+ /** Define an `email` field. */
447
+ declare const defineEmailField: <const T extends Omit<EmailField, "type">>(field: T) => T & {
448
+ type: "email";
449
+ };
450
+ /** Define a `url` field. */
451
+ declare const defineUrlField: <const T extends Omit<UrlField, "type">>(field: T) => T & {
452
+ type: "url";
453
+ };
454
+ /** Define an `icon` field. */
455
+ declare const defineIconField: <const T extends Omit<IconField, "type">>(field: T) => T & {
456
+ type: "icon";
457
+ };
458
+ /** Define a `join` field. */
459
+ declare const defineJoinField: <const T extends Omit<JoinField, "type">>(field: T) => T & {
460
+ type: "join";
461
+ };
462
+ /** Define a layout-only `row` field. */
463
+ declare const defineRowField: <const T extends Omit<RowField, "type">>(field: T) => T & {
464
+ type: "row";
465
+ };
344
466
 
345
- export { AdminAuthConfig, type AuthDocFields, AuthenticatedUser, BaseDocument, Block, CollectionConfig, DyrectedConfig, Field, GlobalConfig, HookRequestContext, type InferDocShape, LIFECYCLE_EVENTS_COLLECTION, LifecycleEvent, LifecycleEventName, type Prettify, PublicAdminAuthConfig, type SortClause, type SortDirection, type SqlWhereResult, type SystemDocFields, type UploadDocFields, WORKFLOW_HISTORY_COLLECTION, type WhereClause, type WhereOperator, type WhereOperatorName, WorkflowConfig, WorkflowTransition, availableWorkflowTransitions, canViewWorkflowDraft, createLifecycleEvent, createWorkflowDocument, defineCollection, defineConfig, defineGlobal, dispatchLifecycleEvent, dispatchPendingLifecycleEvents, executeFieldAfterRead, executeFieldBeforeChange, generateOpenApi, getAdminAuthCollection, getPublicAdminAuthConfig, initializeWorkflowDocument, materializeWorkflowDocument, normalizeConfig, parseMongoWhere, parseSort, parseSqlWhere, publishingWorkflow, resolveAdminAuthCollection, runCollectionHooks, saveWorkflowDraft, transitionWorkflow, workflowCapabilities };
467
+ export { AdminAuthConfig, ArrayField, type AuthDocFields, AuthenticatedUser, BaseDocument, Block, BlocksField, BooleanField, CollectionConfig, DateField, DateTimeField, DyrectedConfig, EmailField, Field, GlobalConfig, HookRequestContext, IconField, ImageField, type InferDocShape, JoinField, JsonField, LIFECYCLE_EVENTS_COLLECTION, LifecycleEvent, LifecycleEventName, MultiSelectField, NumberField, ObjectField, type Prettify, PublicAdminAuthConfig, RadioField, RelationshipField, RichTextField, RowField, SelectField, type SortClause, type SortDirection, type SqlWhereResult, type SystemDocFields, TextField, TextareaField, TimeField, type UploadDocFields, UrlField, WORKFLOW_HISTORY_COLLECTION, type WhereClause, type WhereOperator, type WhereOperatorName, WorkflowConfig, WorkflowTransition, availableWorkflowTransitions, canViewWorkflowDraft, createLifecycleEvent, createWorkflowDocument, defineArrayField, defineBlock, defineBlocksField, defineBooleanField, defineCollection, defineConfig, defineDateField, defineDateTimeField, defineEmailField, defineField, defineGlobal, defineIconField, defineImageField, defineJoinField, defineJsonField, defineMultiSelectField, defineNumberField, defineObjectField, defineRadioField, defineRelationshipField, defineRichTextField, defineRowField, defineSelectField, defineTextField, defineTextareaField, defineTimeField, defineUrlField, dispatchLifecycleEvent, dispatchPendingLifecycleEvents, executeFieldAfterRead, executeFieldBeforeChange, generateOpenApi, getAdminAuthCollection, getPublicAdminAuthConfig, initializeWorkflowDocument, materializeWorkflowDocument, normalizeConfig, parseMongoWhere, parseSort, parseSqlWhere, publishingWorkflow, resolveAdminAuthCollection, runCollectionHooks, saveWorkflowDraft, transitionWorkflow, workflowCapabilities };
package/dist/index.js CHANGED
@@ -216,6 +216,37 @@ function defineGlobal(config) {
216
216
  function defineConfig(config) {
217
217
  return config;
218
218
  }
219
+ function defineField(field) {
220
+ return field;
221
+ }
222
+ function defineBlock(block) {
223
+ return block;
224
+ }
225
+ function createFieldDefiner(type) {
226
+ return (field) => ({ ...field, type });
227
+ }
228
+ var defineTextField = createFieldDefiner("text");
229
+ var defineTextareaField = createFieldDefiner("textarea");
230
+ var defineRichTextField = createFieldDefiner("richText");
231
+ var defineNumberField = createFieldDefiner("number");
232
+ var defineBooleanField = createFieldDefiner("boolean");
233
+ var defineDateField = createFieldDefiner("date");
234
+ var defineDateTimeField = createFieldDefiner("datetime");
235
+ var defineTimeField = createFieldDefiner("time");
236
+ var defineSelectField = createFieldDefiner("select");
237
+ var defineMultiSelectField = createFieldDefiner("multiSelect");
238
+ var defineRadioField = createFieldDefiner("radio");
239
+ var defineRelationshipField = createFieldDefiner("relationship");
240
+ var defineArrayField = createFieldDefiner("array");
241
+ var defineObjectField = createFieldDefiner("object");
242
+ var defineJsonField = createFieldDefiner("json");
243
+ var defineBlocksField = createFieldDefiner("blocks");
244
+ var defineImageField = createFieldDefiner("image");
245
+ var defineEmailField = createFieldDefiner("email");
246
+ var defineUrlField = createFieldDefiner("url");
247
+ var defineIconField = createFieldDefiner("icon");
248
+ var defineJoinField = createFieldDefiner("join");
249
+ var defineRowField = createFieldDefiner("row");
219
250
  export {
220
251
  LIFECYCLE_EVENTS_COLLECTION,
221
252
  LIFECYCLE_EVENT_NAMES,
@@ -224,9 +255,33 @@ export {
224
255
  canViewWorkflowDraft,
225
256
  createLifecycleEvent,
226
257
  createWorkflowDocument,
258
+ defineArrayField,
259
+ defineBlock,
260
+ defineBlocksField,
261
+ defineBooleanField,
227
262
  defineCollection,
228
263
  defineConfig,
264
+ defineDateField,
265
+ defineDateTimeField,
266
+ defineEmailField,
267
+ defineField,
229
268
  defineGlobal,
269
+ defineIconField,
270
+ defineImageField,
271
+ defineJoinField,
272
+ defineJsonField,
273
+ defineMultiSelectField,
274
+ defineNumberField,
275
+ defineObjectField,
276
+ defineRadioField,
277
+ defineRelationshipField,
278
+ defineRichTextField,
279
+ defineRowField,
280
+ defineSelectField,
281
+ defineTextField,
282
+ defineTextareaField,
283
+ defineTimeField,
284
+ defineUrlField,
230
285
  dispatchLifecycleEvent,
231
286
  dispatchPendingLifecycleEvents,
232
287
  executeFieldAfterRead,