import * as ts from 'typescript';
import type { TypeOrValueSpecifier } from './TypeOrValueSpecifier';
export interface ReadonlynessOptions {
    readonly allow?: TypeOrValueSpecifier[];
    readonly treatMethodsAsReadonly?: boolean;
}
export declare const readonlynessOptionsSchema: {
    additionalProperties: false;
    properties: {
        allow: {
            readonly items: {
                readonly oneOf: [{
                    readonly type: "string";
                }, {
                    readonly additionalProperties: false;
                    readonly properties: {
                        readonly from: {
                            readonly enum: ["file"];
                            readonly type: "string";
                        };
                        readonly name: {
                            readonly oneOf: [{
                                readonly type: "string";
                            }, {
                                readonly items: {
                                    readonly type: "string";
                                };
                                readonly minItems: 1;
                                readonly type: "array";
                                readonly uniqueItems: true;
                            }];
                        };
                        readonly path: {
                            readonly type: "string";
                        };
                    };
                    readonly required: ["from", "name"];
                    readonly type: "object";
                }, {
                    readonly additionalProperties: false;
                    readonly properties: {
                        readonly from: {
                            readonly enum: ["lib"];
                            readonly type: "string";
                        };
                        readonly name: {
                            readonly oneOf: [{
                                readonly type: "string";
                            }, {
                                readonly items: {
                                    readonly type: "string";
                                };
                                readonly minItems: 1;
                                readonly type: "array";
                                readonly uniqueItems: true;
                            }];
                        };
                    };
                    readonly required: ["from", "name"];
                    readonly type: "object";
                }, {
                    readonly additionalProperties: false;
                    readonly properties: {
                        readonly from: {
                            readonly enum: ["package"];
                            readonly type: "string";
                        };
                        readonly name: {
                            readonly oneOf: [{
                                readonly type: "string";
                            }, {
                                readonly items: {
                                    readonly type: "string";
                                };
                                readonly minItems: 1;
                                readonly type: "array";
                                readonly uniqueItems: true;
                            }];
                        };
                        readonly package: {
                            readonly type: "string";
                        };
                    };
                    readonly required: ["from", "name", "package"];
                    readonly type: "object";
                }];
            };
            readonly type: "array";
        };
        treatMethodsAsReadonly: {
            type: "boolean";
        };
    };
    type: "object";
};
export declare const readonlynessOptionsDefaults: ReadonlynessOptions;
/**
 * Checks if the given type is readonly
 */
export declare function isTypeReadonly(program: ts.Program, type: ts.Type, options?: ReadonlynessOptions): boolean;
