import type { BufferEncodingOption, ObjectEncodingOptions } from 'node:fs'; import type { V_Context } from '../context.js'; /** * Extended attribute name with namespace prefix. * Format is namespace.attributename where namespace is one of: * - user: User attributes * - trusted: Trusted attributes (privileged) * - system: System attributes * - security: Security attributes * * Note: Currently only the 'user' namespace is supported. */ export type Name = `${'user' | 'trusted' | 'system' | 'security'}.${string}`; /** * Options for xattr operations. */ export interface Options { /** * If true, don't follow symlinks. * @default false */ noFollow?: boolean; /** * Encoding for attribute values. * If 'buffer' or undefined, the value is returned as a Buffer. * Otherwise, the value is returned as a string using the specified encoding. * @default undefined */ encoding?: BufferEncoding | 'buffer'; } /** * Options for setting extended attributes. * Extends the base Options with additional flags for create/replace behavior. */ export interface SetOptions extends Options { /** * If true, fail if the attribute already exists. * @default false */ create?: boolean; /** * If true, fail if the attribute does not exist. * @default false */ replace?: boolean; } /** * Gets the value of an extended attribute. * * @param path Path to the file * @param name Name of the attribute to get * @param opt Options for the operation * @returns A buffer containing the attribute value when encoding is 'buffer' or undefined, or a string when a string encoding is specified */ export declare function get(this: V_Context, path: string, name: Name, opt?: Options & (BufferEncodingOption | { encoding?: null; })): Promise; export declare function get(this: V_Context, path: string, name: Name, opt: Options & ObjectEncodingOptions): Promise; /** * Synchronously gets the value of an extended attribute. * * @param path Path to the file * @param name Name of the attribute to get * @param opt Options for the operation * @returns A buffer containing the attribute value when encoding is 'buffer' or undefined, or a string when a string encoding is specified */ export declare function getSync(this: V_Context, path: string, name: Name, opt?: Options & (BufferEncodingOption | { encoding?: null; })): Uint8Array; export declare function getSync(this: V_Context, path: string, name: Name, opt: Options & ObjectEncodingOptions): string; /** * Sets the value of an extended attribute. * * @param path Path to the file * @param name Name of the attribute to set * @param value Value to set * @param opt Options for the operation */ export declare function set(this: V_Context, path: string, name: Name, value: string | Uint8Array, opt?: SetOptions): Promise; /** * Synchronously sets the value of an extended attribute. * * @param path Path to the file * @param name Name of the attribute to set * @param value Value to set * @param opt Options for the operation */ export declare function setSync(this: V_Context, path: string, name: Name, value: string | Uint8Array, opt?: SetOptions): void; /** * Removes an extended attribute from a file. * * @param path Path to the file * @param name Name of the attribute to remove */ export declare function remove(this: V_Context, path: string, name: Name): Promise; /** * Synchronously removes an extended attribute from a file. * * @param path Path to the file * @param name Name of the attribute to remove */ export declare function removeSync(this: V_Context, path: string, name: Name): void; /** * Lists all extended attributes of a file. * * @param path Path to the file * @returns Array of attribute names */ export declare function list(this: V_Context, path: string): Promise; /** * Synchronously lists all extended attributes of a file. * * @param path Path to the file * @returns Array of attribute names */ export declare function listSync(this: V_Context, path: string): Name[];