import "../_dnt.polyfills.js";
import * as t from "../types.js";
import type { Effect } from "../gen/typegraph_core";
import Policy from "../policy.js";
import { type Materializer, Runtime } from "./mod.js";
interface FunMat extends Materializer {
    code: string;
    secrets: string[];
    effect: Effect;
}
interface ImportMat extends Materializer {
    name: string;
    module: string;
    secrets: string[];
    effect: Effect;
}
interface PredefinedFuncMat extends Materializer {
    name: string;
}
export interface DenoFunc {
    code: string | ((...args: any[]) => any);
    secrets?: Array<string>;
    effect?: Effect;
}
export interface DenoImport {
    name: string;
    module: string;
    deps?: Array<string>;
    secrets?: Array<string>;
    effect?: Effect;
}
export declare class DenoRuntime extends Runtime {
    constructor();
    func<I extends t.Typedef = t.Typedef, O extends t.Typedef = t.Typedef>(inp: I, out: O, { code, secrets, effect }: DenoFunc): t.Func<I, O, FunMat>;
    import<I extends t.Typedef = t.Typedef, O extends t.Typedef = t.Typedef>(inp: I, out: O, { name, module, deps, effect, secrets }: DenoImport): t.Func<I, O, ImportMat>;
    identity<I extends t.Typedef = t.Typedef>(inp: I): t.Func<I, t.Typedef, PredefinedFuncMat>;
    /** use a static function already registered on the typegate */
    static<P extends t.Typedef>(out: P, value: any): t.Func;
    /** Utility for fetching the current request context */
    fetchContext<C extends t.Typedef>(outputShape?: C): t.Func;
    policy(name: string, _code: string): Policy;
    policy(name: string, data: Omit<DenoFunc, "effect">): Policy;
    importPolicy(data: Omit<DenoImport, "effect">, name?: string): Policy;
}
export {};
