import type { OriginName, ReadableOriginName } from "./accessorSupport/types.js";

/** @internal */
export abstract class ReadOnlyMultiOriginJSONSupportMixin {
  constructor(...args: any[]);
  /**
   * Gets the value of a property at a specific origin.
   *
   * @param name - The name of the property.
   * @param originName - The property's origin.
   * @returns The property's value.
   * @internal
   */
  getAtOrigin<K extends keyof this & string>(name: K, originName: OriginName): this[K];
  /**
   * Get the origin of a property in the store.
   *
   * @param name - the property name.
   * @returns the origin of the property in the store, or `undefined` if the
   *   property does not exist in the store.
   * @internal
   */
  originOf<K extends keyof this & string>(name: K): OriginName | undefined;
  /**
   * Reverts the value of all properties to the value that was read from a specific origin.
   *
   * @param originName - The property's origin.
   * @internal
   */
  revertAllToOrigin(originName: ReadableOriginName): void;
  /**
   * Reverts the value of a property to the value that was read from a specific origin.
   *
   * @param name - The name of the property.
   * @param originName - The property's origin.
   * @internal
   */
  revertToOrigin<K extends keyof this & string>(name: K, originName: ReadableOriginName): void;
}