/* tslint:disable */
/* eslint-disable */
type UndefinedBehavior = "strict" | "chainable" | "lenient" | "semi_strct";
/**
 * Represents a MiniJinja environment.
 */
export class Environment {
  free(): void;
  /**
   * Registers a new template by name and source.
   */
  addTemplate(name: string, source: string): void;
  /**
   * Removes a global again.
   */
  removeGlobal(name: string): void;
  /**
   * Clears all templates from the environment.
   */
  clearTemplates(): void;
  /**
   * Enables python compatibility.
   */
  enablePyCompat(): void;
  /**
   * Removes a template by name.
   */
  removeTemplate(name: string): void;
  /**
   * Like `renderStr` but with a named template for auto escape detection.
   */
  renderNamedStr(name: string, source: string, ctx: any): string;
  /**
   * Renders a registered template by name with the given context.
   */
  renderTemplate(name: string, ctx: any): string;
  /**
   * Sets a callback to join template paths (for relative includes/extends).
   *
   * The callback receives `(name, parent)` and should return a joined path string.
   * If it throws or returns a non-string, the original `name` is used.
   */
  setPathJoinCallback(func: Function): void;
  constructor();
  /**
   * Registers a test function.
   */
  addTest(name: string, func: Function): void;
  /**
   * Evaluates an expression with the given context.
   *
   * This is useful for evaluating expressions outside of templates.  The expression is
   * parsed and evaluated immediately.
   */
  evalExpr(expr: string, ctx: any): any;
  /**
   * Registers a filter function.
   */
  addFilter(name: string, func: Function): void;
  /**
   * Registers a value as global.
   */
  addGlobal(name: string, value: any): void;
  /**
   * Renders a string template with the given context.
   *
   * This is useful for one-off template rendering without registering the template.  The
   * template is parsed and rendered immediately.
   */
  renderStr(source: string, ctx: any): string;
  /**
   * Registers a synchronous template loader callback.
   *
   * The provided function is called with a template name and must return a
   * string with the template source or `null`/`undefined` if the template
   * does not exist. Errors thrown are propagated as MiniJinja errors.
   */
  setLoader(func: Function): void;
  /**
   * Enables or disables block trimming.
   */
  trimBlocks: boolean;
  /**
   * Enables or disables the lstrip blocks feature.
   */
  lstripBlocks: boolean;
  /**
   * Reconfigures the behavior of undefined variables.
   */
  undefinedBehavior: UndefinedBehavior;
  /**
   * Enables or disables keeping of the final newline.
   */
  keepTrailingNewline: boolean;
  /**
   * Configures the max-fuel for template evaluation.
   */
  get fuel(): number | undefined;
  set fuel(value: number | null | undefined);
  /**
   * Enables or disables debug mode.
   */
  debug: boolean;
}

export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module;

export interface InitOutput {
  readonly memory: WebAssembly.Memory;
  readonly __wbg_environment_free: (a: number, b: number) => void;
  readonly environment_addFilter: (a: number, b: number, c: number, d: number) => void;
  readonly environment_addGlobal: (a: number, b: number, c: number, d: number, e: number) => void;
  readonly environment_addTemplate: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
  readonly environment_addTest: (a: number, b: number, c: number, d: number) => void;
  readonly environment_clearTemplates: (a: number) => void;
  readonly environment_debug: (a: number) => number;
  readonly environment_enablePyCompat: (a: number) => void;
  readonly environment_evalExpr: (a: number, b: number, c: number, d: number, e: number) => void;
  readonly environment_fuel: (a: number) => number;
  readonly environment_keepTrailingNewline: (a: number) => number;
  readonly environment_lstripBlocks: (a: number) => number;
  readonly environment_new: () => number;
  readonly environment_removeGlobal: (a: number, b: number, c: number) => void;
  readonly environment_removeTemplate: (a: number, b: number, c: number) => void;
  readonly environment_renderNamedStr: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
  readonly environment_renderStr: (a: number, b: number, c: number, d: number, e: number) => void;
  readonly environment_renderTemplate: (a: number, b: number, c: number, d: number, e: number) => void;
  readonly environment_setLoader: (a: number, b: number) => void;
  readonly environment_setPathJoinCallback: (a: number, b: number) => void;
  readonly environment_set_debug: (a: number, b: number) => void;
  readonly environment_set_fuel: (a: number, b: number) => void;
  readonly environment_set_keepTrailingNewline: (a: number, b: number) => void;
  readonly environment_set_lstripBlocks: (a: number, b: number) => void;
  readonly environment_set_trimBlocks: (a: number, b: number) => void;
  readonly environment_set_undefinedBehavior: (a: number, b: number, c: number) => void;
  readonly environment_trimBlocks: (a: number) => number;
  readonly environment_undefinedBehavior: (a: number) => number;
  readonly __wbindgen_export_0: (a: number, b: number) => number;
  readonly __wbindgen_export_1: (a: number, b: number, c: number, d: number) => number;
  readonly __wbindgen_export_2: (a: number) => void;
  readonly __wbindgen_export_3: (a: number, b: number, c: number) => void;
  readonly __wbindgen_add_to_stack_pointer: (a: number) => number;
}

export type SyncInitInput = BufferSource | WebAssembly.Module;
/**
* Instantiates the given `module`, which can either be bytes or
* a precompiled `WebAssembly.Module`.
*
* @param {{ module: SyncInitInput }} module - Passing `SyncInitInput` directly is deprecated.
*
* @returns {InitOutput}
*/
export function initSync(module: { module: SyncInitInput } | SyncInitInput): InitOutput;

/**
* If `module_or_path` is {RequestInfo} or {URL}, makes a request and
* for everything else, calls `WebAssembly.instantiate` directly.
*
* @param {{ module_or_path: InitInput | Promise<InitInput> }} module_or_path - Passing `InitInput` directly is deprecated.
*
* @returns {Promise<InitOutput>}
*/
export default function __wbg_init (module_or_path?: { module_or_path: InitInput | Promise<InitInput> } | InitInput | Promise<InitInput>): Promise<InitOutput>;
