@dyrected/core 2.13.6 → 2.15.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/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- import { F as Field, B as Block, C as CollectionConfig, D as DyrectedConfig, A as AdminAuthConfig, P as PublicAdminAuthConfig, G as GlobalConfig, a as DeclarativeHookExpression, W as WorkflowConfig, b as AuthenticatedUser, c as WorkflowTransition, L as LifecycleEventName, d as LifecycleEvent, e as BaseDocument, H as HookRequestContext, f as DetailComputedOptions, g as ComputedHandler, h as DetailComputed, i as DetailCustomOptions, j as DetailCustom, k as DetailDividerOptions, l as DetailDivider, m as DisplayFieldOptions, n as DetailField, o as DetailItem, p as DetailGridOptions, q as DetailGrid, r as DetailRepeatOptions, s as DetailRepeat, t as DetailSectionOptions, u as DetailSection, v as DetailTabOptions, w as DetailTab, x as DetailTabsOptions, y as DetailTabs, z as DetailTextOptions, E as DetailText, I as DetailSchema, J as DyrectedContext, K as AIConfig, M as AIPIIConfig, N as ArrayField, O as FieldType, Q as BooleanField, R as AuthConfig, S as AccessPolicyResolver, T as DateField, U as DateTimeField, V as EmailField, X as IconField, Y as ImageField, Z as JoinField, _ as JsonField, $ as MultiSelectField, a0 as NumberField, a1 as ObjectField, a2 as RadioField, a3 as RelationshipField, a4 as RichTextField, a5 as RowField, a6 as SelectField, a7 as TextField, a8 as TextareaField, a9 as TimeField, aa as UrlField } from './app-phLVsEOM.cjs';
2
- export { ab as AIAction, ac as AIActionStatus, ad as AIActionType, ae as AIAuditActionType, af as AIAuditRecord, ag as AIChunk, ah as AIMessage, ai as AIPIIPattern, aj as AIRateLimitResult, ak as AIRateLimitStore, al as AIThread, am as AIToolContext, an as AIToolDefinition, ao as AI_ACTIONS_COLLECTION, ap as AI_AUDIT_COLLECTION, aq as AI_CHUNKS_COLLECTION, ar as AI_MESSAGES_COLLECTION, as as AI_THREADS_COLLECTION, at as AccessConfig, au as AccessFunction, av as AccessFunctionArgs, aw as AccessResult, ax as AccessRule, ay as ActionConfig, az as ActionConfigBase, aA as ActionConfigWithHandler, aB as ActionConfigWithMutation, aC as ActionContext, aD as ActionType, aE as AdminAuthAccessResolution, aF as AdminAuthClaimMapping, aG as AdminAuthMember, aH as AdminAuthProvider, aI as AdminAuthProviderMembersConfig, aJ as AdminAuthProvisioningMode, aK as AdminAuthResolveAccessArgs, aL as AdminAuthResolvedIdentity, aM as AdminConfig, aN as AdminDashboardComponentSlots, aO as AdminIconName, aP as AggregateArgs, aQ as AggregateCastType, aR as AggregateCollectionResult, aS as AggregateInput, aT as AggregateOperation, aU as AggregateResult, aV as BaseAdminAuthProvider, aW as BaseFieldAdmin, aX as BlockVariant, aY as BlocksField, aZ as BooleanFieldAdmin, a_ as BooleanFormat, a$ as CharacterLimitFieldAdmin, b0 as CharacterLimitFieldConfig, b1 as CollectionAfterChangeHook, b2 as CollectionAfterDeleteHook, b3 as CollectionAfterReadHook, b4 as CollectionAfterReadHookEntry, b5 as CollectionAfterTransitionHook, b6 as CollectionBeforeChangeHook, b7 as CollectionBeforeChangeHookEntry, b8 as CollectionBeforeDeleteHook, b9 as CollectionBeforeReadHook, ba as CollectionBeforeReadHookEntry, bb as CollectionBeforeTransitionHook, bc as CollectionListComponentSlots, bd as CollectionRAGConfig, be as CollectionSchemaResult, bf as CollectionSummaryResult, bg as CollectionViewComponentSlots, bh as CountOperation, bi as CustomAdminAuthProvider, bj as DatabaseAdapter, bk as DateFieldAdmin, bl as DateFormat, bm as DefaultValueContext, bn as DefineActionOptions, bo as DefineCalendarViewOptions, bp as DefineCardsViewOptions, bq as DefineGanttViewOptions, br as DefineKanbanViewOptions, bs as DefineTableViewOptions, bt as DefineViewBaseOptions, bu as DefineViewOptions, bv as DetailSpan, bw as DisplayTone, bx as DisplayVariant, by as DistinctCountOperation, bz as DistinctValuesOperation, bA as DynamicOptionItem, bB as DynamicOptionsConfig, bC as DynamicOptionsResolver, bD as DynamicOptionsResolverArgs, bE as DyrectedAIContext, bF as DyrectedLoggerConfig, bG as DyrectedObservabilityConfig, bH as EmailFieldAdmin, bI as FieldAdminHooks, bJ as FieldAdminOnChangeHook, bK as FieldAdminOnChangeHookArgs, bL as FieldAdminOptionsHook, bM as FieldAdminOptionsHookArgs, bN as FieldAdminOptionsHookResult, bO as FieldAfterReadHook, bP as FieldAfterReadHookArgs, bQ as FieldBase, bR as FieldBeforeChangeHook, bS as FieldBeforeChangeHookArgs, bT as FieldHook, bU as FieldHooks, bV as FileData, bW as GetDocumentResult, bX as GlobalAfterChangeHook, bY as GlobalAfterReadHook, bZ as GlobalAfterReadHookEntry, b_ as GlobalBeforeChangeHook, b$ as GlobalBeforeChangeHookEntry, c0 as GlobalBeforeReadHook, c1 as GlobalBeforeReadHookEntry, c2 as GlobalRAGConfig, c3 as GlobalSchemaResult, c4 as GlobalSummaryResult, c5 as HeadingLevel, c6 as HookFunction, c7 as IconFieldAdmin, c8 as ImageService, c9 as ImageTransformOptions, ca as InferAggregateResult, cb as JoinFieldAdmin, cc as JsonFieldAdmin, cd as JsonFormat, ce as LIFECYCLE_EVENT_NAMES, cf as LifecycleEventHandler, cg as LinkFormat, ch as MetricColor, ci as MultiSelectFieldAdmin, cj as NamedAccessPolicy, ck as NumberFieldAdmin, cl as NumberFormat, cm as NumberLimitFieldAdmin, cn as NumberLimitFieldConfig, co as NumericOperation, cp as OIDCAdminAuthProvider, cq as OptionFormat, cr as PaginatedResult, cs as PublicAdminAuthProvider, ct as QueryCollectionResult, cu as RAGSearchResult, cv as RadioFieldAdmin, cw as RateLimitConfig, cx as ReadonlyDatabaseAdapter, cy as RichTextFeature, cz as RichTextFieldConfig, cA as SelectFieldAdmin, cB as SqlWhereResult, cC as StorageAdapter, cD as TextFieldAdmin, cE as TextFormat, cF as TextareaFieldAdmin, cG as TrustProxyConfig, cH as TypedField, cI as UploadConfig, cJ as UrlFieldAdmin, cK as UrlLinkValue, cL as ViewActionFeatures, cM as ViewComponentSlots, cN as ViewConfig, cO as ViewLayout, cP as ViewMetric, cQ as ViewSubMetric, cR as WhereClause, cS as WhereOperator, cT as WhereOperatorName, cU as WordLimitFieldAdmin, cV as WordLimitFieldConfig, cW as WorkflowMetadata, cX as WorkflowRole, cY as WorkflowState, cZ as WorkflowTransitionContext, c_ as defineAction, c$ as defineCalendarView, d0 as defineCardsView, d1 as defineGanttView, d2 as defineKanbanView, d3 as defineTableView, d4 as defineView, d5 as isAICollection, d6 as parseMongoWhere, d7 as parseSqlWhere } from './app-phLVsEOM.cjs';
1
+ import { F as Field, B as Block, C as CollectionConfig, D as DyrectedConfig, A as AdminAuthConfig, P as PublicAdminAuthConfig, G as GlobalConfig, a as DeclarativeHookExpression, W as WorkflowConfig, b as AuthenticatedUser, c as WorkflowTransition, L as LifecycleEventName, d as LifecycleEvent, e as BaseDocument, H as HookRequestContext, f as DetailActionOptions, g as DetailAction, h as DetailComputedOptions, i as ComputedHandler, j as DetailComputed, k as DetailCustomOptions, l as DetailCustom, m as DetailDividerOptions, n as DetailDivider, o as DisplayFieldOptions, p as DetailField, q as DetailItem, r as DetailGridOptions, s as DetailGrid, t as DetailRepeatOptions, u as DetailRepeat, v as DetailSectionOptions, w as DetailSection, x as DetailTabOptions, y as DetailTab, z as DetailTabsOptions, E as DetailTabs, I as DetailTextOptions, J as DetailText, K as DetailSchema, M as DyrectedContext, N as AIConfig, O as AIPIIConfig, Q as ArrayField, R as FieldType, S as BooleanField, T as AuthConfig, U as AccessPolicyResolver, V as DateField, X as DateTimeField, Y as EmailField, Z as IconField, _ as ImageField, $ as JoinField, a0 as JsonField, a1 as MultiSelectField, a2 as NumberField, a3 as ObjectField, a4 as RadioField, a5 as RelationshipField, a6 as RichTextField, a7 as RowField, a8 as SelectField, a9 as TextField, aa as TextareaField, ab as TimeField, ac as UrlField } from './app-Cmp5lFLJ.cjs';
2
+ export { ad as AIAction, ae as AIActionStatus, af as AIActionType, ag as AIAuditActionType, ah as AIAuditRecord, ai as AIChunk, aj as AIMessage, ak as AIPIIPattern, al as AIRateLimitResult, am as AIRateLimitStore, an as AIThread, ao as AIToolContext, ap as AIToolDefinition, aq as AI_ACTIONS_COLLECTION, ar as AI_AUDIT_COLLECTION, as as AI_CHUNKS_COLLECTION, at as AI_MESSAGES_COLLECTION, au as AI_THREADS_COLLECTION, av as AccessConfig, aw as AccessFunction, ax as AccessFunctionArgs, ay as AccessResult, az as AccessRule, aA as ActionConfig, aB as ActionConfigBase, aC as ActionConfigWithHandler, aD as ActionConfigWithMutation, aE as ActionContext, aF as ActionType, aG as AdminAuthAccessResolution, aH as AdminAuthClaimMapping, aI as AdminAuthMember, aJ as AdminAuthProvider, aK as AdminAuthProviderMembersConfig, aL as AdminAuthProvisioningMode, aM as AdminAuthResolveAccessArgs, aN as AdminAuthResolvedIdentity, aO as AdminConfig, aP as AdminDashboardComponentSlots, aQ as AdminIconName, aR as AggregateArgs, aS as AggregateCastType, aT as AggregateCollectionResult, aU as AggregateInput, aV as AggregateOperation, aW as AggregateResult, aX as BaseAdminAuthProvider, aY as BaseFieldAdmin, aZ as BlockVariant, a_ as BlocksField, a$ as BooleanFieldAdmin, b0 as BooleanFormat, b1 as CharacterLimitFieldAdmin, b2 as CharacterLimitFieldConfig, b3 as CollectionAfterChangeHook, b4 as CollectionAfterDeleteHook, b5 as CollectionAfterReadHook, b6 as CollectionAfterReadHookEntry, b7 as CollectionAfterTransitionHook, b8 as CollectionBeforeChangeHook, b9 as CollectionBeforeChangeHookEntry, ba as CollectionBeforeDeleteHook, bb as CollectionBeforeReadHook, bc as CollectionBeforeReadHookEntry, bd as CollectionBeforeTransitionHook, be as CollectionListComponentSlots, bf as CollectionRAGConfig, bg as CollectionSchemaResult, bh as CollectionSummaryResult, bi as CollectionViewComponentSlots, bj as CountOperation, bk as CustomAdminAuthProvider, bl as DatabaseAdapter, bm as DateFieldAdmin, bn as DateFormat, bo as DefaultValueContext, bp as DefineActionOptions, bq as DefineCalendarViewOptions, br as DefineCardsViewOptions, bs as DefineGanttViewOptions, bt as DefineKanbanViewOptions, bu as DefineTableViewOptions, bv as DefineViewBaseOptions, bw as DefineViewOptions, bx as DetailSpan, by as DisplayTone, bz as DisplayVariant, bA as DistinctCountOperation, bB as DistinctValuesOperation, bC as DynamicOptionItem, bD as DynamicOptionsConfig, bE as DynamicOptionsResolver, bF as DynamicOptionsResolverArgs, bG as DyrectedAIContext, bH as DyrectedLoggerConfig, bI as DyrectedObservabilityConfig, bJ as EmailFieldAdmin, bK as FieldAdminHooks, bL as FieldAdminOnChangeHook, bM as FieldAdminOnChangeHookArgs, bN as FieldAdminOptionsHook, bO as FieldAdminOptionsHookArgs, bP as FieldAdminOptionsHookResult, bQ as FieldAfterReadHook, bR as FieldAfterReadHookArgs, bS as FieldBase, bT as FieldBeforeChangeHook, bU as FieldBeforeChangeHookArgs, bV as FieldHook, bW as FieldHooks, bX as FileData, bY as GetDocumentResult, bZ as GlobalAfterChangeHook, b_ as GlobalAfterReadHook, b$ as GlobalAfterReadHookEntry, c0 as GlobalBeforeChangeHook, c1 as GlobalBeforeChangeHookEntry, c2 as GlobalBeforeReadHook, c3 as GlobalBeforeReadHookEntry, c4 as GlobalRAGConfig, c5 as GlobalSchemaResult, c6 as GlobalSummaryResult, c7 as HeadingLevel, c8 as HookFunction, c9 as IconFieldAdmin, ca as ImageService, cb as ImageTransformOptions, cc as InferAggregateResult, cd as JoinFieldAdmin, ce as JsonFieldAdmin, cf as JsonFormat, cg as LIFECYCLE_EVENT_NAMES, ch as LifecycleEventHandler, ci as LinkFormat, cj as MetricColor, ck as MultiSelectFieldAdmin, cl as NamedAccessPolicy, cm as NumberFieldAdmin, cn as NumberFormat, co as NumberLimitFieldAdmin, cp as NumberLimitFieldConfig, cq as NumericOperation, cr as OIDCAdminAuthProvider, cs as OptionFormat, ct as PaginatedResult, cu as PublicAdminAuthProvider, cv as QueryCollectionResult, cw as RAGSearchResult, cx as RadioFieldAdmin, cy as RateLimitConfig, cz as ReadonlyDatabaseAdapter, cA as RichTextFeature, cB as RichTextFieldConfig, cC as SelectFieldAdmin, cD as SqlWhereResult, cE as StorageAdapter, cF as TextFieldAdmin, cG as TextFormat, cH as TextareaFieldAdmin, cI as TrustProxyConfig, cJ as TypedField, cK as UploadConfig, cL as UrlFieldAdmin, cM as UrlLinkValue, cN as ViewActionFeatures, cO as ViewComponentSlots, cP as ViewConfig, cQ as ViewLayout, cR as ViewMetric, cS as ViewSubMetric, cT as WhereClause, cU as WhereOperator, cV as WhereOperatorName, cW as WordLimitFieldAdmin, cX as WordLimitFieldConfig, cY as WorkflowMetadata, cZ as WorkflowRole, c_ as WorkflowState, c$ as WorkflowTransitionContext, d0 as defineAction, d1 as defineCalendarView, d2 as defineCardsView, d3 as defineGanttView, d4 as defineKanbanView, d5 as defineTableView, d6 as defineView, d7 as isAICollection, d8 as parseMongoWhere, d9 as parseSqlWhere } from './app-Cmp5lFLJ.cjs';
3
3
  import jexl from 'jexl';
