/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import { URI } from 'vs/base/common/uri'; export interface IDataTransferFile { readonly name: string; readonly uri?: URI; data(): Promise; } export interface IDataTransferItem { asString(): Thenable; asFile(): IDataTransferFile | undefined; value: any; } export class VSDataTransfer { private readonly _data = new Map(); public get size(): number { return this._data.size; } public has(mimeType: string): boolean { return this._data.has(mimeType); } public get(mimeType: string): IDataTransferItem | undefined { return this._data.get(mimeType); } public set(mimeType: string, value: IDataTransferItem): void { this._data.set(mimeType, value); } public delete(mimeType: string) { this._data.delete(mimeType); } public setString(mimeType: string, stringOrPromise: string | Promise) { this.set(mimeType, { asString: async () => stringOrPromise, asFile: () => undefined, value: typeof stringOrPromise === 'string' ? stringOrPromise : undefined, }); } public setFile(mimeType: string, fileName: string, uri: URI | undefined, data: () => Promise) { this.set(mimeType, { asString: async () => '', asFile: () => ({ name: fileName, uri, data }), value: undefined, }); } public entries(): IterableIterator<[string, IDataTransferItem]> { return this._data.entries(); } public values(): IterableIterator { return this._data.values(); } public forEach(f: (value: IDataTransferItem, key: string) => void) { this._data.forEach(f); } }