/// import { ChannelCredentials, ChannelOptions, UntypedServiceImplementation, handleUnaryCall, Client, ClientUnaryCall, Metadata, CallOptions, ServiceError } from '@grpc/grpc-js'; import _m0 from 'protobufjs/minimal'; import { FieldMask } from '../../../../google/protobuf/field_mask'; import { Registry } from '../../../../yandex/cloud/containerregistry/v1/registry'; import { IpPermission, IpPermissionDelta } from '../../../../yandex/cloud/containerregistry/v1/ip_permission'; import { Operation } from '../../../../yandex/cloud/operation/operation'; import { ListAccessBindingsRequest, ListAccessBindingsResponse, SetAccessBindingsRequest, UpdateAccessBindingsRequest } from '../../../../yandex/cloud/access/access'; export declare const protobufPackage = "yandex.cloud.containerregistry.v1"; export interface GetRegistryRequest { /** * ID of the Registry resource to return. * * To get the registry ID use a [RegistryService.List] request. */ registryId: string; } export interface ListRegistriesRequest { /** * ID of the folder to list registries in. * * To get the folder ID use a [yandex.cloud.resourcemanager.v1.FolderService.List] request. */ folderId: string; /** * The maximum number of results per page to return. If the number of available * results is larger than [page_size], * the service returns a [ListRegistriesResponse.next_page_token] * that can be used to get the next page of results in subsequent list requests. * Default value: 100. */ pageSize: number; /** * Page token. To get the next page of results, set [page_token] to the * [ListRegistriesResponse.next_page_token] returned by a previous list request. */ pageToken: string; /** * A filter expression that filters resources listed in the response. * The expression must specify: * 1. The field name. Currently you can use filtering only on [Registry.name] field. * 2. An `=` operator. * 3. The value in double quotes (`"`). Must be 3-63 characters long and match the regular expression `[a-z][-a-z0-9]{1,61}[a-z0-9]`. */ filter: string; } export interface ListRegistriesResponse { /** List of Registry resources. */ registries: Registry[]; /** * This token allows you to get the next page of results for list requests. If the number of results * is larger than [ListRegistriesRequest.page_size], use * the [next_page_token] as the value * for the [ListRegistriesRequest.page_token] query parameter * in the next list request. Each subsequent list request will have its own * [next_page_token] to continue paging through the results. */ nextPageToken: string; } export interface CreateRegistryRequest { /** * ID of the folder to create a registry in. * * To get the folder ID, use a [yandex.cloud.resourcemanager.v1.FolderService.List] request. */ folderId: string; /** * Name of the registry. * * There may be only one registry per folder. */ name: string; /** Resource labels as `key:value` pairs. */ labels: { [key: string]: string; }; /** If true, registry will be created with pre-setup scanning policy (on push and on schedule every 7 days) */ secure: boolean; } export interface CreateRegistryRequest_LabelsEntry { key: string; value: string; } export interface CreateRegistryMetadata { /** ID of the registry that is being created. */ registryId: string; } export interface UpdateRegistryRequest { /** * ID of the Registry resource to update. * * To get the registry ID use a [RegistryService.List] request. */ registryId: string; /** Field mask that specifies which fields of the Registry resource are going to be updated. */ updateMask?: FieldMask; /** * Name of the registry. * * There may be only one registry per folder. */ name: string; /** * Resource labels as `key:value` pairs. * * Existing set of `labels` is completely replaced by the provided set. */ labels: { [key: string]: string; }; } export interface UpdateRegistryRequest_LabelsEntry { key: string; value: string; } export interface UpdateRegistryMetadata { /** ID of the Registry resource that is being updated. */ registryId: string; } export interface DeleteRegistryRequest { /** ID of the registry to delete. */ registryId: string; } export interface DeleteRegistryMetadata { /** ID of the registry that is being deleted. */ registryId: string; } export interface SetIpPermissionRequest { /** ID of the registry for which ip permissions are being set. */ registryId: string; /** IP permission to be set. */ ipPermission: IpPermission[]; } export interface UpdateIpPermissionRequest { /** ID of the registry for which ip permissions are being updated. */ registryId: string; /** Updates to IP permissions. */ ipPermissionDeltas: IpPermissionDelta[]; } export interface ListIpPermissionRequest { /** ID of the Registry to return ip permission list. */ registryId: string; } export interface ListIpPermissionsResponse { /** List of ip permissions for registry */ permissions: IpPermission[]; } export interface SetIpPermissionMetadata { /** ID of the registry that ip permission is being set. */ registryId: string; } export interface UpdateIpPermissionMetadata { /** ID of the registry that ip permission is being updated. */ registryId: string; } export declare const GetRegistryRequest: { encode(message: GetRegistryRequest, writer?: _m0.Writer): _m0.Writer; decode(input: _m0.Reader | Uint8Array, length?: number): GetRegistryRequest; fromJSON(object: any): GetRegistryRequest; toJSON(message: GetRegistryRequest): unknown; fromPartial, never>>(object: I): GetRegistryRequest; }; export declare const ListRegistriesRequest: { encode(message: ListRegistriesRequest, writer?: _m0.Writer): _m0.Writer; decode(input: _m0.Reader | Uint8Array, length?: number): ListRegistriesRequest; fromJSON(object: any): ListRegistriesRequest; toJSON(message: ListRegistriesRequest): unknown; fromPartial, never>>(object: I): ListRegistriesRequest; }; export declare const ListRegistriesResponse: { encode(message: ListRegistriesResponse, writer?: _m0.Writer): _m0.Writer; decode(input: _m0.Reader | Uint8Array, length?: number): ListRegistriesResponse; fromJSON(object: any): ListRegistriesResponse; toJSON(message: ListRegistriesResponse): unknown; fromPartial, never>) | undefined; } & Record, never>)[] & Record, never>) | undefined; nextPageToken?: string | undefined; } & Record, never>>(object: I): ListRegistriesResponse; }; export declare const CreateRegistryRequest: { encode(message: CreateRegistryRequest, writer?: _m0.Writer): _m0.Writer; decode(input: _m0.Reader | Uint8Array, length?: number): CreateRegistryRequest; fromJSON(object: any): CreateRegistryRequest; toJSON(message: CreateRegistryRequest): unknown; fromPartial, never>) | undefined; secure?: boolean | undefined; } & Record, never>>(object: I): CreateRegistryRequest; }; export declare const CreateRegistryRequest_LabelsEntry: { encode(message: CreateRegistryRequest_LabelsEntry, writer?: _m0.Writer): _m0.Writer; decode(input: _m0.Reader | Uint8Array, length?: number): CreateRegistryRequest_LabelsEntry; fromJSON(object: any): CreateRegistryRequest_LabelsEntry; toJSON(message: CreateRegistryRequest_LabelsEntry): unknown; fromPartial, never>>(object: I): CreateRegistryRequest_LabelsEntry; }; export declare const CreateRegistryMetadata: { encode(message: CreateRegistryMetadata, writer?: _m0.Writer): _m0.Writer; decode(input: _m0.Reader | Uint8Array, length?: number): CreateRegistryMetadata; fromJSON(object: any): CreateRegistryMetadata; toJSON(message: CreateRegistryMetadata): unknown; fromPartial, never>>(object: I): CreateRegistryMetadata; }; export declare const UpdateRegistryRequest: { encode(message: UpdateRegistryRequest, writer?: _m0.Writer): _m0.Writer; decode(input: _m0.Reader | Uint8Array, length?: number): UpdateRegistryRequest; fromJSON(object: any): UpdateRegistryRequest; toJSON(message: UpdateRegistryRequest): unknown; fromPartial, never>) | undefined; } & Record, never>) | undefined; name?: string | undefined; labels?: ({ [x: string]: string | undefined; } & { [x: string]: string | undefined; } & Record, never>) | undefined; } & Record, never>>(object: I): UpdateRegistryRequest; }; export declare const UpdateRegistryRequest_LabelsEntry: { encode(message: UpdateRegistryRequest_LabelsEntry, writer?: _m0.Writer): _m0.Writer; decode(input: _m0.Reader | Uint8Array, length?: number): UpdateRegistryRequest_LabelsEntry; fromJSON(object: any): UpdateRegistryRequest_LabelsEntry; toJSON(message: UpdateRegistryRequest_LabelsEntry): unknown; fromPartial, never>>(object: I): UpdateRegistryRequest_LabelsEntry; }; export declare const UpdateRegistryMetadata: { encode(message: UpdateRegistryMetadata, writer?: _m0.Writer): _m0.Writer; decode(input: _m0.Reader | Uint8Array, length?: number): UpdateRegistryMetadata; fromJSON(object: any): UpdateRegistryMetadata; toJSON(message: UpdateRegistryMetadata): unknown; fromPartial, never>>(object: I): UpdateRegistryMetadata; }; export declare const DeleteRegistryRequest: { encode(message: DeleteRegistryRequest, writer?: _m0.Writer): _m0.Writer; decode(input: _m0.Reader | Uint8Array, length?: number): DeleteRegistryRequest; fromJSON(object: any): DeleteRegistryRequest; toJSON(message: DeleteRegistryRequest): unknown; fromPartial, never>>(object: I): DeleteRegistryRequest; }; export declare const DeleteRegistryMetadata: { encode(message: DeleteRegistryMetadata, writer?: _m0.Writer): _m0.Writer; decode(input: _m0.Reader | Uint8Array, length?: number): DeleteRegistryMetadata; fromJSON(object: any): DeleteRegistryMetadata; toJSON(message: DeleteRegistryMetadata): unknown; fromPartial, never>>(object: I): DeleteRegistryMetadata; }; export declare const SetIpPermissionRequest: { encode(message: SetIpPermissionRequest, writer?: _m0.Writer): _m0.Writer; decode(input: _m0.Reader | Uint8Array, length?: number): SetIpPermissionRequest; fromJSON(object: any): SetIpPermissionRequest; toJSON(message: SetIpPermissionRequest): unknown; fromPartial, never>)[] & Record, never>) | undefined; } & Record, never>>(object: I): SetIpPermissionRequest; }; export declare const UpdateIpPermissionRequest: { encode(message: UpdateIpPermissionRequest, writer?: _m0.Writer): _m0.Writer; decode(input: _m0.Reader | Uint8Array, length?: number): UpdateIpPermissionRequest; fromJSON(object: any): UpdateIpPermissionRequest; toJSON(message: UpdateIpPermissionRequest): unknown; fromPartial, never>) | undefined; } & Record, never>)[] & Record, never>) | undefined; } & Record, never>>(object: I): UpdateIpPermissionRequest; }; export declare const ListIpPermissionRequest: { encode(message: ListIpPermissionRequest, writer?: _m0.Writer): _m0.Writer; decode(input: _m0.Reader | Uint8Array, length?: number): ListIpPermissionRequest; fromJSON(object: any): ListIpPermissionRequest; toJSON(message: ListIpPermissionRequest): unknown; fromPartial, never>>(object: I): ListIpPermissionRequest; }; export declare const ListIpPermissionsResponse: { encode(message: ListIpPermissionsResponse, writer?: _m0.Writer): _m0.Writer; decode(input: _m0.Reader | Uint8Array, length?: number): ListIpPermissionsResponse; fromJSON(object: any): ListIpPermissionsResponse; toJSON(message: ListIpPermissionsResponse): unknown; fromPartial, never>)[] & Record, never>) | undefined; } & Record, never>>(object: I): ListIpPermissionsResponse; }; export declare const SetIpPermissionMetadata: { encode(message: SetIpPermissionMetadata, writer?: _m0.Writer): _m0.Writer; decode(input: _m0.Reader | Uint8Array, length?: number): SetIpPermissionMetadata; fromJSON(object: any): SetIpPermissionMetadata; toJSON(message: SetIpPermissionMetadata): unknown; fromPartial, never>>(object: I): SetIpPermissionMetadata; }; export declare const UpdateIpPermissionMetadata: { encode(message: UpdateIpPermissionMetadata, writer?: _m0.Writer): _m0.Writer; decode(input: _m0.Reader | Uint8Array, length?: number): UpdateIpPermissionMetadata; fromJSON(object: any): UpdateIpPermissionMetadata; toJSON(message: UpdateIpPermissionMetadata): unknown; fromPartial, never>>(object: I): UpdateIpPermissionMetadata; }; /** A set of methods for managing Registry resources. */ export declare const RegistryServiceService: { /** * Returns the specified Registry resource. * * To get the list of available Registry resources, make a [List] request. */ readonly get: { readonly path: "/yandex.cloud.containerregistry.v1.RegistryService/Get"; readonly requestStream: false; readonly responseStream: false; readonly requestSerialize: (value: GetRegistryRequest) => Buffer; readonly requestDeserialize: (value: Buffer) => GetRegistryRequest; readonly responseSerialize: (value: Registry) => Buffer; readonly responseDeserialize: (value: Buffer) => Registry; }; /** Retrieves the list of Registry resources in the specified folder. */ readonly list: { readonly path: "/yandex.cloud.containerregistry.v1.RegistryService/List"; readonly requestStream: false; readonly responseStream: false; readonly requestSerialize: (value: ListRegistriesRequest) => Buffer; readonly requestDeserialize: (value: Buffer) => ListRegistriesRequest; readonly responseSerialize: (value: ListRegistriesResponse) => Buffer; readonly responseDeserialize: (value: Buffer) => ListRegistriesResponse; }; /** Creates a registry in the specified folder. */ readonly create: { readonly path: "/yandex.cloud.containerregistry.v1.RegistryService/Create"; readonly requestStream: false; readonly responseStream: false; readonly requestSerialize: (value: CreateRegistryRequest) => Buffer; readonly requestDeserialize: (value: Buffer) => CreateRegistryRequest; readonly responseSerialize: (value: Operation) => Buffer; readonly responseDeserialize: (value: Buffer) => Operation; }; /** Updates the specified registry. */ readonly update: { readonly path: "/yandex.cloud.containerregistry.v1.RegistryService/Update"; readonly requestStream: false; readonly responseStream: false; readonly requestSerialize: (value: UpdateRegistryRequest) => Buffer; readonly requestDeserialize: (value: Buffer) => UpdateRegistryRequest; readonly responseSerialize: (value: Operation) => Buffer; readonly responseDeserialize: (value: Buffer) => Operation; }; /** Deletes the specified registry. */ readonly delete: { readonly path: "/yandex.cloud.containerregistry.v1.RegistryService/Delete"; readonly requestStream: false; readonly responseStream: false; readonly requestSerialize: (value: DeleteRegistryRequest) => Buffer; readonly requestDeserialize: (value: Buffer) => DeleteRegistryRequest; readonly responseSerialize: (value: Operation) => Buffer; readonly responseDeserialize: (value: Buffer) => Operation; }; /** Lists access bindings for the specified registry. */ readonly listAccessBindings: { readonly path: "/yandex.cloud.containerregistry.v1.RegistryService/ListAccessBindings"; readonly requestStream: false; readonly responseStream: false; readonly requestSerialize: (value: ListAccessBindingsRequest) => Buffer; readonly requestDeserialize: (value: Buffer) => ListAccessBindingsRequest; readonly responseSerialize: (value: ListAccessBindingsResponse) => Buffer; readonly responseDeserialize: (value: Buffer) => ListAccessBindingsResponse; }; /** Sets access bindings for the specified registry. */ readonly setAccessBindings: { readonly path: "/yandex.cloud.containerregistry.v1.RegistryService/SetAccessBindings"; readonly requestStream: false; readonly responseStream: false; readonly requestSerialize: (value: SetAccessBindingsRequest) => Buffer; readonly requestDeserialize: (value: Buffer) => SetAccessBindingsRequest; readonly responseSerialize: (value: Operation) => Buffer; readonly responseDeserialize: (value: Buffer) => Operation; }; /** Updates access bindings for the specified registry. */ readonly updateAccessBindings: { readonly path: "/yandex.cloud.containerregistry.v1.RegistryService/UpdateAccessBindings"; readonly requestStream: false; readonly responseStream: false; readonly requestSerialize: (value: UpdateAccessBindingsRequest) => Buffer; readonly requestDeserialize: (value: Buffer) => UpdateAccessBindingsRequest; readonly responseSerialize: (value: Operation) => Buffer; readonly responseDeserialize: (value: Buffer) => Operation; }; /** List ip permissions for the specified registry. */ readonly listIpPermission: { readonly path: "/yandex.cloud.containerregistry.v1.RegistryService/ListIpPermission"; readonly requestStream: false; readonly responseStream: false; readonly requestSerialize: (value: ListIpPermissionRequest) => Buffer; readonly requestDeserialize: (value: Buffer) => ListIpPermissionRequest; readonly responseSerialize: (value: ListIpPermissionsResponse) => Buffer; readonly responseDeserialize: (value: Buffer) => ListIpPermissionsResponse; }; /** Set ip permissions for the specified registry. */ readonly setIpPermission: { readonly path: "/yandex.cloud.containerregistry.v1.RegistryService/SetIpPermission"; readonly requestStream: false; readonly responseStream: false; readonly requestSerialize: (value: SetIpPermissionRequest) => Buffer; readonly requestDeserialize: (value: Buffer) => SetIpPermissionRequest; readonly responseSerialize: (value: Operation) => Buffer; readonly responseDeserialize: (value: Buffer) => Operation; }; /** Update ip permissions for the specified registry. */ readonly updateIpPermission: { readonly path: "/yandex.cloud.containerregistry.v1.RegistryService/UpdateIpPermission"; readonly requestStream: false; readonly responseStream: false; readonly requestSerialize: (value: UpdateIpPermissionRequest) => Buffer; readonly requestDeserialize: (value: Buffer) => UpdateIpPermissionRequest; readonly responseSerialize: (value: Operation) => Buffer; readonly responseDeserialize: (value: Buffer) => Operation; }; }; export interface RegistryServiceServer extends UntypedServiceImplementation { /** * Returns the specified Registry resource. * * To get the list of available Registry resources, make a [List] request. */ get: handleUnaryCall; /** Retrieves the list of Registry resources in the specified folder. */ list: handleUnaryCall; /** Creates a registry in the specified folder. */ create: handleUnaryCall; /** Updates the specified registry. */ update: handleUnaryCall; /** Deletes the specified registry. */ delete: handleUnaryCall; /** Lists access bindings for the specified registry. */ listAccessBindings: handleUnaryCall; /** Sets access bindings for the specified registry. */ setAccessBindings: handleUnaryCall; /** Updates access bindings for the specified registry. */ updateAccessBindings: handleUnaryCall; /** List ip permissions for the specified registry. */ listIpPermission: handleUnaryCall; /** Set ip permissions for the specified registry. */ setIpPermission: handleUnaryCall; /** Update ip permissions for the specified registry. */ updateIpPermission: handleUnaryCall; } export interface RegistryServiceClient extends Client { /** * Returns the specified Registry resource. * * To get the list of available Registry resources, make a [List] request. */ get(request: GetRegistryRequest, callback: (error: ServiceError | null, response: Registry) => void): ClientUnaryCall; get(request: GetRegistryRequest, metadata: Metadata, callback: (error: ServiceError | null, response: Registry) => void): ClientUnaryCall; get(request: GetRegistryRequest, metadata: Metadata, options: Partial, callback: (error: ServiceError | null, response: Registry) => void): ClientUnaryCall; /** Retrieves the list of Registry resources in the specified folder. */ list(request: ListRegistriesRequest, callback: (error: ServiceError | null, response: ListRegistriesResponse) => void): ClientUnaryCall; list(request: ListRegistriesRequest, metadata: Metadata, callback: (error: ServiceError | null, response: ListRegistriesResponse) => void): ClientUnaryCall; list(request: ListRegistriesRequest, metadata: Metadata, options: Partial, callback: (error: ServiceError | null, response: ListRegistriesResponse) => void): ClientUnaryCall; /** Creates a registry in the specified folder. */ create(request: CreateRegistryRequest, callback: (error: ServiceError | null, response: Operation) => void): ClientUnaryCall; create(request: CreateRegistryRequest, metadata: Metadata, callback: (error: ServiceError | null, response: Operation) => void): ClientUnaryCall; create(request: CreateRegistryRequest, metadata: Metadata, options: Partial, callback: (error: ServiceError | null, response: Operation) => void): ClientUnaryCall; /** Updates the specified registry. */ update(request: UpdateRegistryRequest, callback: (error: ServiceError | null, response: Operation) => void): ClientUnaryCall; update(request: UpdateRegistryRequest, metadata: Metadata, callback: (error: ServiceError | null, response: Operation) => void): ClientUnaryCall; update(request: UpdateRegistryRequest, metadata: Metadata, options: Partial, callback: (error: ServiceError | null, response: Operation) => void): ClientUnaryCall; /** Deletes the specified registry. */ delete(request: DeleteRegistryRequest, callback: (error: ServiceError | null, response: Operation) => void): ClientUnaryCall; delete(request: DeleteRegistryRequest, metadata: Metadata, callback: (error: ServiceError | null, response: Operation) => void): ClientUnaryCall; delete(request: DeleteRegistryRequest, metadata: Metadata, options: Partial, callback: (error: ServiceError | null, response: Operation) => void): ClientUnaryCall; /** Lists access bindings for the specified registry. */ listAccessBindings(request: ListAccessBindingsRequest, callback: (error: ServiceError | null, response: ListAccessBindingsResponse) => void): ClientUnaryCall; listAccessBindings(request: ListAccessBindingsRequest, metadata: Metadata, callback: (error: ServiceError | null, response: ListAccessBindingsResponse) => void): ClientUnaryCall; listAccessBindings(request: ListAccessBindingsRequest, metadata: Metadata, options: Partial, callback: (error: ServiceError | null, response: ListAccessBindingsResponse) => void): ClientUnaryCall; /** Sets access bindings for the specified registry. */ setAccessBindings(request: SetAccessBindingsRequest, callback: (error: ServiceError | null, response: Operation) => void): ClientUnaryCall; setAccessBindings(request: SetAccessBindingsRequest, metadata: Metadata, callback: (error: ServiceError | null, response: Operation) => void): ClientUnaryCall; setAccessBindings(request: SetAccessBindingsRequest, metadata: Metadata, options: Partial, callback: (error: ServiceError | null, response: Operation) => void): ClientUnaryCall; /** Updates access bindings for the specified registry. */ updateAccessBindings(request: UpdateAccessBindingsRequest, callback: (error: ServiceError | null, response: Operation) => void): ClientUnaryCall; updateAccessBindings(request: UpdateAccessBindingsRequest, metadata: Metadata, callback: (error: ServiceError | null, response: Operation) => void): ClientUnaryCall; updateAccessBindings(request: UpdateAccessBindingsRequest, metadata: Metadata, options: Partial, callback: (error: ServiceError | null, response: Operation) => void): ClientUnaryCall; /** List ip permissions for the specified registry. */ listIpPermission(request: ListIpPermissionRequest, callback: (error: ServiceError | null, response: ListIpPermissionsResponse) => void): ClientUnaryCall; listIpPermission(request: ListIpPermissionRequest, metadata: Metadata, callback: (error: ServiceError | null, response: ListIpPermissionsResponse) => void): ClientUnaryCall; listIpPermission(request: ListIpPermissionRequest, metadata: Metadata, options: Partial, callback: (error: ServiceError | null, response: ListIpPermissionsResponse) => void): ClientUnaryCall; /** Set ip permissions for the specified registry. */ setIpPermission(request: SetIpPermissionRequest, callback: (error: ServiceError | null, response: Operation) => void): ClientUnaryCall; setIpPermission(request: SetIpPermissionRequest, metadata: Metadata, callback: (error: ServiceError | null, response: Operation) => void): ClientUnaryCall; setIpPermission(request: SetIpPermissionRequest, metadata: Metadata, options: Partial, callback: (error: ServiceError | null, response: Operation) => void): ClientUnaryCall; /** Update ip permissions for the specified registry. */ updateIpPermission(request: UpdateIpPermissionRequest, callback: (error: ServiceError | null, response: Operation) => void): ClientUnaryCall; updateIpPermission(request: UpdateIpPermissionRequest, metadata: Metadata, callback: (error: ServiceError | null, response: Operation) => void): ClientUnaryCall; updateIpPermission(request: UpdateIpPermissionRequest, metadata: Metadata, options: Partial, callback: (error: ServiceError | null, response: Operation) => void): ClientUnaryCall; } export declare const RegistryServiceClient: { new (address: string, credentials: ChannelCredentials, options?: Partial): RegistryServiceClient; service: typeof RegistryServiceService; }; type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined; export type DeepPartial = T extends Builtin ? T : T extends Array ? Array> : T extends ReadonlyArray ? ReadonlyArray> : T extends {} ? { [K in keyof T]?: DeepPartial; } : Partial; type KeysOfUnion = T extends T ? keyof T : never; export type Exact = P extends Builtin ? P : P & { [K in keyof P]: Exact; } & Record>, never>; export {};
= P extends Builtin ? P : P & { [K in keyof P]: Exact
; } & Record>, never>; export {};