4
4
  import { Context } from 'hono';
5
5
  export { z } from 'zod';
@@ -155,6 +155,48 @@ declare function getAdminRoleForCollection(collection?: CollectionConfig | null)
155
155
  */
156
156
  declare function isUserAdmin(user: any, collection?: CollectionConfig | null): boolean;
157
157
 
158
+ /**
159
+ * User-facing errors for self-hosted server code (action handlers, hooks).
160
+ *
161
+ * Throw these instead of hand-rolling `{ statusCode }` onto a plain `Error`.
162
+ * The action pipeline reads `statusCode` for the HTTP status (defaulting to
163
+ * `500` when absent) and `message` for the response body — which is what the
164
+ * SDK surfaces and the admin shows in its failure toast. Write the message
165
+ * for the editor who will read it.
166
+ *
167
+ * @example
168
+ * ```ts
169
+ * import { ValidationError } from "@dyrected/core";
170
+ *
171
+ * handler: async ({ input }) => {
172
+ * if (!input.refundReason) {
173
+ * throw new ValidationError("Enter a refund reason so support can follow up.");
174
+ * }
175
+ * return { status: "refunded" };
176
+ * }
177
+ * ```
178
+ */
179
+ declare class DyrectedError extends Error {
180
+ readonly statusCode: number;
181
+ constructor(message: string, statusCode?: number);
182
+ }
183
+ /** Bad input the editor can fix and retry. Answered with `400`. */
184
+ declare class ValidationError extends DyrectedError {
185
+ constructor(message: string);
186
+ }
187
+ /** The editor is not allowed to do this. Answered with `403`. */
188
+ declare class ForbiddenError extends DyrectedError {
189
+ constructor(message: string);
190
+ }
191
+ /** A referenced record does not exist. Answered with `404`. */
192
+ declare class NotFoundError extends DyrectedError {
193
+ constructor(message: string);
194
+ }
195
+ /** The current state conflicts with the requested change. Answered with `409`. */
196
+ declare class ConflictError extends DyrectedError {
197
+ constructor(message: string);
198
+ }
199
+
158
200
  type SortDirection = 'ASC' | 'DESC';
