import type { ClassEntry, Entry, ModularEntry, Pool, UTF8Entry } from "../pool"; import { AttributeType } from "../spec"; import type { Attribute } from "./"; export interface ModulePackage { index: number; entry?: ModularEntry; } export interface ModuleAttribute extends Attribute { type: AttributeType.MODULE; moduleNameIndex: number; moduleFlags: number; moduleVersionIndex: number; moduleNameEntry?: ModularEntry; moduleVersionEntry?: UTF8Entry; requires: ModuleRequires[]; exports: ModuleExportsOpens[]; opens: ModuleExportsOpens[]; uses: ModuleRelation[]; provides: ModuleProvides[]; } export interface ModuleRelation { index: number; entry?: E; } export interface ModuleRequires extends ModuleRelation { flags: number; versionIndex: number; versionEntry?: UTF8Entry; } export interface ModuleExportsOpens extends ModuleRelation { flags: number; to: ModuleRelation[]; } export interface ModuleProvides extends ModuleRelation { with: ModuleRelation[]; } export declare const readModule: (attr: Attribute, pool: Pool) => ModuleAttribute; export declare const writeModule: (attr: ModuleAttribute) => Uint8Array; export interface ModulePackagesAttribute extends Attribute { type: AttributeType.MODULE_PACKAGES; packages: ModulePackage[]; } export declare const readModulePackages: (attr: Attribute, pool: Pool) => ModulePackagesAttribute; export declare const writeModulePackages: (attr: ModulePackagesAttribute) => Uint8Array; export interface ModuleMainClassAttribute extends Attribute { type: AttributeType.MODULE_MAIN_CLASS; mainClassIndex: number; mainClassEntry?: ClassEntry; } export declare const readModuleMainClass: (attr: Attribute, pool: Pool) => ModuleMainClassAttribute; export declare const writeModuleMainClass: (attr: ModuleMainClassAttribute) => Uint8Array;