/** * This file is part of the NocoBase (R) project. * Copyright (c) 2020-2024 NocoBase Co., Ltd. * Authors: NocoBase Team. * * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License. * For more information, please refer to: https://www.nocobase.com/agreement. */ import type { ResourcerContext } from '@nocobase/resourcer'; import type { Application } from '@nocobase/server'; import type { PathSegment, VariablePathRef } from '../template/variable-expression'; type MaybePromise = T | Promise; export type RecordSlotResolved = Readonly<{ status: 'resolved'; slot: readonly PathSegment[]; }>; export type RecordSlotResolverResult = RecordSlotResolved | Readonly<{ status: 'deny' | 'abstain'; }>; export type RecordSlotResolverInput = Readonly<{ path: VariablePathRef; currentNode?: unknown; loadAncestors?: () => Promise; ctx?: ResourcerContext; getCollection?: (dataSourceKey: string, collection: string) => unknown; }>; export type RecordSlotResolverRegistration = Readonly<{ owner: string; id: string; needsAncestors?: boolean; match: (path: VariablePathRef) => boolean; resolve: (input: RecordSlotResolverInput) => MaybePromise; }>; export declare class RecordSlotResolverRegistry { private readonly registrations; has(owner: string, id: string): boolean; register(registration: RecordSlotResolverRegistration): () => void; resolve(input: RecordSlotResolverInput): Promise; } export declare function getRecordSlotResolverRegistry(app: Application): RecordSlotResolverRegistry; export declare function createNestedRecordSlotResolver(registration: Readonly<{ owner: string; id: string; varName: string; }>): RecordSlotResolverRegistration; export {};