/**
 * Shared JSON-Schema-aligned types for Harper's class-level metadata surfaces.
 *
 * `JsonSchemaFragment` is the public shape authors write to via `static properties`
 * on Resource/Table classes. It mirrors the JSON Schema vocabulary so the same
 * data can drive MCP tool descriptors, OpenAPI components, and any future schema
 * consumer without an intermediate translation layer.
 *
 * `DATA_TYPES` maps Harper's GraphQL primitive type names to JSON Schema type
 * strings. Used by the OpenAPI generator and the GraphQL parser to keep their
 * type emission in lockstep.
 */
export type JsonSchemaType = 'string' | 'integer' | 'number' | 'boolean' | 'object' | 'array' | 'null';
export interface JsonSchemaFragment {
    type?: JsonSchemaType | JsonSchemaType[] | string;
    description?: string;
    primaryKey?: boolean;
    assignCreatedTime?: boolean;
    assignUpdatedTime?: boolean;
    hidden?: boolean;
    enum?: readonly (string | number | boolean | null)[];
    nullable?: boolean;
    items?: JsonSchemaFragment;
    properties?: Record<string, JsonSchemaFragment>;
    required?: readonly string[];
    additionalProperties?: boolean;
    format?: string;
    const?: unknown;
}
export declare const DATA_TYPES: Record<string, JsonSchemaType>;
/**
 * Minimal shape needed to project an attribute to its JSON Schema fragment.
 * Subset of `Attribute` to avoid a cyclic import. Real `Attribute` from
 * `Table.ts` is structurally compatible.
 */
export interface AttributeLike {
    name: string;
    type?: string;
    description?: string;
    hidden?: boolean;
    isPrimaryKey?: boolean;
    assignCreatedTime?: boolean;
    assignUpdatedTime?: boolean;
    nullable?: boolean;
    elements?: AttributeLike;
}
/**
 * Project a single attribute to its JSON Schema fragment. Recursive on the
 * `elements` field for array types so an attribute like `tags: [String]`
 * produces `{ type: 'array', items: { type: 'string' } }` instead of the
 * type-only `{ type: 'array' }` that would leave the element shape unknown
 * to MCP / OpenAPI consumers.
 */
export declare function attributeToFragment(attr: AttributeLike): JsonSchemaFragment;
/**
 * Project an `Attribute[]` array into a `Record<string, JsonSchemaFragment>`
 * keyed by attribute name. Default canonical-properties source when an author
 * hasn't declared `static properties` on the class.
 */
export declare function projectAttributesToProperties(attributes: AttributeLike[]): Record<string, JsonSchemaFragment>;