159
201
  interface SortClause {
160
202
  field: string;
@@ -725,6 +767,17 @@ declare function displayCustom<TDoc = any>(name: string, options?: DetailCustomO
725
767
  * Alias for `displayCustom` to render a custom component in a Detail View layout.
726
768
  */
727
769
  declare function displayCustomComponent<TDoc = any>(name: string, options?: DetailCustomOptions<TDoc>): DetailCustom<TDoc>;
770
+ /**
771
+ * Renders a button for a named action (defined in `collection.actions`) at this
772
+ * position in a Detail View — the same action, dialog, and execution as the
773
+ * header toolbar, just placed inline.
774
+ *
775
+ * @example
776
+ * ```ts
777
+ * displayAction('markShipped', { variant: 'default', span: 4 })
778
+ * ```
779
+ */
780
+ declare function displayAction(name: string, options?: DetailActionOptions): DetailAction;
728
781
  /**
729
782
  * Evaluates server-side computed functions and JEXL expressions from a detail schema
730
783
  * and attaches them to `doc._meta.computed`.
@@ -1763,4 +1816,4 @@ declare function defineTab<const T extends readonly Field[]>(args: {
1763
1816
  fields: T;
1764
1817
  }): T;
1765
1818
 
1766
- export { AIConfig, type AIErrorCode, AIPIIConfig, type AccessConditions, AccessPolicyResolver, AdminAuthConfig, ArrayField, AuthConfig, type AuthDocFields, AuthenticatedUser, BUILTIN_JEXL_HELPERS, BaseDocument, Block, BooleanField, CollectionConfig, ComputedHandler, type ConfigDiagnostic, ConfigValidationError, DateField, DateTimeField, type DeclarativeAccessSurface, type DeclarativeAccessValidationIssue, type DeclarativeAdminSurface, type DeclarativeAdminValidationIssue, DeclarativeHookExpression, type DeclarativeHookSurface, type DeclarativeHookValidationIssue, type DeclarativePreviewSurface, type DeclarativePreviewValidationIssue, DetailComputed, DetailComputedOptions, DetailCustom, DetailCustomOptions, DetailDivider, DetailDividerOptions, DetailField, DetailGrid, DetailGridOptions, DetailItem, DetailRepeat, DetailRepeatOptions, DetailSchema, DetailSection, DetailSectionOptions, DetailTab, DetailTabOptions, DetailTabs, DetailTabsOptions, DetailText, DetailTextOptions, DisplayFieldOptions, DyrectedAIError, DyrectedConfig, EmailField, type ExprFunction, type ExtractCollectionSlugs, Field, FieldConditionBuilder, FieldType, GlobalConfig, HookRequestContext, IconField, ImageField, type InferDocShape, JoinField, JsonField, LIFECYCLE_EVENTS_COLLECTION, LifecycleEvent, LifecycleEventName, MatchBuilder, MultiSelectField, NON_NEGOTIABLE_CREDENTIAL_FIELDS, NumberField, ObjectField, PII_REGEX_PATTERNS, type Prettify, PublicAdminAuthConfig, type PublishingWorkflowOptions, RadioField, RelationshipField, RichTextField, RowField, type SanitizeDocForAIOptions, SelectField, type SortClause, type SortDirection, type SqlSortDialect, type SystemDocFields, TextField, TextareaField, TimeField, type UploadDocFields, UrlField, WORKFLOW_HISTORY_COLLECTION, type WhenFunction, WorkflowConfig, WorkflowTransition, abs, addDays, asCollection, assertValidAdminConditionsInConfig, assertValidDeclarativeAccessInConfig, assertValidDeclarativeHookExpression, assertValidDeclarativeHookResult, assertValidDeclarativeHooksInConfig, assertValidPreviewUrlsInConfig, availableWorkflowTransitions, buildSqlOrderBy, canViewWorkflowDraft, capitalize, ceil, clamp, coalesce, collectAdminConditionValidationIssues, collectConfigDiagnostics, collectDeclarativeAccessValidationIssues, collectDeclarativeHookValidationIssues, collectPreviewUrlValidationIssues, compact, count, createLifecycleEvent, createWorkflowDocument, defaultValue, defineArrayField, defineBlock, defineBlocksField, defineBooleanField, defineCollection, defineConfig, defineDateField, defineDateTimeField, defineEmailField, defineField, defineGlobal, defineIconField, defineImageField, defineJoinField, defineJsonField, defineMultiSelectField, defineNumberField, defineObjectField, definePublishingWorkflow, defineRadioField, defineRelationshipField, defineRichTextField, defineRowField, defineSelectField, defineTab, defineTextField, defineTextareaField, defineTimeField, defineUrlField, diffDays, dispatchLifecycleEvent, dispatchPendingLifecycleEvents, displayComputed, displayCustom, displayCustomComponent, displayDivider, displayField, displayGrid, displayRepeat, displaySection, displayTab, displayTabs, displayText, endsWith, evaluateDetailComputed, evaluateJexl, evaluateJexlSync, executeFieldAfterRead, executeFieldBeforeChange, expr, first, floor, formatConfigDiagnostics, formatDate, formatJexlValue, generateDefaultDetailSchema, generateOpenApi, get, getAdminAuthCollection, getAdminRoleForCollection, getAllowedSitesForUser, getPublicAdminAuthConfig, includes, initializeWorkflowDocument, isConfigValidationError, isDetailItemVisible, isEmpty, isFuture, isPast, isSiteAuthorized, isUserAdmin, join, last, length, lower, maskEmail, maskPhone, maskTextPII, materializeWorkflowDocument, max, min, normalizeConfig, normalizeDetailItem, now, numericFieldNames, parseSort, pow, publishedStateName, publishingWorkflow, readingTime, registerJexlHelpers, replace, resolveAdminAuthCollection, resolveAuthorizedSiteId, round, runCollectionHooks, sanitizeDocForAI, saveWorkflowDraft, simplePublishingWorkflow, slugify, sqrt, startsWith, sum, today, transitionWorkflow, trim, truncate, unique, upper, validateAdminConditionExpression, validateDeclarativeAccessExpression, validateDeclarativeHookExpression, validatePreviewUrlExpression, when, wordCount, workflowCapabilities };
1819
+ export { AIConfig, type AIErrorCode, AIPIIConfig, type AccessConditions, AccessPolicyResolver, AdminAuthConfig, ArrayField, AuthConfig, type AuthDocFields, AuthenticatedUser, BUILTIN_JEXL_HELPERS, BaseDocument, Block, BooleanField, CollectionConfig, ComputedHandler, type ConfigDiagnostic, ConfigValidationError, ConflictError, DateField, DateTimeField, type DeclarativeAccessSurface, type DeclarativeAccessValidationIssue, type DeclarativeAdminSurface, type DeclarativeAdminValidationIssue, DeclarativeHookExpression, type DeclarativeHookSurface, type DeclarativeHookValidationIssue, type DeclarativePreviewSurface, type DeclarativePreviewValidationIssue, DetailAction, DetailActionOptions, DetailComputed, DetailComputedOptions, DetailCustom, DetailCustomOptions, DetailDivider, DetailDividerOptions, DetailField, DetailGrid, DetailGridOptions, DetailItem, DetailRepeat, DetailRepeatOptions, DetailSchema, DetailSection, DetailSectionOptions, DetailTab, DetailTabOptions, DetailTabs, DetailTabsOptions, DetailText, DetailTextOptions, DisplayFieldOptions, DyrectedAIError, DyrectedConfig, DyrectedError, EmailField, type ExprFunction, type ExtractCollectionSlugs, Field, FieldConditionBuilder, FieldType, ForbiddenError, GlobalConfig, HookRequestContext, IconField, ImageField, type InferDocShape, JoinField, JsonField, LIFECYCLE_EVENTS_COLLECTION, LifecycleEvent, LifecycleEventName, MatchBuilder, MultiSelectField, NON_NEGOTIABLE_CREDENTIAL_FIELDS, NotFoundError, NumberField, ObjectField, PII_REGEX_PATTERNS, type Prettify, PublicAdminAuthConfig, type PublishingWorkflowOptions, RadioField, RelationshipField, RichTextField, RowField, type SanitizeDocForAIOptions, SelectField, type SortClause, type SortDirection, type SqlSortDialect, type SystemDocFields, TextField, TextareaField, TimeField, type UploadDocFields, UrlField, ValidationError, WORKFLOW_HISTORY_COLLECTION, type WhenFunction, WorkflowConfig, WorkflowTransition, abs, addDays, asCollection, assertValidAdminConditionsInConfig, assertValidDeclarativeAccessInConfig, assertValidDeclarativeHookExpression, assertValidDeclarativeHookResult, assertValidDeclarativeHooksInConfig, assertValidPreviewUrlsInConfig, availableWorkflowTransitions, buildSqlOrderBy, canViewWorkflowDraft, capitalize, ceil, clamp, coalesce, collectAdminConditionValidationIssues, collectConfigDiagnostics, collectDeclarativeAccessValidationIssues, collectDeclarativeHookValidationIssues, collectPreviewUrlValidationIssues, compact, count, createLifecycleEvent, createWorkflowDocument, defaultValue, defineArrayField, defineBlock, defineBlocksField, defineBooleanField, defineCollection, defineConfig, defineDateField, defineDateTimeField, defineEmailField, defineField, defineGlobal, defineIconField, defineImageField, defineJoinField, defineJsonField, defineMultiSelectField, defineNumberField, defineObjectField, definePublishingWorkflow, defineRadioField, defineRelationshipField, defineRichTextField, defineRowField, defineSelectField, defineTab, defineTextField, defineTextareaField, defineTimeField, defineUrlField, diffDays, dispatchLifecycleEvent, dispatchPendingLifecycleEvents, displayAction, displayComputed, displayCustom, displayCustomComponent, displayDivider, displayField, displayGrid, displayRepeat, displaySection, displayTab, displayTabs, displayText, endsWith, evaluateDetailComputed, evaluateJexl, evaluateJexlSync, executeFieldAfterRead, executeFieldBeforeChange, expr, first, floor, formatConfigDiagnostics, formatDate, formatJexlValue, generateDefaultDetailSchema, generateOpenApi, get, getAdminAuthCollection, getAdminRoleForCollection, getAllowedSitesForUser, getPublicAdminAuthConfig, includes, initializeWorkflowDocument, isConfigValidationError, isDetailItemVisible, isEmpty, isFuture, isPast, isSiteAuthorized, isUserAdmin, join, last, length, lower, maskEmail, maskPhone, maskTextPII, materializeWorkflowDocument, max, min, normalizeConfig, normalizeDetailItem, now, numericFieldNames, parseSort, pow, publishedStateName, publishingWorkflow, readingTime, registerJexlHelpers, replace, resolveAdminAuthCollection, resolveAuthorizedSiteId, round, runCollectionHooks, sanitizeDocForAI, saveWorkflowDraft, simplePublishingWorkflow, slugify, sqrt, startsWith, sum, today, transitionWorkflow, trim, truncate, unique, upper, validateAdminConditionExpression, validateDeclarativeAccessExpression, validateDeclarativeHookExpression, validatePreviewUrlExpression, when, wordCount, workflowCapabilities };
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { F as Field, B as Block, C as CollectionConfig, D as DyrectedConfig, A as AdminAuthConfig, P as PublicAdminAuthConfig, G as GlobalConfig, a as DeclarativeHookExpression, W as WorkflowConfig, b as AuthenticatedUser, c as WorkflowTransition, L as LifecycleEventName, d as LifecycleEvent, e as BaseDocument, H as HookRequestContext, f as DetailComputedOptions, g as ComputedHandler, h as DetailComputed, i as DetailCustomOptions, j as DetailCustom, k as DetailDividerOptions, l as DetailDivider, m as DisplayFieldOptions, n as DetailField, o as DetailItem, p as DetailGridOptions, q as DetailGrid, r as DetailRepeatOptions, s as DetailRepeat, t as DetailSectionOptions, u as DetailSection, v as DetailTabOptions, w as DetailTab, x as DetailTabsOptions, y as DetailTabs, z as DetailTextOptions, E as DetailText, I as DetailSchema, J as DyrectedContext, K as AIConfig, M as AIPIIConfig, N as ArrayField, O as FieldType, Q as BooleanField, R as AuthConfig, S as AccessPolicyResolver, T as DateField, U as DateTimeField, V as EmailField, X as IconField, Y as ImageField, Z as JoinField, _ as JsonField, $ as MultiSelectField, a0 as NumberField, a1 as ObjectField, a2 as RadioField, a3 as RelationshipField, a4 as RichTextField, a5 as RowField, a6 as SelectField, a7 as TextField, a8 as TextareaField, a9 as TimeField, aa as UrlField } from './app-phLVsEOM.js';
2
- export { ab as AIAction, ac as AIActionStatus, ad as AIActionType, ae as AIAuditActionType, af as AIAuditRecord, ag as AIChunk, ah as AIMessage, ai as AIPIIPattern, aj as AIRateLimitResult, ak as AIRateLimitStore, al as AIThread, am as AIToolContext, an as AIToolDefinition, ao as AI_ACTIONS_COLLECTION, ap as AI_AUDIT_COLLECTION, aq as AI_CHUNKS_COLLECTION, ar as AI_MESSAGES_COLLECTION, as as AI_THREADS_COLLECTION, at as AccessConfig, au as AccessFunction, av as AccessFunctionArgs, aw as AccessResult, ax as AccessRule, ay as ActionConfig, az as ActionConfigBase, aA as ActionConfigWithHandler, aB as ActionConfigWithMutation, aC as ActionContext, aD as ActionType, aE as AdminAuthAccessResolution, aF as AdminAuthClaimMapping, aG as AdminAuthMember, aH as AdminAuthProvider, aI as AdminAuthProviderMembersConfig, aJ as AdminAuthProvisioningMode, aK as AdminAuthResolveAccessArgs, aL as AdminAuthResolvedIdentity, aM as AdminConfig, aN as AdminDashboardComponentSlots, aO as AdminIconName, aP as AggregateArgs, aQ as AggregateCastType, aR as AggregateCollectionResult, aS as AggregateInput, aT as AggregateOperation, aU as AggregateResult, aV as BaseAdminAuthProvider, aW as BaseFieldAdmin, aX as BlockVariant, aY as BlocksField, aZ as BooleanFieldAdmin, a_ as BooleanFormat, a$ as CharacterLimitFieldAdmin, b0 as CharacterLimitFieldConfig, b1 as CollectionAfterChangeHook, b2 as CollectionAfterDeleteHook, b3 as CollectionAfterReadHook, b4 as CollectionAfterReadHookEntry, b5 as CollectionAfterTransitionHook, b6 as CollectionBeforeChangeHook, b7 as CollectionBeforeChangeHookEntry, b8 as CollectionBeforeDeleteHook, b9 as CollectionBeforeReadHook, ba as CollectionBeforeReadHookEntry, bb as CollectionBeforeTransitionHook, bc as CollectionListComponentSlots, bd as CollectionRAGConfig, be as CollectionSchemaResult, bf as CollectionSummaryResult, bg as CollectionViewComponentSlots, bh as CountOperation, bi as CustomAdminAuthProvider, bj as DatabaseAdapter, bk as DateFieldAdmin, bl as DateFormat, bm as DefaultValueContext, bn as DefineActionOptions, bo as DefineCalendarViewOptions, bp as DefineCardsViewOptions, bq as DefineGanttViewOptions, br as DefineKanbanViewOptions, bs as DefineTableViewOptions, bt as DefineViewBaseOptions, bu as DefineViewOptions, bv as DetailSpan, bw as DisplayTone, bx as DisplayVariant, by as DistinctCountOperation, bz as DistinctValuesOperation, bA as DynamicOptionItem, bB as DynamicOptionsConfig, bC as DynamicOptionsResolver, bD as DynamicOptionsResolverArgs, bE as DyrectedAIContext, bF as DyrectedLoggerConfig, bG as DyrectedObservabilityConfig, bH as EmailFieldAdmin, bI as FieldAdminHooks, bJ as FieldAdminOnChangeHook, bK as FieldAdminOnChangeHookArgs, bL as FieldAdminOptionsHook, bM as FieldAdminOptionsHookArgs, bN as FieldAdminOptionsHookResult, bO as FieldAfterReadHook, bP as FieldAfterReadHookArgs, bQ as FieldBase, bR as FieldBeforeChangeHook, bS as FieldBeforeChangeHookArgs, bT as FieldHook, bU as FieldHooks, bV as FileData, bW as GetDocumentResult, bX as GlobalAfterChangeHook, bY as GlobalAfterReadHook, bZ as GlobalAfterReadHookEntry, b_ as GlobalBeforeChangeHook, b$ as GlobalBeforeChangeHookEntry, c0 as GlobalBeforeReadHook, c1 as GlobalBeforeReadHookEntry, c2 as GlobalRAGConfig, c3 as GlobalSchemaResult, c4 as GlobalSummaryResult, c5 as HeadingLevel, c6 as HookFunction, c7 as IconFieldAdmin, c8 as ImageService, c9 as ImageTransformOptions, ca as InferAggregateResult, cb as JoinFieldAdmin, cc as JsonFieldAdmin, cd as JsonFormat, ce as LIFECYCLE_EVENT_NAMES, cf as LifecycleEventHandler, cg as LinkFormat, ch as MetricColor, ci as MultiSelectFieldAdmin, cj as NamedAccessPolicy, ck as NumberFieldAdmin, cl as NumberFormat, cm as NumberLimitFieldAdmin, cn as NumberLimitFieldConfig, co as NumericOperation, cp as OIDCAdminAuthProvider, cq as OptionFormat, cr as PaginatedResult, cs as PublicAdminAuthProvider, ct as QueryCollectionResult, cu as RAGSearchResult, cv as RadioFieldAdmin, cw as RateLimitConfig, cx as ReadonlyDatabaseAdapter, cy as RichTextFeature, cz as RichTextFieldConfig, cA as SelectFieldAdmin, cB as SqlWhereResult, cC as StorageAdapter, cD as TextFieldAdmin, cE as TextFormat, cF as TextareaFieldAdmin, cG as TrustProxyConfig, cH as TypedField, cI as UploadConfig, cJ as UrlFieldAdmin, cK as UrlLinkValue, cL as ViewActionFeatures, cM as ViewComponentSlots, cN as ViewConfig, cO as ViewLayout, cP as ViewMetric, cQ as ViewSubMetric, cR as WhereClause, cS as WhereOperator, cT as WhereOperatorName, cU as WordLimitFieldAdmin, cV as WordLimitFieldConfig, cW as WorkflowMetadata, cX as WorkflowRole, cY as WorkflowState, cZ as WorkflowTransitionContext, c_ as defineAction, c$ as defineCalendarView, d0 as defineCardsView, d1 as defineGanttView, d2 as defineKanbanView, d3 as defineTableView, d4 as defineView, d5 as isAICollection, d6 as parseMongoWhere, d7 as parseSqlWhere } from './app-phLVsEOM.js';
1
+ import { F as Field, B as Block, C as CollectionConfig, D as DyrectedConfig, A as AdminAuthConfig, P as PublicAdminAuthConfig, G as GlobalConfig, a as DeclarativeHookExpression, W as WorkflowConfig, b as AuthenticatedUser, c as WorkflowTransition, L as LifecycleEventName, d as LifecycleEvent, e as BaseDocument, H as HookRequestContext, f as DetailActionOptions, g as DetailAction, h as DetailComputedOptions, i as ComputedHandler, j as DetailComputed, k as DetailCustomOptions, l as DetailCustom, m as DetailDividerOptions, n as DetailDivider, o as DisplayFieldOptions, p as DetailField, q as DetailItem, r as DetailGridOptions, s as DetailGrid, t as DetailRepeatOptions, u as DetailRepeat, v as DetailSectionOptions, w as DetailSection, x as DetailTabOptions, y as DetailTab, z as DetailTabsOptions, E as DetailTabs, I as DetailTextOptions, J as DetailText, K as DetailSchema, M as DyrectedContext, N as AIConfig, O as AIPIIConfig, Q as ArrayField, R as FieldType, S as BooleanField, T as AuthConfig, U as AccessPolicyResolver, V as DateField, X as DateTimeField, Y as EmailField, Z as IconField, _ as ImageField, $ as JoinField, a0 as JsonField, a1 as MultiSelectField, a2 as NumberField, a3 as ObjectField, a4 as RadioField, a5 as RelationshipField, a6 as RichTextField, a7 as RowField, a8 as SelectField, a9 as TextField, aa as TextareaField, ab as TimeField, ac as UrlField } from './app-Cmp5lFLJ.js';
2
+ export { ad as AIAction, ae as AIActionStatus, af as AIActionType, ag as AIAuditActionType, ah as AIAuditRecord, ai as AIChunk, aj as AIMessage, ak as AIPIIPattern, al as AIRateLimitResult, am as AIRateLimitStore, an as AIThread, ao as AIToolContext, ap as AIToolDefinition, aq as AI_ACTIONS_COLLECTION, ar as AI_AUDIT_COLLECTION, as as AI_CHUNKS_COLLECTION, at as AI_MESSAGES_COLLECTION, au as AI_THREADS_COLLECTION, av as AccessConfig, aw as AccessFunction, ax as AccessFunctionArgs, ay as AccessResult, az as AccessRule, aA as ActionConfig, aB as ActionConfigBase, aC as ActionConfigWithHandler, aD as ActionConfigWithMutation, aE as ActionContext, aF as ActionType, aG as AdminAuthAccessResolution, aH as AdminAuthClaimMapping, aI as AdminAuthMember, aJ as AdminAuthProvider, aK as AdminAuthProviderMembersConfig, aL as AdminAuthProvisioningMode, aM as AdminAuthResolveAccessArgs, aN as AdminAuthResolvedIdentity, aO as AdminConfig, aP as AdminDashboardComponentSlots, aQ as AdminIconName, aR as AggregateArgs, aS as AggregateCastType, aT as AggregateCollectionResult, aU as AggregateInput, aV as AggregateOperation, aW as AggregateResult, aX as BaseAdminAuthProvider, aY as BaseFieldAdmin, aZ as BlockVariant, a_ as BlocksField, a$ as BooleanFieldAdmin, b0 as BooleanFormat, b1 as CharacterLimitFieldAdmin, b2 as CharacterLimitFieldConfig, b3 as CollectionAfterChangeHook, b4 as CollectionAfterDeleteHook, b5 as CollectionAfterReadHook, b6 as CollectionAfterReadHookEntry, b7 as CollectionAfterTransitionHook, b8 as CollectionBeforeChangeHook, b9 as CollectionBeforeChangeHookEntry, ba as CollectionBeforeDeleteHook, bb as CollectionBeforeReadHook, bc as CollectionBeforeReadHookEntry, bd as CollectionBeforeTransitionHook, be as CollectionListComponentSlots, bf as CollectionRAGConfig, bg as CollectionSchemaResult, bh as CollectionSummaryResult, bi as CollectionViewComponentSlots, bj as CountOperation, bk as CustomAdminAuthProvider, bl as DatabaseAdapter, bm as DateFieldAdmin, bn as DateFormat, bo as DefaultValueContext, bp as DefineActionOptions, bq as DefineCalendarViewOptions, br as DefineCardsViewOptions, bs as DefineGanttViewOptions, bt as DefineKanbanViewOptions, bu as DefineTableViewOptions, bv as DefineViewBaseOptions, bw as DefineViewOptions, bx as DetailSpan, by as DisplayTone, bz as DisplayVariant, bA as DistinctCountOperation, bB as DistinctValuesOperation, bC as DynamicOptionItem, bD as DynamicOptionsConfig, bE as DynamicOptionsResolver, bF as DynamicOptionsResolverArgs, bG as DyrectedAIContext, bH as DyrectedLoggerConfig, bI as DyrectedObservabilityConfig, bJ as EmailFieldAdmin, bK as FieldAdminHooks, bL as FieldAdminOnChangeHook, bM as FieldAdminOnChangeHookArgs, bN as FieldAdminOptionsHook, bO as FieldAdminOptionsHookArgs, bP as FieldAdminOptionsHookResult, bQ as FieldAfterReadHook, bR as FieldAfterReadHookArgs, bS as FieldBase, bT as FieldBeforeChangeHook, bU as FieldBeforeChangeHookArgs, bV as FieldHook, bW as FieldHooks, bX as FileData, bY as GetDocumentResult, bZ as GlobalAfterChangeHook, b_ as GlobalAfterReadHook, b$ as GlobalAfterReadHookEntry, c0 as GlobalBeforeChangeHook, c1 as GlobalBeforeChangeHookEntry, c2 as GlobalBeforeReadHook, c3 as GlobalBeforeReadHookEntry, c4 as GlobalRAGConfig, c5 as GlobalSchemaResult, c6 as GlobalSummaryResult, c7 as HeadingLevel, c8 as HookFunction, c9 as IconFieldAdmin, ca as ImageService, cb as ImageTransformOptions, cc as InferAggregateResult, cd as JoinFieldAdmin, ce as JsonFieldAdmin, cf as JsonFormat, cg as LIFECYCLE_EVENT_NAMES, ch as LifecycleEventHandler, ci as LinkFormat, cj as MetricColor, ck as MultiSelectFieldAdmin, cl as NamedAccessPolicy, cm as NumberFieldAdmin, cn as NumberFormat, co as NumberLimitFieldAdmin, cp as NumberLimitFieldConfig, cq as NumericOperation, cr as OIDCAdminAuthProvider, cs as OptionFormat, ct as PaginatedResult, cu as PublicAdminAuthProvider, cv as QueryCollectionResult, cw as RAGSearchResult, cx as RadioFieldAdmin, cy as RateLimitConfig, cz as ReadonlyDatabaseAdapter, cA as RichTextFeature, cB as RichTextFieldConfig, cC as SelectFieldAdmin, cD as SqlWhereResult, cE as StorageAdapter, cF as TextFieldAdmin, cG as TextFormat, cH as TextareaFieldAdmin, cI as TrustProxyConfig, cJ as TypedField, cK as UploadConfig, cL as UrlFieldAdmin, cM as UrlLinkValue, cN as ViewActionFeatures, cO as ViewComponentSlots, cP as ViewConfig, cQ as ViewLayout, cR as ViewMetric, cS as ViewSubMetric, cT as WhereClause, cU as WhereOperator, cV as WhereOperatorName, cW as WordLimitFieldAdmin, cX as WordLimitFieldConfig, cY as WorkflowMetadata, cZ as WorkflowRole, c_ as WorkflowState, c$ as WorkflowTransitionContext, d0 as defineAction, d1 as defineCalendarView, d2 as defineCardsView, d3 as defineGanttView, d4 as defineKanbanView, d5 as defineTableView, d6 as defineView, d7 as isAICollection, d8 as parseMongoWhere, d9 as parseSqlWhere } from './app-Cmp5lFLJ.js';
3
3
  import jexl from 'jexl';
4
4
  import { Context } from 'hono';
5
5
  export { z } from 'zod';
@@ -155,6 +155,48 @@ declare function getAdminRoleForCollection(collection?: CollectionConfig | null)
155
155
  */
156
156
  declare function isUserAdmin(user: any, collection?: CollectionConfig | null): boolean;
157
157
 
158
+ /**
159
+ * User-facing errors for self-hosted server code (action handlers, hooks).
160
+ *
161
+ * Throw these instead of hand-rolling `{ statusCode }` onto a plain `Error`.
162
+ * The action pipeline reads `statusCode` for the HTTP status (defaulting to
163
+ * `500` when absent) and `message` for the response body — which is what the
164
+ * SDK surfaces and the admin shows in its failure toast. Write the message
165
+ * for the editor who will read it.
166
+ *
167
+ * @example
168
+ * ```ts
169
+ * import { ValidationError } from "@dyrected/core";
170
+ *
171
+ * handler: async ({ input }) => {
172
+ * if (!input.refundReason) {
173
+ * throw new ValidationError("Enter a refund reason so support can follow up.");
174
+ * }
175
+ * return { status: "refunded" };
176
+ * }
177
+ * ```
178
+ */
179
+ declare class DyrectedError extends Error {
180
+ readonly statusCode: number;
181
+ constructor(message: string, statusCode?: number);
182
+ }
183
+ /** Bad input the editor can fix and retry. Answered with `400`. */
184
+ declare class ValidationError extends DyrectedError {
185
+ constructor(message: string);
186
+ }
187
+ /** The editor is not allowed to do this. Answered with `403`. */
188
+ declare class ForbiddenError extends DyrectedError {
189
+ constructor(message: string);
190
+ }
191
+ /** A referenced record does not exist. Answered with `404`. */
192
+ declare class NotFoundError extends DyrectedError {
193
+ constructor(message: string);
194
+ }
195
+ /** The current state conflicts with the requested change. Answered with `409`. */
196
+ declare class ConflictError extends DyrectedError {
197
+ constructor(message: string);
198
+ }
199
+
158
200
  type SortDirection = 'ASC' | 'DESC';
159
201
  interface SortClause {
160
202
  field: string;
@@ -725,6 +767,17 @@ declare function displayCustom<TDoc = any>(name: string, options?: DetailCustomO
725
767
  * Alias for `displayCustom` to render a custom component in a Detail View layout.
726
768
  */
727
769
  declare function displayCustomComponent<TDoc = any>(name: string, options?: DetailCustomOptions<TDoc>): DetailCustom<TDoc>;
770
+ /**
771
+ * Renders a button for a named action (defined in `collection.actions`) at this
772
+ * position in a Detail View — the same action, dialog, and execution as the
773
+ * header toolbar, just placed inline.
774
+ *
775
+ * @example
776
+ * ```ts
777
+ * displayAction('markShipped', { variant: 'default', span: 4 })
778
+ * ```
779
+ */
780
+ declare function displayAction(name: string, options?: DetailActionOptions): DetailAction;
728
781
  /**
729
782
  * Evaluates server-side computed functions and JEXL expressions from a detail schema
730
783
  * and attaches them to `doc._meta.computed`.
@@ -1763,4 +1816,4 @@ declare function defineTab<const T extends readonly Field[]>(args: {
1763
1816
  fields: T;
1764
1817
  }): T;
1765
1818
 
1766
- export { AIConfig, type AIErrorCode, AIPIIConfig, type AccessConditions, AccessPolicyResolver, AdminAuthConfig, ArrayField, AuthConfig, type AuthDocFields, AuthenticatedUser, BUILTIN_JEXL_HELPERS, BaseDocument, Block, BooleanField, CollectionConfig, ComputedHandler, type ConfigDiagnostic, ConfigValidationError, DateField, DateTimeField, type DeclarativeAccessSurface, type DeclarativeAccessValidationIssue, type DeclarativeAdminSurface, type DeclarativeAdminValidationIssue, DeclarativeHookExpression, type DeclarativeHookSurface, type DeclarativeHookValidationIssue, type DeclarativePreviewSurface, type DeclarativePreviewValidationIssue, DetailComputed, DetailComputedOptions, DetailCustom, DetailCustomOptions, DetailDivider, DetailDividerOptions, DetailField, DetailGrid, DetailGridOptions, DetailItem, DetailRepeat, DetailRepeatOptions, DetailSchema, DetailSection, DetailSectionOptions, DetailTab, DetailTabOptions, DetailTabs, DetailTabsOptions, DetailText, DetailTextOptions, DisplayFieldOptions, DyrectedAIError, DyrectedConfig, EmailField, type ExprFunction, type ExtractCollectionSlugs, Field, FieldConditionBuilder, FieldType, GlobalConfig, HookRequestContext, IconField, ImageField, type InferDocShape, JoinField, JsonField, LIFECYCLE_EVENTS_COLLECTION, LifecycleEvent, LifecycleEventName, MatchBuilder, MultiSelectField, NON_NEGOTIABLE_CREDENTIAL_FIELDS, NumberField, ObjectField, PII_REGEX_PATTERNS, type Prettify, PublicAdminAuthConfig, type PublishingWorkflowOptions, RadioField, RelationshipField, RichTextField, RowField, type SanitizeDocForAIOptions, SelectField, type SortClause, type SortDirection, type SqlSortDialect, type SystemDocFields, TextField, TextareaField, TimeField, type UploadDocFields, UrlField, WORKFLOW_HISTORY_COLLECTION, type WhenFunction, WorkflowConfig, WorkflowTransition, abs, addDays, asCollection, assertValidAdminConditionsInConfig, assertValidDeclarativeAccessInConfig, assertValidDeclarativeHookExpression, assertValidDeclarativeHookResult, assertValidDeclarativeHooksInConfig, assertValidPreviewUrlsInConfig, availableWorkflowTransitions, buildSqlOrderBy, canViewWorkflowDraft, capitalize, ceil, clamp, coalesce, collectAdminConditionValidationIssues, collectConfigDiagnostics, collectDeclarativeAccessValidationIssues, collectDeclarativeHookValidationIssues, collectPreviewUrlValidationIssues, compact, count, createLifecycleEvent, createWorkflowDocument, defaultValue, defineArrayField, defineBlock, defineBlocksField, defineBooleanField, defineCollection, defineConfig, defineDateField, defineDateTimeField, defineEmailField, defineField, defineGlobal, defineIconField, defineImageField, defineJoinField, defineJsonField, defineMultiSelectField, defineNumberField, defineObjectField, definePublishingWorkflow, defineRadioField, defineRelationshipField, defineRichTextField, defineRowField, defineSelectField, defineTab, defineTextField, defineTextareaField, defineTimeField, defineUrlField, diffDays, dispatchLifecycleEvent, dispatchPendingLifecycleEvents, displayComputed, displayCustom, displayCustomComponent, displayDivider, displayField, displayGrid, displayRepeat, displaySection, displayTab, displayTabs, displayText, endsWith, evaluateDetailComputed, evaluateJexl, evaluateJexlSync, executeFieldAfterRead, executeFieldBeforeChange, expr, first, floor, formatConfigDiagnostics, formatDate, formatJexlValue, generateDefaultDetailSchema, generateOpenApi, get, getAdminAuthCollection, getAdminRoleForCollection, getAllowedSitesForUser, getPublicAdminAuthConfig, includes, initializeWorkflowDocument, isConfigValidationError, isDetailItemVisible, isEmpty, isFuture, isPast, isSiteAuthorized, isUserAdmin, join, last, length, lower, maskEmail, maskPhone, maskTextPII, materializeWorkflowDocument, max, min, normalizeConfig, normalizeDetailItem, now, numericFieldNames, parseSort, pow, publishedStateName, publishingWorkflow, readingTime, registerJexlHelpers, replace, resolveAdminAuthCollection, resolveAuthorizedSiteId, round, runCollectionHooks, sanitizeDocForAI, saveWorkflowDraft, simplePublishingWorkflow, slugify, sqrt, startsWith, sum, today, transitionWorkflow, trim, truncate, unique, upper, validateAdminConditionExpression, validateDeclarativeAccessExpression, validateDeclarativeHookExpression, validatePreviewUrlExpression, when, wordCount, workflowCapabilities };
1819
+ export { AIConfig, type AIErrorCode, AIPIIConfig, type AccessConditions, AccessPolicyResolver, AdminAuthConfig, ArrayField, AuthConfig, type AuthDocFields, AuthenticatedUser, BUILTIN_JEXL_HELPERS, BaseDocument, Block, BooleanField, CollectionConfig, ComputedHandler, type ConfigDiagnostic, ConfigValidationError, ConflictError, DateField, DateTimeField, type DeclarativeAccessSurface, type DeclarativeAccessValidationIssue, type DeclarativeAdminSurface, type DeclarativeAdminValidationIssue, DeclarativeHookExpression, type DeclarativeHookSurface, type DeclarativeHookValidationIssue, type DeclarativePreviewSurface, type DeclarativePreviewValidationIssue, DetailAction, DetailActionOptions, DetailComputed, DetailComputedOptions, DetailCustom, DetailCustomOptions, DetailDivider, DetailDividerOptions, DetailField, DetailGrid, DetailGridOptions, DetailItem, DetailRepeat, DetailRepeatOptions, DetailSchema, DetailSection, DetailSectionOptions, DetailTab, DetailTabOptions, DetailTabs, DetailTabsOptions, DetailText, DetailTextOptions, DisplayFieldOptions, DyrectedAIError, DyrectedConfig, DyrectedError, EmailField, type ExprFunction, type ExtractCollectionSlugs, Field, FieldConditionBuilder, FieldType, ForbiddenError, GlobalConfig, HookRequestContext, IconField, ImageField, type InferDocShape, JoinField, JsonField, LIFECYCLE_EVENTS_COLLECTION, LifecycleEvent, LifecycleEventName, MatchBuilder, MultiSelectField, NON_NEGOTIABLE_CREDENTIAL_FIELDS, NotFoundError, NumberField, ObjectField, PII_REGEX_PATTERNS, type Prettify, PublicAdminAuthConfig, type PublishingWorkflowOptions, RadioField, RelationshipField, RichTextField, RowField, type SanitizeDocForAIOptions, SelectField, type SortClause, type SortDirection, type SqlSortDialect, type SystemDocFields, TextField, TextareaField, TimeField, type UploadDocFields, UrlField, ValidationError, WORKFLOW_HISTORY_COLLECTION, type WhenFunction, WorkflowConfig, WorkflowTransition, abs, addDays, asCollection, assertValidAdminConditionsInConfig, assertValidDeclarativeAccessInConfig, assertValidDeclarativeHookExpression, assertValidDeclarativeHookResult, assertValidDeclarativeHooksInConfig, assertValidPreviewUrlsInConfig, availableWorkflowTransitions, buildSqlOrderBy, canViewWorkflowDraft, capitalize, ceil, clamp, coalesce, collectAdminConditionValidationIssues, collectConfigDiagnostics, collectDeclarativeAccessValidationIssues, collectDeclarativeHookValidationIssues, collectPreviewUrlValidationIssues, compact, count, createLifecycleEvent, createWorkflowDocument, defaultValue, defineArrayField, defineBlock, defineBlocksField, defineBooleanField, defineCollection, defineConfig, defineDateField, defineDateTimeField, defineEmailField, defineField, defineGlobal, defineIconField, defineImageField, defineJoinField, defineJsonField, defineMultiSelectField, defineNumberField, defineObjectField, definePublishingWorkflow, defineRadioField, defineRelationshipField, defineRichTextField, defineRowField, defineSelectField, defineTab, defineTextField, defineTextareaField, defineTimeField, defineUrlField, diffDays, dispatchLifecycleEvent, dispatchPendingLifecycleEvents, displayAction, displayComputed, displayCustom, displayCustomComponent, displayDivider, displayField, displayGrid, displayRepeat, displaySection, displayTab, displayTabs, displayText, endsWith, evaluateDetailComputed, evaluateJexl, evaluateJexlSync, executeFieldAfterRead, executeFieldBeforeChange, expr, first, floor, formatConfigDiagnostics, formatDate, formatJexlValue, generateDefaultDetailSchema, generateOpenApi, get, getAdminAuthCollection, getAdminRoleForCollection, getAllowedSitesForUser, getPublicAdminAuthConfig, includes, initializeWorkflowDocument, isConfigValidationError, isDetailItemVisible, isEmpty, isFuture, isPast, isSiteAuthorized, isUserAdmin, join, last, length, lower, maskEmail, maskPhone, maskTextPII, materializeWorkflowDocument, max, min, normalizeConfig, normalizeDetailItem, now, numericFieldNames, parseSort, pow, publishedStateName, publishingWorkflow, readingTime, registerJexlHelpers, replace, resolveAdminAuthCollection, resolveAuthorizedSiteId, round, runCollectionHooks, sanitizeDocForAI, saveWorkflowDraft, simplePublishingWorkflow, slugify, sqrt, startsWith, sum, today, transitionWorkflow, trim, truncate, unique, upper, validateAdminConditionExpression, validateDeclarativeAccessExpression, validateDeclarativeHookExpression, validatePreviewUrlExpression, when, wordCount, workflowCapabilities };
package/dist/index.js CHANGED
@@ -3710,6 +3710,45 @@ function normalizeConfig(config) {
3710
3710
  };
3711
3711
  }
3712
3712
 
3713
+ // src/utils/errors.ts
3714
+ var DyrectedError = class _DyrectedError extends Error {
3715
+ statusCode;
3716
+ constructor(message, statusCode = 500) {
3717
+ super(message);
3718
+ this.name = "DyrectedError";
3719
+ this.statusCode = statusCode;
3720
+ Object.setPrototypeOf(this, _DyrectedError.prototype);
3721
+ }
3722
+ };
3723
+ var ValidationError = class _ValidationError extends DyrectedError {
3724
+ constructor(message) {
3725
+ super(message, 400);
3726
+ this.name = "ValidationError";
3727
+ Object.setPrototypeOf(this, _ValidationError.prototype);
3728
+ }
3729
+ };
3730
+ var ForbiddenError = class _ForbiddenError extends DyrectedError {
3731
+ constructor(message) {
3732
+ super(message, 403);
3733
+ this.name = "ForbiddenError";
3734
+ Object.setPrototypeOf(this, _ForbiddenError.prototype);
3735
+ }
3736
+ };
3737
+ var NotFoundError = class _NotFoundError extends DyrectedError {
3738
+ constructor(message) {
3739
+ super(message, 404);
3740
+ this.name = "NotFoundError";
3741
+ Object.setPrototypeOf(this, _NotFoundError.prototype);
3742
+ }
3743
+ };
3744
+ var ConflictError = class _ConflictError extends DyrectedError {
3745
+ constructor(message) {
3746
+ super(message, 409);
3747
+ this.name = "ConflictError";
3748
+ Object.setPrototypeOf(this, _ConflictError.prototype);
3749
+ }
3750
+ };
3751
+
3713
3752
  // src/utils/parse-where.ts
3714
3753
  function assertNever(op, context) {
3715
3754
  throw new Error(`[dyrected/core] Unhandled where operator "${op}" in ${context}`);
@@ -5569,6 +5608,13 @@ function displayCustom(name, options) {
5569
5608
  function displayCustomComponent(name, options) {
5570
5609
  return displayCustom(name, options);
5571
5610
  }
5611
+ function displayAction(name, options) {
5612
+ return {
5613
+ type: "action",
5614
+ name,
5615
+ options
5616
+ };
5617
+ }
5572
5618
  async function evaluateDetailComputed(detail, doc, user, db) {
5573
5619
  if (!doc || !detail || !Array.isArray(detail)) {
5574
5620
  return doc;
@@ -5641,6 +5687,12 @@ function generateDefaultDetailSchema(schema) {
5641
5687
  if (SENSITIVE_DETAIL_FIELDS.has(field.name)) continue;
5642
5688
  if (field.hidden) continue;
5643
5689
  if (field.admin?.hidden) continue;
5690
+ if (field.type === "join") {
5691
+ const joinColumns = field.admin?.columns;
5692
+ const repeatItems = Array.isArray(joinColumns) && joinColumns.length > 0 ? joinColumns.map((col) => displayField(col, { span: 12 })) : [displayComputed("Item", "doc.title || doc.name || doc.label || doc.slug || doc.id")];
5693
+ mainFields.push(displayRepeat(field.name, repeatItems, { span: 12, layout: "table" }));
5694
+ continue;
5695
+ }
5644
5696
  const isSidebar = sidebarFieldTypes.has(field.type) && field.type !== "relationship" && !field.hasMany;
5645
5697
  if (isSidebar && sidebarFields.length < 5) {
5646
5698
  sidebarFields.push(
@@ -6382,13 +6434,18 @@ export {
6382
6434
  AI_THREADS_COLLECTION,
6383
6435
  BUILTIN_JEXL_HELPERS,
6384
6436
  ConfigValidationError,
6437
+ ConflictError,
6385
6438
  DyrectedAIError,
6439
+ DyrectedError,
6386
6440
  FieldConditionBuilder,
6441
+ ForbiddenError,
6387
6442
  LIFECYCLE_EVENTS_COLLECTION,
6388
6443
  LIFECYCLE_EVENT_NAMES,
6389
6444
  MatchBuilder,
6390
6445
  NON_NEGOTIABLE_CREDENTIAL_FIELDS,
6446
+ NotFoundError,
6391
6447
  PII_REGEX_PATTERNS,
6448
+ ValidationError,
6392
6449
  WORKFLOW_HISTORY_COLLECTION,
6393
6450
  abs,
6394
6451
  addDays,
@@ -6455,6 +6512,7 @@ export {
6455
6512
  diffDays,
6456
6513
  dispatchLifecycleEvent,
6457
6514
  dispatchPendingLifecycleEvents,
6515
+ displayAction,
6458
6516
  displayComputed,
6459
6517
  displayCustom,
6460
6518
  displayCustomComponent,