import { Writer } from './Writer'; declare global { interface Object { type: string; __serialize(writer: Writer): void; } } export declare const TopLevelType: unique symbol; export declare const Type: unique symbol; export declare const Name: unique symbol; export declare function max(n1: number, n2: number): number; export interface Args { provider?: string; count?: number; lifecycle?: Lifecycle; provisioner?: any; depends_on?: any[]; } export interface Lifecycle { create_before_destroy?: boolean; prevent_destroy?: boolean; ignore_changes: any[]; } export declare function Verbatim(string: string): Serializable; export interface ITopLevelBlock { readonly [TopLevelType]: string; } export interface Serializable { __serialize(writer: Writer): void; } export declare class TopLevelBlock { readonly args?: any; readonly attributes: any; readonly ref: Reference; readonly self: Reference; private readonly [Type]; private readonly [Name]; private readonly [TopLevelType]; constructor(topLevelType: string, type: string, name: string, args?: any); toString(): string; } export declare class Resource { readonly args?: any; readonly attributes: any; readonly ref: Reference; readonly self: Reference; private readonly [Type]; private readonly [Name]; private readonly [TopLevelType]; constructor(scope: Scope, type: string, name: string, args?: any); toString(): string; } export declare class TypedResource extends Resource { readonly args?: TArgs; readonly attributes: TAttr; constructor(scope: Scope, type: string, name: string, args?: TArgs); } export declare class DataSource { readonly args?: any; readonly attributes: any; readonly ref: Reference; readonly self: Reference; private readonly [TopLevelType]; private readonly [Type]; private readonly [Name]; constructor(scope: Scope, type: string, name: string, args?: any); } export declare class TypedDataSource extends DataSource { readonly args?: TArgs; readonly attributes: TAttr; constructor(scope: Scope, type: string, name: string, args?: TArgs); } export declare class Backend { args: any; private readonly [TopLevelType]; private readonly [Name]; constructor(scope: Scope, name: string, args?: any); __serialize(writer: Writer): void; } interface ScopeOptions { namespace?: string; } export declare class Scope implements Serializable { children: Scope[]; resources: any[]; readonly namespace?: string; static Root: Scope; constructor(parent: Scope | null, options?: ScopeOptions); __serialize(writer: Writer): void; add(item: TopLevelBlock | Resource | Scope | Provider | DataSource | Backend): void; create(): void; } export declare class Computed { value?: T; } export declare class Provider { args: any; private readonly [TopLevelType]; private readonly [Name]; constructor(scope: Scope, name: string, args?: any); } export declare class Reference implements Serializable { type: string; name: string; __type: string; constructor(type: string, name: string); __serialize(writer: Writer): void; toString(): string; } export declare class NamedBlock implements Serializable { name: string; value: any; __type: string; constructor(name: string, value: any); __serialize(writer: Writer): void; } export declare const Functions: any; export declare class FunctionInvocation implements Serializable { private name; private args; __type: string; constructor(name: string, args: any[]); __serialize(writer: Writer): void; toString(): string; } export {};