@eclipse-docks/core 0.7.127 → 0.7.132
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/index.js +7 -7
- package/dist/api/services.d.ts +3 -1
- package/dist/api/services.d.ts.map +1 -1
- package/dist/{api-Da9zQcfd.js → api-DImisUWV.js} +296 -305
- package/dist/api-DImisUWV.js.map +1 -0
- package/dist/assets/{js-runtime-worker-DAva_aXx.js.map → js-runtime-worker-X93bOre4.js.map} +1 -1
- package/dist/components/attribution.d.ts +1 -0
- package/dist/components/attribution.d.ts.map +1 -1
- package/dist/components/command.d.ts +0 -1
- package/dist/components/command.d.ts.map +1 -1
- package/dist/components/extensions.d.ts +3 -0
- package/dist/components/extensions.d.ts.map +1 -1
- package/dist/components/language-selector.d.ts.map +1 -1
- package/dist/components/layout-switcher.d.ts +1 -1
- package/dist/components/layout-switcher.d.ts.map +1 -1
- package/dist/components/npm-packages.d.ts +1 -0
- package/dist/components/npm-packages.d.ts.map +1 -1
- package/dist/components/release-history.d.ts +9 -2
- package/dist/components/release-history.d.ts.map +1 -1
- package/dist/components/tasks.d.ts.map +1 -1
- package/dist/core/apploader.d.ts +2 -9
- package/dist/core/apploader.d.ts.map +1 -1
- package/dist/core/contribution-targets.d.ts +1 -0
- package/dist/core/contribution-targets.d.ts.map +1 -1
- package/dist/core/dialogservice.d.ts +3 -1
- package/dist/core/dialogservice.d.ts.map +1 -1
- package/dist/core/dropdown-item.d.ts +8 -0
- package/dist/core/dropdown-item.d.ts.map +1 -1
- package/dist/core/events.js +1 -1
- package/dist/core/layout-panels.d.ts +25 -0
- package/dist/core/layout-panels.d.ts.map +1 -0
- package/dist/dialogs/navigable-info-dialog.d.ts.map +1 -1
- package/dist/dialogs/version-info-dialog.d.ts +18 -2
- package/dist/dialogs/version-info-dialog.d.ts.map +1 -1
- package/dist/{events-B_ZxkU_G.js → events-BAE5R6TH.js} +1 -1
- package/dist/{events-B_ZxkU_G.js.map → events-BAE5R6TH.js.map} +1 -1
- package/dist/{extensions.de-Ct1DIybE.js → extensions.de-O6Sx3_t4.js} +1 -1
- package/dist/{extensions.de-Ct1DIybE.js.map → extensions.de-O6Sx3_t4.js.map} +1 -1
- package/dist/{extensions.en-DRPFtVHT.js → extensions.en-fwqJr8P-.js} +1 -1
- package/dist/{extensions.en-DRPFtVHT.js.map → extensions.en-fwqJr8P-.js.map} +1 -1
- package/dist/externals/lit.js +1 -1
- package/dist/externals/third-party.js.map +1 -1
- package/dist/externals/webawesome.js +1 -1
- package/dist/{fastviews.de-BFxFslBz.js → fastviews.de-C-B48vwv.js} +1 -1
- package/dist/fastviews.de-C-B48vwv.js.map +1 -0
- package/dist/{fastviews.en-Cb4J_JXL.js → fastviews.en-BlAxYlHD.js} +1 -1
- package/dist/fastviews.en-BlAxYlHD.js.map +1 -0
- package/dist/{filebrowser.de-GEf6Eilh.js → filebrowser.de-LWsrI9xj.js} +1 -1
- package/dist/{filebrowser.de-GEf6Eilh.js.map → filebrowser.de-LWsrI9xj.js.map} +1 -1
- package/dist/{filebrowser.en-o0Ad5f7Z.js → filebrowser.en-C02vpzAs.js} +1 -1
- package/dist/{filebrowser.en-o0Ad5f7Z.js.map → filebrowser.en-C02vpzAs.js.map} +1 -1
- package/dist/{fs-access-DTXPsV1W.js → fs-access-Cjcg0_Me.js} +27 -25
- package/dist/{fs-access-DTXPsV1W.js.map → fs-access-Cjcg0_Me.js.map} +1 -1
- package/dist/fs-access-Dp9Fwsxk.js +2 -0
- package/dist/index.js +7 -7
- package/dist/layouts/standard-layout.d.ts +9 -1
- package/dist/layouts/standard-layout.d.ts.map +1 -1
- package/dist/{logger-DT0_NW3S.js → logger-CiT0Cc4g.js} +1 -1
- package/dist/{logger-DT0_NW3S.js.map → logger-CiT0Cc4g.js.map} +1 -1
- package/dist/{logterminal.de-DKp940Ox.js → logterminal.de-BP1FuxHH.js} +1 -1
- package/dist/{logterminal.de-DKp940Ox.js.map → logterminal.de-BP1FuxHH.js.map} +1 -1
- package/dist/{logterminal.en-Ci2nm0b2.js → logterminal.en-BeDRvTvb.js} +1 -1
- package/dist/{logterminal.en-Ci2nm0b2.js.map → logterminal.en-BeDRvTvb.js.map} +1 -1
- package/dist/{partname.de-v76uEl0F.js → partname.de-C0I4Wf2X.js} +1 -1
- package/dist/{partname.de-v76uEl0F.js.map → partname.de-C0I4Wf2X.js.map} +1 -1
- package/dist/{partname.en-By5aAawT.js → partname.en-CIT8z3cY.js} +1 -1
- package/dist/{partname.en-By5aAawT.js.map → partname.en-CIT8z3cY.js.map} +1 -1
- package/dist/parts/contextmenu.d.ts.map +1 -1
- package/dist/parts/index.js +1 -1
- package/dist/parts/part.d.ts +2 -0
- package/dist/parts/part.d.ts.map +1 -1
- package/dist/parts/resizable-grid.d.ts +10 -3
- package/dist/parts/resizable-grid.d.ts.map +1 -1
- package/dist/parts/tabs.d.ts +6 -0
- package/dist/parts/tabs.d.ts.map +1 -1
- package/dist/{parts-CRVxaDd-.js → parts-DQRktiiR.js} +1086 -611
- package/dist/parts-DQRktiiR.js.map +1 -0
- package/dist/{tasks.de-y2xPmQ1k.js → tasks.de-DRvUVugd.js} +1 -1
- package/dist/{tasks.de-y2xPmQ1k.js.map → tasks.de-DRvUVugd.js.map} +1 -1
- package/dist/{tasks.en-BTbFrxJj.js → tasks.en-dRDildBd.js} +1 -1
- package/dist/{tasks.en-BTbFrxJj.js.map → tasks.en-dRDildBd.js.map} +1 -1
- package/dist/vite-plugin-app-splash.js.map +1 -1
- package/dist/vite-plugin-local-aliases.js +1 -1
- package/dist/vite-plugin-local-aliases.js.map +1 -1
- package/dist/vite-plugin-resolve-deps.d.ts +6 -3
- package/dist/vite-plugin-resolve-deps.d.ts.map +1 -1
- package/dist/vite-plugin-resolve-deps.js +17 -15
- package/dist/vite-plugin-resolve-deps.js.map +1 -1
- package/dist/{webawesome-Y1_HnKa_.js → webawesome-C0Da7hPu.js} +19 -11
- package/dist/webawesome-C0Da7hPu.js.map +1 -0
- package/dist/{widget-BqQtioK1.js → widget-DUR6wxME.js} +6 -5
- package/dist/{widget-BqQtioK1.js.map → widget-DUR6wxME.js.map} +1 -1
- package/dist/widgets/index.js +1 -1
- package/dist/{widgets-C9V42Mqq.js → widgets-A9XMOA_j.js} +2 -2
- package/dist/{widgets-C9V42Mqq.js.map → widgets-A9XMOA_j.js.map} +1 -1
- package/package.json +1 -1
- package/src/api/services.ts +12 -0
- package/src/components/attribution.ts +2 -0
- package/src/components/command.ts +2 -8
- package/src/components/extensions.ts +20 -3
- package/src/components/language-selector.ts +0 -1
- package/src/components/layout-switcher.ts +39 -26
- package/src/components/npm-packages.ts +2 -0
- package/src/components/release-history.ts +29 -40
- package/src/components/tasks.ts +0 -1
- package/src/contributions/default-layout-contributions.ts +7 -43
- package/src/contributions/default-ui-contributions.ts +4 -4
- package/src/core/apploader.ts +7 -54
- package/src/core/contribution-targets.ts +1 -0
- package/src/core/dialogservice.ts +76 -19
- package/src/core/dropdown-item.ts +52 -17
- package/src/core/extensionregistry.ts +1 -1
- package/src/core/layout-panels.ts +121 -0
- package/src/dialogs/navigable-info-dialog.ts +5 -2
- package/src/dialogs/version-info-dialog.ts +163 -21
- package/src/icons/icons.txt +4 -2
- package/src/icons/layout-standard-bottom-panel.svg +4 -4
- package/src/icons/layout-standard-full.svg +4 -4
- package/src/icons/layout-standard-left-aux.svg +8 -0
- package/src/icons/layout-standard-left-sidebar.svg +5 -0
- package/src/icons/layout-standard-right-aux.svg +8 -0
- package/src/icons/layout-standard-right-sidebar.svg +5 -0
- package/src/layouts/standard-layout.ts +81 -5
- package/src/parts/contextmenu.ts +2 -1
- package/src/parts/part.ts +24 -0
- package/src/parts/resizable-grid.ts +125 -57
- package/src/parts/tabs.ts +103 -0
- package/src/vite-plugin-resolve-deps.ts +29 -25
- package/dist/api-Da9zQcfd.js.map +0 -1
- package/dist/fastviews.de-BFxFslBz.js.map +0 -1
- package/dist/fastviews.en-Cb4J_JXL.js.map +0 -1
- package/dist/fs-access-CzOh5ot8.js +0 -2
- package/dist/parts-CRVxaDd-.js.map +0 -1
- package/dist/webawesome-Y1_HnKa_.js.map +0 -1
- package/src/icons/layout-standard-bottom-sidebar.svg +0 -6
- package/src/icons/layout-standard.svg +0 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fs-access-DTXPsV1W.js","names":[],"sources":["../src/core/persistenceservice.ts","../src/core/filesys/common.ts","../src/core/filesys/fs-access.ts"],"sourcesContent":["import {rootContext} from \"./di\";\n\nconst DB_NAME = 'eclipse-docks-persistence';\nconst STORE_NAME = 'keyval';\nconst DB_VERSION = 1;\n\nlet dbPromise: Promise<IDBDatabase> | null = null;\n\nfunction getDB(): Promise<IDBDatabase> {\n if (!dbPromise) {\n dbPromise = new Promise((resolve, reject) => {\n const request = indexedDB.open(DB_NAME, DB_VERSION);\n request.onerror = () => reject(request.error);\n request.onsuccess = () => resolve(request.result);\n request.onupgradeneeded = (e) => {\n (e.target as IDBOpenDBRequest).result.createObjectStore(STORE_NAME);\n };\n });\n }\n return dbPromise;\n}\n\nexport class PersistenceService {\n /**\n * Persists a value under the given key. When value is null or undefined,\n * the entry for that key is removed (delete semantics).\n */\n async persistObject(key: string, value: unknown): Promise<void> {\n const db = await getDB();\n return new Promise((resolve, reject) => {\n const tx = db.transaction(STORE_NAME, 'readwrite');\n const store = tx.objectStore(STORE_NAME);\n const req =\n value === null || value === undefined\n ? store.delete(key)\n : store.put(value, key);\n req.onsuccess = () => resolve();\n req.onerror = () => reject(req.error);\n });\n }\n\n async getObject(key: string): Promise<any> {\n const db = await getDB();\n return new Promise((resolve, reject) => {\n const tx = db.transaction(STORE_NAME, 'readonly');\n const req = tx.objectStore(STORE_NAME).get(key);\n req.onsuccess = () => resolve(req.result);\n req.onerror = () => reject(req.error);\n });\n }\n}\n\nexport const persistenceService = new PersistenceService();\nrootContext.put(\"persistenceService\", persistenceService);\n","import { persistenceService } from \"../persistenceservice\";\nimport { publish } from \"../events\";\nimport { rootContext } from \"../di\";\nimport { createLogger } from \"../logger\";\n\nexport const TOPIC_WORKSPACE_CHANGED = \"events/filesys/workspaceChanged\"\nexport const TOPIC_WORKSPACE_CONNECTED = \"events/filesys/workspaceConnected\"\n\nconst logger = createLogger('WorkspaceService');\n\nexport abstract class Resource {\n public state: { [p: string]: any } = {};\n\n public abstract getName(): string;\n\n public abstract getParent(): Directory | undefined;\n\n public abstract delete(name?: string, recursive?: boolean): Promise<void>;\n\n public abstract copyTo(targetPath: string): Promise<void>;\n\n public abstract rename(newName: string): Promise<void>;\n\n public getWorkspacePath(): string {\n const paths: string[] = []\n let current: Resource | undefined = this\n let root: Directory | undefined\n while (current) {\n paths.push(current.getName())\n const parent = current.getParent()\n if (!parent) root = current as Directory\n current = parent\n }\n paths.reverse()\n const workspace = typeof workspaceService?.getWorkspaceSync === 'function' ? workspaceService.getWorkspaceSync() : undefined\n if (workspace && root && 'isDirectChild' in workspace && typeof (workspace as any).isDirectChild === 'function' && (workspace as any).isDirectChild(root)) {\n const folderName = (workspace as any).getFolderNameForDirectory(root)\n if (folderName && paths.length > 0) return paths.length > 1 ? folderName + '/' + paths.slice(1).join('/') : folderName\n }\n paths.shift()\n return paths.join(\"/\");\n }\n\n public getWorkspace(): Directory {\n let current: Resource | undefined = this\n while (current) {\n const parent: any = current.getParent()\n if (parent) {\n current = parent\n } else {\n break\n }\n }\n return current as Directory\n }\n}\n\nexport const resourceComparator = (c1: Resource, c2: Resource) => {\n if (c1 instanceof Directory && c2 instanceof File) {\n return -1\n }\n if (c1 instanceof File && c2 instanceof Directory) {\n return 1\n }\n return c1.getName().localeCompare(c2.getName())\n}\n\nexport enum FileContentType {\n TEXT, BINARY\n}\n\nexport enum FileContentEncoding {\n BASE64\n}\n\n/**\n * Options for reading file contents. Backend implementors are encouraged to\n * preserve MIME information when possible – for example, by returning the\n * native Blob from remote HTTP/WebDAV responses (via response.blob()) and\n * passing it through unchanged for { blob: true } / { uri: true } usages,\n * instead of recreating typeless Blobs from raw ArrayBuffers.\n */\nexport interface FileContentsOptions {\n contentType?: FileContentType;\n encoding?: FileContentEncoding;\n uri?: boolean;\n blob?: boolean;\n}\n\nexport interface GetResourceOptions {\n /**\n * When true, missing path segments MUST be created.\n *\n * Creation intent is encoded in the path:\n * - `path` without trailing slash => file intent for the last segment\n * - `path/` with trailing slash => directory intent for the last segment\n *\n * Backend implementations MUST preserve this behavior so callers (e.g. `mkdir`)\n * can force directory creation consistently across all backends.\n */\n create?: boolean\n}\n\nexport abstract class File extends Resource {\n public abstract getContents(options?: FileContentsOptions): Promise<any>;\n\n public abstract saveContents(contents: any, options?: FileContentsOptions): Promise<void>;\n\n public abstract size(): Promise<number | null>;\n}\n\nexport abstract class Directory extends Resource {\n public abstract listChildren(forceRefresh: boolean): Promise<Resource[]>;\n\n /**\n * Resolve a resource relative to this directory.\n *\n * Contract for backend implementations:\n * - Empty/invalid input should throw (or return null by backend convention).\n * - With `{ create: true }`, missing segments must be created.\n * - Trailing slash (`path.endsWith('/')`) means directory intent for final segment.\n * - No trailing slash means file intent for final segment when creation is needed.\n * - If the resolved/created resource type conflicts with intent, return null.\n * - If creation mutates workspace contents, publish `TOPIC_WORKSPACE_CHANGED`.\n */\n public abstract getResource(path: string, options?: GetResourceOptions): Promise<Resource | null>;\n\n public abstract touch(): void;\n}\n\nexport class StringFile extends File {\n private contents: string;\n private name: string;\n\n constructor(contents: string, name: string) {\n super();\n this.contents = contents\n this.name = name\n }\n\n async getContents(_options?: FileContentsOptions): Promise<any> {\n return this.contents\n }\n\n async saveContents(contents: any, _options?: FileContentsOptions): Promise<void> {\n this.contents = contents\n }\n\n async size(): Promise<number | null> {\n return this.contents.length || null;\n }\n\n async copyTo(_targetPath: string): Promise<void> {\n throw Error(`Not supported`);\n }\n\n delete(_name?: string, _recursive?: boolean): Promise<void> {\n throw Error(`Not supported`);\n }\n\n async rename(_newName: string): Promise<void> {\n throw Error(`Not supported`);\n }\n\n getName(): string {\n return this.name;\n }\n\n getParent(): Directory | undefined {\n return undefined;\n }\n}\n\nexport interface ResourceMap {\n [key: string]: Resource;\n}\n\n\nexport class CompositeDirectory extends Directory {\n private readonly entriesByName: Map<string, Directory>;\n\n constructor(\n directories: Directory[],\n private readonly displayName: string = '/'\n ) {\n super();\n this.entriesByName = new Map(directories.map(d => [d.getName(), d]));\n }\n\n getFolderNameForDirectory(dir: Directory): string | undefined {\n for (const [name, d] of this.entriesByName) {\n if (d === dir) return name;\n }\n return undefined;\n }\n\n isDirectChild(dir: Directory): boolean {\n return this.getFolderNameForDirectory(dir) !== undefined;\n }\n\n getName(): string {\n return this.displayName;\n }\n\n getParent(): Directory | undefined {\n return undefined;\n }\n\n async listChildren(_forceRefresh: boolean): Promise<Resource[]> {\n return Array.from(this.entriesByName.values());\n }\n\n async getResource(path: string, options?: GetResourceOptions): Promise<Resource | null> {\n const normalized = path?.replace(/^\\/+/, \"\").trim();\n if (!normalized) {\n return null;\n }\n const idx = normalized.indexOf('/');\n const folderName = idx >= 0 ? normalized.slice(0, idx).trim() : normalized.trim();\n const rest = idx >= 0 ? normalized.slice(idx + 1).trim() : '';\n const dir = this.entriesByName.get(folderName);\n if (!dir) {\n return null;\n }\n if (!rest) {\n return dir;\n }\n return dir.getResource(rest, options);\n }\n\n touch(): void {\n for (const dir of this.entriesByName.values()) {\n dir.touch();\n }\n }\n\n async delete(_name?: string, _recursive?: boolean): Promise<void> {\n throw new Error('Delete not supported on workspace root');\n }\n\n async copyTo(_targetPath: string): Promise<void> {\n throw new Error('Copy not supported on workspace root');\n }\n\n async rename(_newName: string): Promise<void> {\n throw new Error('Rename not supported on workspace root');\n }\n\n getFolderByName(name: string): Directory | undefined {\n return this.entriesByName.get(name);\n }\n}\n\n/**\n * Placeholder directory used when a persisted workspace folder references\n * a backend type for which no contribution is currently registered.\n *\n * This allows the UI to surface a metadata node instead of silently\n * dropping the folder, and it can be replaced later once the real\n * contribution is loaded.\n */\nexport class MissingContributionDirectory extends Directory {\n private readonly backendType: string;\n private readonly persistedData: any;\n private readonly name: string;\n\n constructor(options: { backendType: string; name: string; data: any }) {\n super();\n this.backendType = options.backendType;\n this.persistedData = options.data;\n this.name = options.name;\n }\n\n getName(): string {\n return this.name;\n }\n\n getParent(): Directory | undefined {\n return undefined;\n }\n\n async listChildren(_forceRefresh: boolean): Promise<Resource[]> {\n return [];\n }\n\n async getResource(_path: string, _options?: GetResourceOptions): Promise<Resource | null> {\n throw new Error(`Workspace backend \"${this.backendType}\" is not available in this environment.`);\n }\n\n touch(): void {\n // No-op: without a real backend there is nothing to refresh.\n }\n\n async delete(_name?: string, _recursive?: boolean): Promise<void> {\n throw new Error(`Cannot modify workspace folder for missing backend \"${this.backendType}\".`);\n }\n\n async copyTo(_targetPath: string): Promise<void> {\n throw new Error(`Cannot copy from workspace folder for missing backend \"${this.backendType}\".`);\n }\n\n async rename(_newName: string): Promise<void> {\n throw new Error(`Cannot rename workspace folder for missing backend \"${this.backendType}\".`);\n }\n}\n\nfunction workspaceFolderDisplayNameFromPersisted(folder: { type: string; data: any }): string {\n const fromData =\n folder.data && typeof folder.data === 'object' && (folder.data as { name?: string }).name;\n if (typeof fromData === 'string' && fromData.length > 0) {\n return fromData;\n }\n return folder.type;\n}\n\nfunction formatRestoreFailureReason(error: unknown): string {\n if (error instanceof Error && error.message.trim()) {\n return error.message;\n }\n return 'Could not connect to this workspace folder.';\n}\n\nconst RESTORE_RETURNED_NOTHING = 'Could not restore this workspace folder.';\n\n/**\n * Placeholder when a contribution exists but restore/connect cannot produce a usable root\n * (network, auth, invalid persisted data). Treated like {@link MissingContributionDirectory}\n * for late registration retries via {@link isWorkspaceFolderPlaceholder}.\n */\nexport class UnavailableWorkspaceFolderDirectory extends Directory {\n private readonly backendType: string;\n private readonly name: string;\n private readonly reason: string;\n\n constructor(options: { backendType: string; name: string; data: any; reason: string }) {\n super();\n this.backendType = options.backendType;\n this.name = options.name;\n this.reason = options.reason;\n }\n\n getFailureReason(): string {\n return this.reason;\n }\n\n getName(): string {\n return this.name;\n }\n\n getParent(): Directory | undefined {\n return undefined;\n }\n\n async listChildren(_forceRefresh: boolean): Promise<Resource[]> {\n return [];\n }\n\n async getResource(_path: string, _options?: GetResourceOptions): Promise<Resource | null> {\n throw new Error(\n `Workspace folder \"${this.name}\" (${this.backendType}) is unavailable: ${this.reason}`\n );\n }\n\n touch(): void {\n // No-op\n }\n\n async delete(_name?: string, _recursive?: boolean): Promise<void> {\n throw new Error(`Cannot modify unavailable workspace folder \"${this.name}\" (${this.backendType}).`);\n }\n\n async copyTo(_targetPath: string): Promise<void> {\n throw new Error(`Cannot copy from unavailable workspace folder \"${this.name}\" (${this.backendType}).`);\n }\n\n async rename(_newName: string): Promise<void> {\n throw new Error(`Cannot rename unavailable workspace folder \"${this.name}\" (${this.backendType}).`);\n }\n}\n\nexport function isWorkspaceFolderPlaceholder(directory: Directory): boolean {\n return (\n directory instanceof MissingContributionDirectory ||\n directory instanceof UnavailableWorkspaceFolderDirectory\n );\n}\n\n/**\n * Runs a contribution's restore; returns a real directory or an {@link UnavailableWorkspaceFolderDirectory}.\n * Invokes onCaughtError only when restore threw (not when it returned undefined).\n */\nasync function restorePersistedFolderToDirectory(\n type: string,\n data: any,\n restore: (data: any) => Promise<Directory | undefined>,\n onCaughtError?: (error: unknown) => void\n): Promise<Directory> {\n const displayName = workspaceFolderDisplayNameFromPersisted({ type, data });\n try {\n const dir = await restore(data);\n if (dir) {\n return dir;\n }\n return new UnavailableWorkspaceFolderDirectory({\n backendType: type,\n name: displayName,\n data,\n reason: RESTORE_RETURNED_NOTHING\n });\n } catch (error) {\n onCaughtError?.(error);\n return new UnavailableWorkspaceFolderDirectory({\n backendType: type,\n name: displayName,\n data,\n reason: formatRestoreFailureReason(error)\n });\n }\n}\n\nexport interface WorkspaceContribution {\n type: string;\n name: string;\n canHandle(input: any): boolean;\n connect(input: any): Promise<Directory>;\n restore?(data: any): Promise<Directory | undefined>;\n persist?(workspace: Directory): Promise<any>;\n}\n\ninterface PersistedWorkspaceData {\n type?: string;\n data?: any;\n folders?: Array<{ type: string; data: any }>;\n}\n\nconst LEGACY_WORKSPACE_KEY = \"workspace_data\";\n\nexport class WorkspaceService {\n private workspace?: Promise<Directory | undefined>;\n private _currentWorkspace: Directory | undefined = undefined;\n private folders: Array<{ type: string; data: any; directory: Directory }> = [];\n private currentType?: string;\n private contributions: Map<string, WorkspaceContribution> = new Map();\n private initPromise: Promise<void>;\n private restoredTypes: Set<string> = new Set();\n\n getWorkspaceSync(): Directory | undefined {\n return this._currentWorkspace;\n }\n\n constructor() {\n let resolveInit!: () => void;\n this.initPromise = new Promise<void>((resolve) => {\n resolveInit = resolve;\n });\n this.loadPersistedWorkspace(resolveInit);\n }\n\n registerContribution(contribution: WorkspaceContribution): void {\n this.contributions.set(contribution.type, contribution);\n void this.tryRestoreForContribution(contribution);\n }\n\n getContributions(): WorkspaceContribution[] {\n return Array.from(this.contributions.values());\n }\n\n private static readonly DEFAULT_INDEXEDDB_FOLDER_NAME = 'My Folder';\n\n private async tryRestoreForContribution(contribution: WorkspaceContribution): Promise<void> {\n await this.initPromise;\n\n if (this.restoredTypes.has(contribution.type)) {\n return;\n }\n\n const existingForType = this.folders.filter(f => f.type === contribution.type);\n const hasRealFoldersForType = existingForType.some(f => !isWorkspaceFolderPlaceholder(f.directory));\n if (hasRealFoldersForType) {\n this.restoredTypes.add(contribution.type);\n return;\n }\n\n const raw = await persistenceService.getObject(LEGACY_WORKSPACE_KEY) as PersistedWorkspaceData | null;\n if (!raw?.folders || !Array.isArray(raw.folders)) {\n this.restoredTypes.add(contribution.type);\n return;\n }\n\n const toRestore = raw.folders.filter(f => f.type === contribution.type);\n if (toRestore.length === 0) {\n this.restoredTypes.add(contribution.type);\n return;\n }\n\n // Remove any placeholder folders for this type; we'll replace them with\n // real directories if restoration succeeds.\n this.folders = this.folders.filter(\n f => !(f.type === contribution.type && isWorkspaceFolderPlaceholder(f.directory))\n );\n\n for (const folder of toRestore) {\n if (!contribution.restore) {\n continue;\n }\n\n const directory = await restorePersistedFolderToDirectory(\n contribution.type,\n folder.data,\n contribution.restore,\n (error) =>\n logger.warn(\n `Failed to restore folder (${contribution.type}) on contribution registration:`,\n error\n )\n );\n this.folders.push({ type: contribution.type, data: folder.data, directory });\n }\n\n if (this.folders.length === 0) {\n this.restoredTypes.add(contribution.type);\n return;\n }\n\n const composite = this.buildComposite();\n this.workspace = Promise.resolve(composite);\n this._currentWorkspace = composite ?? undefined;\n await this.persistFolders();\n if (composite) {\n publish(TOPIC_WORKSPACE_CONNECTED, composite);\n logger.debug(`Workspace folders restored for contribution type: ${contribution.type}`);\n }\n\n this.restoredTypes.add(contribution.type);\n }\n\n private async loadPersistedWorkspace(resolveInit: () => void): Promise<void> {\n logger.debug('Restoring workspace from persistence');\n try {\n const raw = await persistenceService.getObject(LEGACY_WORKSPACE_KEY) as PersistedWorkspaceData | null;\n if (!raw) {\n this.workspace = Promise.resolve(undefined);\n this._currentWorkspace = undefined;\n }\n\n if (raw?.folders && Array.isArray(raw.folders) && raw.folders.length > 0) {\n const normalized = raw.folders.map((f: { type: string; data: any }) => ({ type: f.type, data: f.data }));\n await this.resolveFolders(normalized);\n const composite = this.buildComposite();\n this.workspace = Promise.resolve(composite);\n this._currentWorkspace = composite ?? undefined;\n if (composite) {\n publish(TOPIC_WORKSPACE_CONNECTED, composite);\n logger.debug('Workspace restored from persisted folders');\n }\n resolveInit();\n return;\n }\n\n if (raw && raw.type && raw.data !== undefined) {\n const contribution = this.contributions.get(raw.type);\n if (contribution?.restore) {\n try {\n const dir = await contribution.restore!(raw.data);\n if (dir) {\n this.folders = [{ type: raw.type, data: raw.data, directory: dir }];\n const comp = this.buildComposite();\n this.workspace = Promise.resolve(comp);\n this._currentWorkspace = comp ?? undefined;\n this.currentType = raw.type;\n await this.persistFolders();\n publish(TOPIC_WORKSPACE_CONNECTED, comp);\n logger.debug('Workspace restored from legacy format');\n }\n } catch (error) {\n logger.error('Failed to restore legacy workspace:', error);\n }\n }\n }\n if (!this.workspace) {\n this.workspace = Promise.resolve(undefined);\n this._currentWorkspace = undefined;\n }\n\n resolveInit();\n } finally {\n if (this.folders.length === 0) {\n try {\n await this.connectFolder({ indexeddb: true, name: WorkspaceService.DEFAULT_INDEXEDDB_FOLDER_NAME });\n logger.debug('Connected default IndexedDB workspace');\n } catch (e) {\n logger.warn('Failed to connect default IndexedDB folder', e);\n }\n }\n }\n }\n\n private async resolveFolders(persisted: Array<{ type: string; data: any }>): Promise<void> {\n this.folders = [];\n for (const folder of persisted) {\n const contribution = this.contributions.get(folder.type);\n if (!contribution?.restore) {\n const displayName =\n (folder.data && typeof folder.data === 'object' && (folder.data as any).name) ||\n `${folder.type} (missing)`;\n const placeholder = new MissingContributionDirectory({\n backendType: folder.type,\n name: displayName,\n data: folder.data\n });\n this.folders.push({ type: folder.type, data: folder.data, directory: placeholder });\n continue;\n }\n const directory = await restorePersistedFolderToDirectory(\n folder.type,\n folder.data,\n contribution.restore,\n (error) => logger.warn(`Failed to restore folder (${folder.type}):`, error)\n );\n this.folders.push({ type: folder.type, data: folder.data, directory });\n }\n }\n\n private buildComposite(): CompositeDirectory | undefined {\n if (this.folders.length === 0) {\n return undefined;\n }\n return new CompositeDirectory(this.folders.map(f => f.directory));\n }\n\n private async persistFolders(): Promise<void> {\n const toPersist = this.folders.length > 0\n ? { folders: this.folders.map(f => ({ type: f.type, data: f.data })) }\n : null;\n await persistenceService.persistObject(LEGACY_WORKSPACE_KEY, toPersist);\n await persistenceService.persistObject(\"workspace\", null);\n logger.debug(`Persisted ${this.folders.length} folder(s)`);\n }\n\n async getFolders(): Promise<Array<{ name: string; type: string }>> {\n await this.initPromise;\n return this.folders.map(f => ({ name: f.directory.getName(), type: f.type }));\n }\n\n async getFolderInfoForDirectory(directory: Directory): Promise<{ name: string; type: string; backendName: string } | undefined> {\n await this.initPromise;\n const folder = this.folders.find(f => f.directory === directory);\n if (!folder) {\n return undefined;\n }\n const name =\n (folder.data && typeof folder.data === 'object' && (folder.data as any).name) ||\n folder.directory.getName();\n const contribution = this.contributions.get(folder.type);\n const backendName = contribution?.name ?? folder.type;\n return { name, type: folder.type, backendName };\n }\n\n /**\n * Whether {@link resource} still belongs to the current workspace (walks up to the backend root).\n * After {@link disconnectFolder}, the root is no longer listed, so in-flight listChildren errors can be ignored.\n */\n async isResourceInCurrentWorkspace(resource: Resource): Promise<boolean> {\n await this.initPromise;\n let current: Resource | undefined = resource;\n while (current) {\n const parent = current.getParent();\n if (!parent) {\n if (!(current instanceof Directory)) {\n return false;\n }\n return this.folders.some(f => f.directory === current);\n }\n current = parent;\n }\n return false;\n }\n\n /**\n * Update persisted metadata for a workspace root directory.\n * Currently used to keep display names of roots (e.g. IndexedDB) in sync\n * with their in-memory Directory instances.\n */\n async updateFolderName(directory: Directory, name: string): Promise<void> {\n await this.initPromise;\n const folder = this.folders.find(f => f.directory === directory);\n if (!folder) {\n return;\n }\n if (folder.data && typeof folder.data === 'object') {\n folder.data = { ...(folder.data as any), name };\n } else {\n folder.data = { name };\n }\n await this.persistFolders();\n const composite = this.buildComposite();\n this.workspace = Promise.resolve(composite);\n this._currentWorkspace = composite ?? undefined;\n publish(TOPIC_WORKSPACE_CONNECTED, composite);\n logger.debug(`Updated folder name: ${name}`);\n }\n\n async connectFolder(input: any): Promise<Directory> {\n await this.initPromise;\n const contribution = Array.from(this.contributions.values()).find(c => c.canHandle(input));\n if (!contribution) {\n throw new Error('No workspace contribution can handle this input');\n }\n const name = (input?.name as string) ?? contribution.type;\n logger.debug(`Connecting workspace: ${contribution.type}, ${name}`);\n const directory = await contribution.connect(input);\n const data = contribution.persist ? await contribution.persist(directory) : input;\n this.folders.push({ type: contribution.type, data, directory });\n await this.persistFolders();\n this.currentType = this.folders.length === 1 ? contribution.type : undefined;\n const composite = this.buildComposite()!;\n this.workspace = Promise.resolve(composite);\n this._currentWorkspace = composite;\n publish(TOPIC_WORKSPACE_CONNECTED, composite);\n const displayName = directory.getName();\n logger.info(`Workspace connected: ${contribution.type} (${displayName})`);\n return composite;\n }\n\n async disconnectFolder(directory: Directory): Promise<void> {\n await this.initPromise;\n const idx = this.folders.findIndex(f => f.directory === directory);\n if (idx < 0) {\n return;\n }\n const folder = this.folders[idx];\n logger.debug(`Disconnecting folder: ${folder.directory.getName()} (${folder.type})`);\n this.folders.splice(idx, 1);\n await this.persistFolders();\n if (this.folders.length > 0) {\n this.currentType = this.folders[0].type;\n } else {\n this.currentType = undefined;\n logger.info('Workspace disconnected');\n }\n const composite = this.buildComposite();\n this.workspace = Promise.resolve(composite);\n this._currentWorkspace = composite ?? undefined;\n publish(TOPIC_WORKSPACE_CONNECTED, composite);\n }\n\n async connectWorkspace(input: any): Promise<Directory> {\n return this.connectFolder(input);\n }\n\n public async getWorkspace(): Promise<Directory | undefined> {\n await this.initPromise;\n if (!this.workspace) {\n throw new Error('No workspace connected.');\n }\n return await this.workspace;\n }\n\n public isConnected(): boolean {\n return this.folders.length > 0;\n }\n\n public getWorkspaceType(): string | undefined {\n return this.currentType;\n }\n\n public async disconnectWorkspace(): Promise<void> {\n await this.initPromise;\n this.workspace = Promise.resolve(undefined);\n this._currentWorkspace = undefined;\n this.folders = [];\n this.currentType = undefined;\n await this.persistFolders();\n publish(TOPIC_WORKSPACE_CONNECTED, undefined as any);\n logger.info('Workspace disconnected');\n }\n\n /**\n * Copy (and optionally move) a resource into a target directory within the\n * current workspace. This helper is connection-agnostic: it always resolves\n * paths via the composite workspace root so it can copy across different\n * backend folders.\n */\n public async copyResource(\n src: Resource,\n destDir: Directory,\n options?: { move?: boolean; newName?: string }\n ): Promise<void> {\n await this.initPromise;\n const workspace = this._currentWorkspace;\n if (!workspace) {\n throw new Error('No workspace connected.');\n }\n\n const targetName = options?.newName ?? src.getName();\n const destDirPath = destDir.getWorkspacePath();\n const targetBasePath = destDirPath ? `${destDirPath}/${targetName}` : targetName;\n\n const copyFileToPath = async (file: File, targetPath: string): Promise<void> => {\n const contents = await file.getContents({ blob: true });\n const targetFile = await workspace.getResource(targetPath, { create: true }) as File | null;\n if (!targetFile) {\n throw new Error(`Failed to create target file: ${targetPath}`);\n }\n await targetFile.saveContents(contents);\n };\n\n const copyDirectoryToPath = async (dir: Directory, targetPath: string): Promise<void> => {\n for (const child of await dir.listChildren(false)) {\n const childTargetPath = `${targetPath}/${child.getName()}`;\n if (child instanceof File) {\n await copyFileToPath(child, childTargetPath);\n } else if (child instanceof Directory) {\n await copyDirectoryToPath(child, childTargetPath);\n }\n }\n };\n\n if (src instanceof File) {\n await copyFileToPath(src, targetBasePath);\n } else if (src instanceof Directory) {\n await copyDirectoryToPath(src, targetBasePath);\n } else {\n throw new Error('Unsupported resource type for copy operation.');\n }\n\n if (options?.move) {\n await src.delete(undefined, true);\n }\n }\n}\n\nexport const workspaceService = new WorkspaceService();\nrootContext.put(\"workspaceService\", workspaceService);\n\n\n","import { publish } from \"../events\";\nimport {\n File,\n Directory,\n FileContentType,\n FileContentEncoding,\n type FileContentsOptions,\n type GetResourceOptions,\n type Resource,\n type ResourceMap,\n TOPIC_WORKSPACE_CHANGED,\n workspaceService,\n} from \"./common\";\n\nexport class FileSysFileHandleResource extends File {\n private fileHandle: FileSystemFileHandle;\n private parent: Directory;\n\n constructor(fileHandle: FileSystemFileHandle, parent: Directory) {\n super();\n this.fileHandle = fileHandle;\n this.parent = parent;\n }\n\n getName(): string {\n return this.fileHandle.name;\n }\n\n getParent(): Directory {\n return this.parent;\n }\n\n async delete() {\n return this.getParent().delete(this.getName());\n }\n\n async getContents(options?: FileContentsOptions): Promise<any> {\n const file = await this.fileHandle.getFile();\n\n if (!options || options?.contentType == FileContentType.TEXT) {\n return await file.text();\n }\n\n if (options?.encoding == FileContentEncoding.BASE64 || options?.uri) {\n return URL.createObjectURL(file);\n }\n\n if (options?.blob) {\n return file;\n }\n\n return file.stream();\n }\n\n async size(): Promise<number | null> {\n try {\n const file = await this.fileHandle.getFile();\n return file.size;\n } catch {\n return null;\n }\n }\n\n async saveContents(contents: any, _options?: FileContentsOptions): Promise<void> {\n const writable = await this.fileHandle.createWritable();\n\n if (contents && typeof contents.pipeTo === 'function') {\n await contents.pipeTo(writable);\n } else {\n const writer = writable.getWriter();\n try {\n await writer.write(contents);\n } finally {\n await writer.close();\n }\n }\n publish(TOPIC_WORKSPACE_CHANGED, workspaceService.getWorkspaceSync() ?? this.getWorkspace());\n }\n\n async copyTo(targetPath: string): Promise<void> {\n const contents = await this.getContents({ blob: true });\n const targetFile = await this.getWorkspace().getResource(targetPath, { create: true }) as File;\n await targetFile.saveContents(contents);\n }\n\n async rename(newName: string): Promise<void> {\n const parent = this.getParent() as FileSysDirHandleResource;\n if (!parent) {\n throw new Error('Cannot rename root resource');\n }\n\n if (this.getName() === newName) {\n return;\n }\n\n if (!('move' in this.fileHandle) || typeof (this.fileHandle as any).move !== 'function') {\n throw new Error('File rename not supported in this browser. Please use a browser with File System Access API move() support.');\n }\n\n try {\n await (this.fileHandle as any).move(newName);\n } catch (error: any) {\n if (error.name === 'NotAllowedError' ||\n error.message?.includes('not allowed') ||\n error.message?.includes('user agent')) {\n throw new Error('File rename failed: The operation took too long and user activation expired. Please try again.');\n }\n throw error;\n }\n\n await parent.listChildren(true);\n publish(TOPIC_WORKSPACE_CHANGED, workspaceService.getWorkspaceSync() ?? this.getWorkspace());\n }\n}\n\nexport class FileSysDirHandleResource extends Directory {\n private dirHandle: FileSystemDirectoryHandle;\n private files?: ResourceMap;\n private parent?: Directory;\n private loadingPromise?: Promise<Resource[]>;\n\n constructor(dirHandle: FileSystemDirectoryHandle, parent?: Directory) {\n super();\n this.dirHandle = dirHandle;\n this.parent = parent;\n }\n\n getHandle() {\n return this.dirHandle;\n }\n\n getParent(): Directory | undefined {\n return this.parent;\n }\n\n getName(): string {\n return this.dirHandle.name;\n }\n\n async listChildren(forceRefresh: boolean = false): Promise<Resource[]> {\n if (forceRefresh || !this.files) {\n if (this.loadingPromise) {\n return this.loadingPromise;\n }\n\n this.loadingPromise = (async () => {\n try {\n const files: ResourceMap = {};\n\n try {\n // @ts-ignore -- TS 6 lib.dom provides `values()` via merged FileSystemDirectoryHandle declarations;\n // IDE/lint can miss the merge and falsely report it missing while tsc is correct.\n for await (const entry of this.dirHandle.values()) {\n const child =\n entry.kind === \"file\"\n ? new FileSysFileHandleResource(entry, this)\n : new FileSysDirHandleResource(entry, this);\n files[child.getName()] = child;\n }\n } catch (error: any) {\n if (error.name === 'NotFoundError') {\n this.files = {};\n return [];\n }\n throw error;\n }\n\n this.files = files;\n return Object.values(this.files);\n } finally {\n this.loadingPromise = undefined;\n }\n })();\n\n return this.loadingPromise;\n }\n return Object.values(this.files);\n }\n\n async getResource(path: string, options?: GetResourceOptions): Promise<Resource | null> {\n if (!path) {\n throw new Error(\"No path provided\");\n }\n const segments = path.split(\"/\").filter(s => s.trim());\n let currentResource: Resource = this;\n let workspaceChanged = false;\n try {\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i].trim();\n if (currentResource instanceof FileSysDirHandleResource) {\n await currentResource.listChildren();\n if (!currentResource.files) {\n return null;\n }\n const next = currentResource.files[segment];\n if (!next) {\n if (options?.create) {\n workspaceChanged = true;\n if (i < segments.length - 1) {\n try {\n const newDirHandle = await currentResource.dirHandle.getDirectoryHandle(segment, { create: true });\n const nextResource = new FileSysDirHandleResource(newDirHandle, currentResource);\n currentResource.files[segment] = nextResource;\n currentResource = nextResource;\n if (currentResource instanceof FileSysDirHandleResource) {\n await currentResource.listChildren();\n }\n continue;\n } catch (error: any) {\n if (error.name === 'NotFoundError') {\n throw new Error(`Directory not found or not accessible: ${segments.slice(0, i + 1).join('/')}`);\n }\n throw error;\n }\n } else {\n try {\n const newFileHandle = await currentResource.dirHandle.getFileHandle(segment, { create: true });\n const nextResource = new FileSysFileHandleResource(newFileHandle, currentResource);\n currentResource.files[segment] = nextResource;\n return nextResource;\n } catch (error: any) {\n if (error.name === 'NotFoundError') {\n throw new Error(`File not found or not accessible: ${segments.join('/')}`);\n }\n throw error;\n }\n }\n } else {\n return null;\n }\n } else {\n currentResource = next;\n }\n } else {\n return null;\n }\n }\n } finally {\n if (workspaceChanged) {\n publish(TOPIC_WORKSPACE_CHANGED, workspaceService.getWorkspaceSync() ?? this.getWorkspace());\n }\n }\n return currentResource;\n }\n\n public touch() {\n publish(TOPIC_WORKSPACE_CHANGED, workspaceService.getWorkspaceSync() ?? this.getWorkspace());\n }\n\n async delete(name?: string, recursive: boolean = true) {\n if (!name) {\n const parent = this.getParent();\n if (parent instanceof FileSysDirHandleResource) {\n await parent.listChildren();\n if (parent.files) {\n delete parent.files[this.getName()];\n }\n }\n this.files = undefined;\n this.loadingPromise = undefined;\n return parent?.delete(this.getName());\n }\n return this.dirHandle.removeEntry(name, {\n recursive: recursive\n }).then(async () => {\n if (this.files) {\n delete this.files[name];\n }\n publish(TOPIC_WORKSPACE_CHANGED, workspaceService.getWorkspaceSync() ?? this.getWorkspace());\n });\n }\n\n async copyTo(targetPath: string) {\n for (const resource of (await this.listChildren())) {\n const targetResourceName = [targetPath, resource.getName()].join(\"/\");\n await resource.copyTo(targetResourceName);\n }\n }\n\n async rename(newName: string): Promise<void> {\n const parent = this.getParent() as FileSysDirHandleResource;\n if (!parent) {\n throw new Error('Cannot rename workspace root');\n }\n\n if (this.getName() === newName) {\n return;\n }\n\n if (!('move' in this.dirHandle) || typeof (this.dirHandle as any).move !== 'function') {\n throw new Error('Directory rename not supported in this browser. Please use a browser with File System Access API move() support.');\n }\n\n try {\n await (this.dirHandle as any).move(newName);\n } catch (error: any) {\n if (error.name === 'NotAllowedError' ||\n error.message?.includes('not allowed') ||\n error.message?.includes('user agent')) {\n throw new Error('Directory rename failed: The operation took too long and user activation expired. Please try again.');\n }\n throw error;\n }\n\n await parent.listChildren(true);\n publish(TOPIC_WORKSPACE_CHANGED, workspaceService.getWorkspaceSync() ?? this.getWorkspace());\n }\n}\n\n// Register default filesystem contribution\nworkspaceService.registerContribution({\n type: 'filesystem',\n name: 'fs',\n\n canHandle(input: any): boolean {\n return input && 'kind' in input && input.kind === 'directory';\n },\n\n async connect(input: FileSystemDirectoryHandle): Promise<Directory> {\n return new FileSysDirHandleResource(input);\n },\n\n async restore(data: any): Promise<Directory | undefined> {\n if (data && 'kind' in data && data.kind === 'directory') {\n return new FileSysDirHandleResource(data, undefined);\n }\n return undefined;\n },\n\n async persist(workspace: Directory): Promise<any> {\n if (workspace instanceof FileSysDirHandleResource) {\n return workspace.getHandle();\n }\n return null;\n }\n});\n\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fs-access-Cjcg0_Me.js","names":[],"sources":["../src/core/persistenceservice.ts","../src/core/filesys/common.ts","../src/core/filesys/fs-access.ts"],"sourcesContent":["import {rootContext} from \"./di\";\n\nconst DB_NAME = 'eclipse-docks-persistence';\nconst STORE_NAME = 'keyval';\nconst DB_VERSION = 1;\n\nlet dbPromise: Promise<IDBDatabase> | null = null;\n\nfunction getDB(): Promise<IDBDatabase> {\n if (!dbPromise) {\n dbPromise = new Promise((resolve, reject) => {\n const request = indexedDB.open(DB_NAME, DB_VERSION);\n request.onerror = () => reject(request.error);\n request.onsuccess = () => resolve(request.result);\n request.onupgradeneeded = (e) => {\n (e.target as IDBOpenDBRequest).result.createObjectStore(STORE_NAME);\n };\n });\n }\n return dbPromise;\n}\n\nexport class PersistenceService {\n /**\n * Persists a value under the given key. When value is null or undefined,\n * the entry for that key is removed (delete semantics).\n */\n async persistObject(key: string, value: unknown): Promise<void> {\n const db = await getDB();\n return new Promise((resolve, reject) => {\n const tx = db.transaction(STORE_NAME, 'readwrite');\n const store = tx.objectStore(STORE_NAME);\n const req =\n value === null || value === undefined\n ? store.delete(key)\n : store.put(value, key);\n req.onsuccess = () => resolve();\n req.onerror = () => reject(req.error);\n });\n }\n\n async getObject(key: string): Promise<any> {\n const db = await getDB();\n return new Promise((resolve, reject) => {\n const tx = db.transaction(STORE_NAME, 'readonly');\n const req = tx.objectStore(STORE_NAME).get(key);\n req.onsuccess = () => resolve(req.result);\n req.onerror = () => reject(req.error);\n });\n }\n}\n\nexport const persistenceService = new PersistenceService();\nrootContext.put(\"persistenceService\", persistenceService);\n","import { persistenceService } from \"../persistenceservice\";\nimport { publish } from \"../events\";\nimport { rootContext } from \"../di\";\nimport { createLogger } from \"../logger\";\n\nexport const TOPIC_WORKSPACE_CHANGED = \"events/filesys/workspaceChanged\"\nexport const TOPIC_WORKSPACE_CONNECTED = \"events/filesys/workspaceConnected\"\n\nconst logger = createLogger('WorkspaceService');\n\nexport abstract class Resource {\n public state: { [p: string]: any } = {};\n\n public abstract getName(): string;\n\n public abstract getParent(): Directory | undefined;\n\n public abstract delete(name?: string, recursive?: boolean): Promise<void>;\n\n public abstract copyTo(targetPath: string): Promise<void>;\n\n public abstract rename(newName: string): Promise<void>;\n\n public getWorkspacePath(): string {\n const paths: string[] = []\n let current: Resource | undefined = this\n let root: Directory | undefined\n while (current) {\n paths.push(current.getName())\n const parent = current.getParent()\n if (!parent) root = current as Directory\n current = parent\n }\n paths.reverse()\n const workspace = typeof workspaceService?.getWorkspaceSync === 'function' ? workspaceService.getWorkspaceSync() : undefined\n if (workspace && root && 'isDirectChild' in workspace && typeof (workspace as any).isDirectChild === 'function' && (workspace as any).isDirectChild(root)) {\n const folderName = (workspace as any).getFolderNameForDirectory(root)\n if (folderName && paths.length > 0) return paths.length > 1 ? folderName + '/' + paths.slice(1).join('/') : folderName\n }\n paths.shift()\n return paths.join(\"/\");\n }\n\n public getWorkspace(): Directory {\n let current: Resource | undefined = this\n while (current) {\n const parent: any = current.getParent()\n if (parent) {\n current = parent\n } else {\n break\n }\n }\n return current as Directory\n }\n}\n\nexport const resourceComparator = (c1: Resource, c2: Resource) => {\n if (c1 instanceof Directory && c2 instanceof File) {\n return -1\n }\n if (c1 instanceof File && c2 instanceof Directory) {\n return 1\n }\n return c1.getName().localeCompare(c2.getName())\n}\n\nexport enum FileContentType {\n TEXT, BINARY\n}\n\nexport enum FileContentEncoding {\n BASE64\n}\n\n/**\n * Options for reading file contents. Backend implementors are encouraged to\n * preserve MIME information when possible – for example, by returning the\n * native Blob from remote HTTP/WebDAV responses (via response.blob()) and\n * passing it through unchanged for { blob: true } / { uri: true } usages,\n * instead of recreating typeless Blobs from raw ArrayBuffers.\n */\nexport interface FileContentsOptions {\n contentType?: FileContentType;\n encoding?: FileContentEncoding;\n uri?: boolean;\n blob?: boolean;\n}\n\nexport interface GetResourceOptions {\n /**\n * When true, missing path segments MUST be created.\n *\n * Creation intent is encoded in the path:\n * - `path` without trailing slash => file intent for the last segment\n * - `path/` with trailing slash => directory intent for the last segment\n *\n * Backend implementations MUST preserve this behavior so callers (e.g. `mkdir`)\n * can force directory creation consistently across all backends.\n */\n create?: boolean\n}\n\nexport abstract class File extends Resource {\n public abstract getContents(options?: FileContentsOptions): Promise<any>;\n\n public abstract saveContents(contents: any, options?: FileContentsOptions): Promise<void>;\n\n public abstract size(): Promise<number | null>;\n}\n\nexport abstract class Directory extends Resource {\n public abstract listChildren(forceRefresh: boolean): Promise<Resource[]>;\n\n /**\n * Resolve a resource relative to this directory.\n *\n * Contract for backend implementations:\n * - Empty/invalid input should throw (or return null by backend convention).\n * - With `{ create: true }`, missing segments must be created.\n * - Trailing slash (`path.endsWith('/')`) means directory intent for final segment.\n * - No trailing slash means file intent for final segment when creation is needed.\n * - If the resolved/created resource type conflicts with intent, return null.\n * - If creation mutates workspace contents, publish `TOPIC_WORKSPACE_CHANGED`.\n */\n public abstract getResource(path: string, options?: GetResourceOptions): Promise<Resource | null>;\n\n public abstract touch(): void;\n}\n\nexport class StringFile extends File {\n private contents: string;\n private name: string;\n\n constructor(contents: string, name: string) {\n super();\n this.contents = contents\n this.name = name\n }\n\n async getContents(_options?: FileContentsOptions): Promise<any> {\n return this.contents\n }\n\n async saveContents(contents: any, _options?: FileContentsOptions): Promise<void> {\n this.contents = contents\n }\n\n async size(): Promise<number | null> {\n return this.contents.length || null;\n }\n\n async copyTo(_targetPath: string): Promise<void> {\n throw Error(`Not supported`);\n }\n\n delete(_name?: string, _recursive?: boolean): Promise<void> {\n throw Error(`Not supported`);\n }\n\n async rename(_newName: string): Promise<void> {\n throw Error(`Not supported`);\n }\n\n getName(): string {\n return this.name;\n }\n\n getParent(): Directory | undefined {\n return undefined;\n }\n}\n\nexport interface ResourceMap {\n [key: string]: Resource;\n}\n\n\nexport class CompositeDirectory extends Directory {\n private readonly entriesByName: Map<string, Directory>;\n\n constructor(\n directories: Directory[],\n private readonly displayName: string = '/'\n ) {\n super();\n this.entriesByName = new Map(directories.map(d => [d.getName(), d]));\n }\n\n getFolderNameForDirectory(dir: Directory): string | undefined {\n for (const [name, d] of this.entriesByName) {\n if (d === dir) return name;\n }\n return undefined;\n }\n\n isDirectChild(dir: Directory): boolean {\n return this.getFolderNameForDirectory(dir) !== undefined;\n }\n\n getName(): string {\n return this.displayName;\n }\n\n getParent(): Directory | undefined {\n return undefined;\n }\n\n async listChildren(_forceRefresh: boolean): Promise<Resource[]> {\n return Array.from(this.entriesByName.values());\n }\n\n async getResource(path: string, options?: GetResourceOptions): Promise<Resource | null> {\n const normalized = path?.replace(/^\\/+/, \"\").trim();\n if (!normalized) {\n return null;\n }\n const idx = normalized.indexOf('/');\n const folderName = idx >= 0 ? normalized.slice(0, idx).trim() : normalized.trim();\n const rest = idx >= 0 ? normalized.slice(idx + 1).trim() : '';\n const dir = this.entriesByName.get(folderName);\n if (!dir) {\n return null;\n }\n if (!rest) {\n return dir;\n }\n return dir.getResource(rest, options);\n }\n\n touch(): void {\n for (const dir of this.entriesByName.values()) {\n dir.touch();\n }\n }\n\n async delete(_name?: string, _recursive?: boolean): Promise<void> {\n throw new Error('Delete not supported on workspace root');\n }\n\n async copyTo(_targetPath: string): Promise<void> {\n throw new Error('Copy not supported on workspace root');\n }\n\n async rename(_newName: string): Promise<void> {\n throw new Error('Rename not supported on workspace root');\n }\n\n getFolderByName(name: string): Directory | undefined {\n return this.entriesByName.get(name);\n }\n}\n\n/**\n * Placeholder directory used when a persisted workspace folder references\n * a backend type for which no contribution is currently registered.\n *\n * This allows the UI to surface a metadata node instead of silently\n * dropping the folder, and it can be replaced later once the real\n * contribution is loaded.\n */\nexport class MissingContributionDirectory extends Directory {\n private readonly backendType: string;\n private readonly persistedData: any;\n private readonly name: string;\n\n constructor(options: { backendType: string; name: string; data: any }) {\n super();\n this.backendType = options.backendType;\n this.persistedData = options.data;\n this.name = options.name;\n }\n\n getName(): string {\n return this.name;\n }\n\n getParent(): Directory | undefined {\n return undefined;\n }\n\n async listChildren(_forceRefresh: boolean): Promise<Resource[]> {\n return [];\n }\n\n async getResource(_path: string, _options?: GetResourceOptions): Promise<Resource | null> {\n throw new Error(`Workspace backend \"${this.backendType}\" is not available in this environment.`);\n }\n\n touch(): void {\n // No-op: without a real backend there is nothing to refresh.\n }\n\n async delete(_name?: string, _recursive?: boolean): Promise<void> {\n throw new Error(`Cannot modify workspace folder for missing backend \"${this.backendType}\".`);\n }\n\n async copyTo(_targetPath: string): Promise<void> {\n throw new Error(`Cannot copy from workspace folder for missing backend \"${this.backendType}\".`);\n }\n\n async rename(_newName: string): Promise<void> {\n throw new Error(`Cannot rename workspace folder for missing backend \"${this.backendType}\".`);\n }\n}\n\nfunction workspaceFolderDisplayNameFromPersisted(folder: { type: string; data: any }): string {\n const fromData =\n folder.data && typeof folder.data === 'object' && (folder.data as { name?: string }).name;\n if (typeof fromData === 'string' && fromData.length > 0) {\n return fromData;\n }\n return folder.type;\n}\n\nfunction formatRestoreFailureReason(error: unknown): string {\n if (error instanceof Error && error.message.trim()) {\n return error.message;\n }\n return 'Could not connect to this workspace folder.';\n}\n\nconst RESTORE_RETURNED_NOTHING = 'Could not restore this workspace folder.';\n\n/**\n * Placeholder when a contribution exists but restore/connect cannot produce a usable root\n * (network, auth, invalid persisted data). Treated like {@link MissingContributionDirectory}\n * for late registration retries via {@link isWorkspaceFolderPlaceholder}.\n */\nexport class UnavailableWorkspaceFolderDirectory extends Directory {\n private readonly backendType: string;\n private readonly name: string;\n private readonly reason: string;\n\n constructor(options: { backendType: string; name: string; data: any; reason: string }) {\n super();\n this.backendType = options.backendType;\n this.name = options.name;\n this.reason = options.reason;\n }\n\n getFailureReason(): string {\n return this.reason;\n }\n\n getName(): string {\n return this.name;\n }\n\n getParent(): Directory | undefined {\n return undefined;\n }\n\n async listChildren(_forceRefresh: boolean): Promise<Resource[]> {\n return [];\n }\n\n async getResource(_path: string, _options?: GetResourceOptions): Promise<Resource | null> {\n throw new Error(\n `Workspace folder \"${this.name}\" (${this.backendType}) is unavailable: ${this.reason}`\n );\n }\n\n touch(): void {\n // No-op\n }\n\n async delete(_name?: string, _recursive?: boolean): Promise<void> {\n throw new Error(`Cannot modify unavailable workspace folder \"${this.name}\" (${this.backendType}).`);\n }\n\n async copyTo(_targetPath: string): Promise<void> {\n throw new Error(`Cannot copy from unavailable workspace folder \"${this.name}\" (${this.backendType}).`);\n }\n\n async rename(_newName: string): Promise<void> {\n throw new Error(`Cannot rename unavailable workspace folder \"${this.name}\" (${this.backendType}).`);\n }\n}\n\nexport function isWorkspaceFolderPlaceholder(directory: Directory): boolean {\n return (\n directory instanceof MissingContributionDirectory ||\n directory instanceof UnavailableWorkspaceFolderDirectory\n );\n}\n\n/**\n * Runs a contribution's restore; returns a real directory or an {@link UnavailableWorkspaceFolderDirectory}.\n * Invokes onCaughtError only when restore threw (not when it returned undefined).\n */\nasync function restorePersistedFolderToDirectory(\n type: string,\n data: any,\n restore: (data: any) => Promise<Directory | undefined>,\n onCaughtError?: (error: unknown) => void\n): Promise<Directory> {\n const displayName = workspaceFolderDisplayNameFromPersisted({ type, data });\n try {\n const dir = await restore(data);\n if (dir) {\n return dir;\n }\n return new UnavailableWorkspaceFolderDirectory({\n backendType: type,\n name: displayName,\n data,\n reason: RESTORE_RETURNED_NOTHING\n });\n } catch (error) {\n onCaughtError?.(error);\n return new UnavailableWorkspaceFolderDirectory({\n backendType: type,\n name: displayName,\n data,\n reason: formatRestoreFailureReason(error)\n });\n }\n}\n\nexport interface WorkspaceContribution {\n type: string;\n name: string;\n canHandle(input: any): boolean;\n connect(input: any): Promise<Directory>;\n restore?(data: any): Promise<Directory | undefined>;\n persist?(workspace: Directory): Promise<any>;\n}\n\ninterface PersistedWorkspaceData {\n type?: string;\n data?: any;\n folders?: Array<{ type: string; data: any }>;\n}\n\nconst LEGACY_WORKSPACE_KEY = \"workspace_data\";\n\nexport class WorkspaceService {\n private workspace?: Promise<Directory | undefined>;\n private _currentWorkspace: Directory | undefined = undefined;\n private folders: Array<{ type: string; data: any; directory: Directory }> = [];\n private currentType?: string;\n private contributions: Map<string, WorkspaceContribution> = new Map();\n private initPromise: Promise<void>;\n private restoredTypes: Set<string> = new Set();\n\n getWorkspaceSync(): Directory | undefined {\n return this._currentWorkspace;\n }\n\n constructor() {\n let resolveInit!: () => void;\n this.initPromise = new Promise<void>((resolve) => {\n resolveInit = resolve;\n });\n this.loadPersistedWorkspace(resolveInit);\n }\n\n registerContribution(contribution: WorkspaceContribution): void {\n this.contributions.set(contribution.type, contribution);\n void this.tryRestoreForContribution(contribution);\n }\n\n getContributions(): WorkspaceContribution[] {\n return Array.from(this.contributions.values());\n }\n\n private static readonly DEFAULT_INDEXEDDB_FOLDER_NAME = 'My Folder';\n\n private async tryRestoreForContribution(contribution: WorkspaceContribution): Promise<void> {\n await this.initPromise;\n\n if (this.restoredTypes.has(contribution.type)) {\n return;\n }\n\n const existingForType = this.folders.filter(f => f.type === contribution.type);\n const hasRealFoldersForType = existingForType.some(f => !isWorkspaceFolderPlaceholder(f.directory));\n if (hasRealFoldersForType) {\n this.restoredTypes.add(contribution.type);\n return;\n }\n\n const raw = await persistenceService.getObject(LEGACY_WORKSPACE_KEY) as PersistedWorkspaceData | null;\n if (!raw?.folders || !Array.isArray(raw.folders)) {\n this.restoredTypes.add(contribution.type);\n return;\n }\n\n const toRestore = raw.folders.filter(f => f.type === contribution.type);\n if (toRestore.length === 0) {\n this.restoredTypes.add(contribution.type);\n return;\n }\n\n // Remove any placeholder folders for this type; we'll replace them with\n // real directories if restoration succeeds.\n this.folders = this.folders.filter(\n f => !(f.type === contribution.type && isWorkspaceFolderPlaceholder(f.directory))\n );\n\n for (const folder of toRestore) {\n if (!contribution.restore) {\n continue;\n }\n\n const directory = await restorePersistedFolderToDirectory(\n contribution.type,\n folder.data,\n contribution.restore,\n (error) =>\n logger.warn(\n `Failed to restore folder (${contribution.type}) on contribution registration:`,\n error\n )\n );\n this.folders.push({ type: contribution.type, data: folder.data, directory });\n }\n\n if (this.folders.length === 0) {\n this.restoredTypes.add(contribution.type);\n return;\n }\n\n const composite = this.buildComposite();\n this.workspace = Promise.resolve(composite);\n this._currentWorkspace = composite ?? undefined;\n await this.persistFolders();\n if (composite) {\n publish(TOPIC_WORKSPACE_CONNECTED, composite);\n logger.debug(`Workspace folders restored for contribution type: ${contribution.type}`);\n }\n\n this.restoredTypes.add(contribution.type);\n }\n\n private async loadPersistedWorkspace(resolveInit: () => void): Promise<void> {\n logger.debug('Restoring workspace from persistence');\n try {\n const raw = await persistenceService.getObject(LEGACY_WORKSPACE_KEY) as PersistedWorkspaceData | null;\n if (!raw) {\n this.workspace = Promise.resolve(undefined);\n this._currentWorkspace = undefined;\n }\n\n if (raw?.folders && Array.isArray(raw.folders) && raw.folders.length > 0) {\n const normalized = raw.folders.map((f: { type: string; data: any }) => ({ type: f.type, data: f.data }));\n await this.resolveFolders(normalized);\n const composite = this.buildComposite();\n this.workspace = Promise.resolve(composite);\n this._currentWorkspace = composite ?? undefined;\n if (composite) {\n publish(TOPIC_WORKSPACE_CONNECTED, composite);\n logger.debug('Workspace restored from persisted folders');\n }\n resolveInit();\n return;\n }\n\n if (raw && raw.type && raw.data !== undefined) {\n const contribution = this.contributions.get(raw.type);\n if (contribution?.restore) {\n try {\n const dir = await contribution.restore!(raw.data);\n if (dir) {\n this.folders = [{ type: raw.type, data: raw.data, directory: dir }];\n const comp = this.buildComposite();\n this.workspace = Promise.resolve(comp);\n this._currentWorkspace = comp ?? undefined;\n this.currentType = raw.type;\n await this.persistFolders();\n publish(TOPIC_WORKSPACE_CONNECTED, comp);\n logger.debug('Workspace restored from legacy format');\n }\n } catch (error) {\n logger.error('Failed to restore legacy workspace:', error);\n }\n }\n }\n if (!this.workspace) {\n this.workspace = Promise.resolve(undefined);\n this._currentWorkspace = undefined;\n }\n\n resolveInit();\n } finally {\n if (this.folders.length === 0) {\n try {\n await this.connectFolder({ indexeddb: true, name: WorkspaceService.DEFAULT_INDEXEDDB_FOLDER_NAME });\n logger.debug('Connected default IndexedDB workspace');\n } catch (e) {\n logger.warn('Failed to connect default IndexedDB folder', e);\n }\n }\n }\n }\n\n private async resolveFolders(persisted: Array<{ type: string; data: any }>): Promise<void> {\n this.folders = [];\n for (const folder of persisted) {\n const contribution = this.contributions.get(folder.type);\n if (!contribution?.restore) {\n const displayName =\n (folder.data && typeof folder.data === 'object' && (folder.data as any).name) ||\n `${folder.type} (missing)`;\n const placeholder = new MissingContributionDirectory({\n backendType: folder.type,\n name: displayName,\n data: folder.data\n });\n this.folders.push({ type: folder.type, data: folder.data, directory: placeholder });\n continue;\n }\n const directory = await restorePersistedFolderToDirectory(\n folder.type,\n folder.data,\n contribution.restore,\n (error) => logger.warn(`Failed to restore folder (${folder.type}):`, error)\n );\n this.folders.push({ type: folder.type, data: folder.data, directory });\n }\n }\n\n private buildComposite(): CompositeDirectory | undefined {\n if (this.folders.length === 0) {\n return undefined;\n }\n return new CompositeDirectory(this.folders.map(f => f.directory));\n }\n\n private async persistFolders(): Promise<void> {\n const toPersist = this.folders.length > 0\n ? { folders: this.folders.map(f => ({ type: f.type, data: f.data })) }\n : null;\n await persistenceService.persistObject(LEGACY_WORKSPACE_KEY, toPersist);\n await persistenceService.persistObject(\"workspace\", null);\n logger.debug(`Persisted ${this.folders.length} folder(s)`);\n }\n\n async getFolders(): Promise<Array<{ name: string; type: string }>> {\n await this.initPromise;\n return this.folders.map(f => ({ name: f.directory.getName(), type: f.type }));\n }\n\n async getFolderInfoForDirectory(directory: Directory): Promise<{ name: string; type: string; backendName: string } | undefined> {\n await this.initPromise;\n const folder = this.folders.find(f => f.directory === directory);\n if (!folder) {\n return undefined;\n }\n const name =\n (folder.data && typeof folder.data === 'object' && (folder.data as any).name) ||\n folder.directory.getName();\n const contribution = this.contributions.get(folder.type);\n const backendName = contribution?.name ?? folder.type;\n return { name, type: folder.type, backendName };\n }\n\n /**\n * Whether {@link resource} still belongs to the current workspace (walks up to the backend root).\n * After {@link disconnectFolder}, the root is no longer listed, so in-flight listChildren errors can be ignored.\n */\n async isResourceInCurrentWorkspace(resource: Resource): Promise<boolean> {\n await this.initPromise;\n let current: Resource | undefined = resource;\n while (current) {\n const parent = current.getParent();\n if (!parent) {\n if (!(current instanceof Directory)) {\n return false;\n }\n return this.folders.some(f => f.directory === current);\n }\n current = parent;\n }\n return false;\n }\n\n /**\n * Update persisted metadata for a workspace root directory.\n * Currently used to keep display names of roots (e.g. IndexedDB) in sync\n * with their in-memory Directory instances.\n */\n async updateFolderName(directory: Directory, name: string): Promise<void> {\n await this.initPromise;\n const folder = this.folders.find(f => f.directory === directory);\n if (!folder) {\n return;\n }\n if (folder.data && typeof folder.data === 'object') {\n folder.data = { ...(folder.data as any), name };\n } else {\n folder.data = { name };\n }\n await this.persistFolders();\n const composite = this.buildComposite();\n this.workspace = Promise.resolve(composite);\n this._currentWorkspace = composite ?? undefined;\n publish(TOPIC_WORKSPACE_CONNECTED, composite);\n logger.debug(`Updated folder name: ${name}`);\n }\n\n async connectFolder(input: any): Promise<Directory> {\n await this.initPromise;\n const contribution = Array.from(this.contributions.values()).find(c => c.canHandle(input));\n if (!contribution) {\n throw new Error('No workspace contribution can handle this input');\n }\n const name = (input?.name as string) ?? contribution.type;\n logger.debug(`Connecting workspace: ${contribution.type}, ${name}`);\n const directory = await contribution.connect(input);\n const data = contribution.persist ? await contribution.persist(directory) : input;\n this.folders.push({ type: contribution.type, data, directory });\n await this.persistFolders();\n this.currentType = this.folders.length === 1 ? contribution.type : undefined;\n const composite = this.buildComposite()!;\n this.workspace = Promise.resolve(composite);\n this._currentWorkspace = composite;\n publish(TOPIC_WORKSPACE_CONNECTED, composite);\n const displayName = directory.getName();\n logger.info(`Workspace connected: ${contribution.type} (${displayName})`);\n return composite;\n }\n\n async disconnectFolder(directory: Directory): Promise<void> {\n await this.initPromise;\n const idx = this.folders.findIndex(f => f.directory === directory);\n if (idx < 0) {\n return;\n }\n const folder = this.folders[idx];\n logger.debug(`Disconnecting folder: ${folder.directory.getName()} (${folder.type})`);\n this.folders.splice(idx, 1);\n await this.persistFolders();\n if (this.folders.length > 0) {\n this.currentType = this.folders[0].type;\n } else {\n this.currentType = undefined;\n logger.info('Workspace disconnected');\n }\n const composite = this.buildComposite();\n this.workspace = Promise.resolve(composite);\n this._currentWorkspace = composite ?? undefined;\n publish(TOPIC_WORKSPACE_CONNECTED, composite);\n }\n\n async connectWorkspace(input: any): Promise<Directory> {\n return this.connectFolder(input);\n }\n\n public async getWorkspace(): Promise<Directory | undefined> {\n await this.initPromise;\n if (!this.workspace) {\n throw new Error('No workspace connected.');\n }\n return await this.workspace;\n }\n\n public isConnected(): boolean {\n return this.folders.length > 0;\n }\n\n public getWorkspaceType(): string | undefined {\n return this.currentType;\n }\n\n public async disconnectWorkspace(): Promise<void> {\n await this.initPromise;\n this.workspace = Promise.resolve(undefined);\n this._currentWorkspace = undefined;\n this.folders = [];\n this.currentType = undefined;\n await this.persistFolders();\n publish(TOPIC_WORKSPACE_CONNECTED, undefined as any);\n logger.info('Workspace disconnected');\n }\n\n /**\n * Copy (and optionally move) a resource into a target directory within the\n * current workspace. This helper is connection-agnostic: it always resolves\n * paths via the composite workspace root so it can copy across different\n * backend folders.\n */\n public async copyResource(\n src: Resource,\n destDir: Directory,\n options?: { move?: boolean; newName?: string }\n ): Promise<void> {\n await this.initPromise;\n const workspace = this._currentWorkspace;\n if (!workspace) {\n throw new Error('No workspace connected.');\n }\n\n const targetName = options?.newName ?? src.getName();\n const destDirPath = destDir.getWorkspacePath();\n const targetBasePath = destDirPath ? `${destDirPath}/${targetName}` : targetName;\n\n const copyFileToPath = async (file: File, targetPath: string): Promise<void> => {\n const contents = await file.getContents({ blob: true });\n const targetFile = await workspace.getResource(targetPath, { create: true }) as File | null;\n if (!targetFile) {\n throw new Error(`Failed to create target file: ${targetPath}`);\n }\n await targetFile.saveContents(contents);\n };\n\n const copyDirectoryToPath = async (dir: Directory, targetPath: string): Promise<void> => {\n for (const child of await dir.listChildren(false)) {\n const childTargetPath = `${targetPath}/${child.getName()}`;\n if (child instanceof File) {\n await copyFileToPath(child, childTargetPath);\n } else if (child instanceof Directory) {\n await copyDirectoryToPath(child, childTargetPath);\n }\n }\n };\n\n if (src instanceof File) {\n await copyFileToPath(src, targetBasePath);\n } else if (src instanceof Directory) {\n await copyDirectoryToPath(src, targetBasePath);\n } else {\n throw new Error('Unsupported resource type for copy operation.');\n }\n\n if (options?.move) {\n await src.delete(undefined, true);\n }\n }\n}\n\nexport const workspaceService = new WorkspaceService();\nrootContext.put(\"workspaceService\", workspaceService);\n\n\n","import { publish } from \"../events\";\nimport {\n File,\n Directory,\n FileContentType,\n FileContentEncoding,\n type FileContentsOptions,\n type GetResourceOptions,\n type Resource,\n type ResourceMap,\n TOPIC_WORKSPACE_CHANGED,\n workspaceService,\n} from \"./common\";\n\nexport class FileSysFileHandleResource extends File {\n private fileHandle: FileSystemFileHandle;\n private parent: Directory;\n\n constructor(fileHandle: FileSystemFileHandle, parent: Directory) {\n super();\n this.fileHandle = fileHandle;\n this.parent = parent;\n }\n\n getName(): string {\n return this.fileHandle.name;\n }\n\n getParent(): Directory {\n return this.parent;\n }\n\n async delete() {\n return this.getParent().delete(this.getName());\n }\n\n async getContents(options?: FileContentsOptions): Promise<any> {\n const file = await this.fileHandle.getFile();\n\n if (!options || options?.contentType == FileContentType.TEXT) {\n return await file.text();\n }\n\n if (options?.encoding == FileContentEncoding.BASE64 || options?.uri) {\n return URL.createObjectURL(file);\n }\n\n if (options?.blob) {\n return file;\n }\n\n return file.stream();\n }\n\n async size(): Promise<number | null> {\n try {\n const file = await this.fileHandle.getFile();\n return file.size;\n } catch {\n return null;\n }\n }\n\n async saveContents(contents: any, _options?: FileContentsOptions): Promise<void> {\n const writable = await this.fileHandle.createWritable();\n\n if (contents && typeof contents.pipeTo === 'function') {\n await contents.pipeTo(writable);\n } else {\n const writer = writable.getWriter();\n try {\n await writer.write(contents);\n } finally {\n await writer.close();\n }\n }\n publish(TOPIC_WORKSPACE_CHANGED, workspaceService.getWorkspaceSync() ?? this.getWorkspace());\n }\n\n async copyTo(targetPath: string): Promise<void> {\n const contents = await this.getContents({ blob: true });\n const targetFile = await this.getWorkspace().getResource(targetPath, { create: true }) as File;\n await targetFile.saveContents(contents);\n }\n\n async rename(newName: string): Promise<void> {\n const parent = this.getParent() as FileSysDirHandleResource;\n if (!parent) {\n throw new Error('Cannot rename root resource');\n }\n\n if (this.getName() === newName) {\n return;\n }\n\n if (!('move' in this.fileHandle) || typeof (this.fileHandle as any).move !== 'function') {\n throw new Error('File rename not supported in this browser. Please use a browser with File System Access API move() support.');\n }\n\n try {\n await (this.fileHandle as any).move(newName);\n } catch (error: any) {\n if (error.name === 'NotAllowedError' ||\n error.message?.includes('not allowed') ||\n error.message?.includes('user agent')) {\n throw new Error('File rename failed: The operation took too long and user activation expired. Please try again.');\n }\n throw error;\n }\n\n await parent.listChildren(true);\n publish(TOPIC_WORKSPACE_CHANGED, workspaceService.getWorkspaceSync() ?? this.getWorkspace());\n }\n}\n\nexport class FileSysDirHandleResource extends Directory {\n private dirHandle: FileSystemDirectoryHandle;\n private files?: ResourceMap;\n private parent?: Directory;\n private loadingPromise?: Promise<Resource[]>;\n\n constructor(dirHandle: FileSystemDirectoryHandle, parent?: Directory) {\n super();\n this.dirHandle = dirHandle;\n this.parent = parent;\n }\n\n getHandle() {\n return this.dirHandle;\n }\n\n getParent(): Directory | undefined {\n return this.parent;\n }\n\n getName(): string {\n return this.dirHandle.name;\n }\n\n async listChildren(forceRefresh: boolean = false): Promise<Resource[]> {\n if (forceRefresh || !this.files) {\n if (this.loadingPromise) {\n return this.loadingPromise;\n }\n\n this.loadingPromise = (async () => {\n try {\n const files: ResourceMap = {};\n\n try {\n // @ts-ignore -- TS 6 lib.dom provides `values()` via merged FileSystemDirectoryHandle declarations;\n // IDE/lint can miss the merge and falsely report it missing while tsc is correct.\n for await (const entry of this.dirHandle.values()) {\n const child =\n entry.kind === \"file\"\n ? new FileSysFileHandleResource(entry, this)\n : new FileSysDirHandleResource(entry, this);\n files[child.getName()] = child;\n }\n } catch (error: any) {\n if (error.name === 'NotFoundError') {\n this.files = {};\n return [];\n }\n throw error;\n }\n\n this.files = files;\n return Object.values(this.files);\n } finally {\n this.loadingPromise = undefined;\n }\n })();\n\n return this.loadingPromise;\n }\n return Object.values(this.files);\n }\n\n async getResource(path: string, options?: GetResourceOptions): Promise<Resource | null> {\n if (!path) {\n throw new Error(\"No path provided\");\n }\n const segments = path.split(\"/\").filter(s => s.trim());\n let currentResource: Resource = this;\n let workspaceChanged = false;\n try {\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i].trim();\n if (currentResource instanceof FileSysDirHandleResource) {\n await currentResource.listChildren();\n if (!currentResource.files) {\n return null;\n }\n const next = currentResource.files[segment];\n if (!next) {\n if (options?.create) {\n workspaceChanged = true;\n if (i < segments.length - 1) {\n try {\n const newDirHandle = await currentResource.dirHandle.getDirectoryHandle(segment, { create: true });\n const nextResource = new FileSysDirHandleResource(newDirHandle, currentResource);\n currentResource.files[segment] = nextResource;\n currentResource = nextResource;\n if (currentResource instanceof FileSysDirHandleResource) {\n await currentResource.listChildren();\n }\n continue;\n } catch (error: any) {\n if (error.name === 'NotFoundError') {\n throw new Error(`Directory not found or not accessible: ${segments.slice(0, i + 1).join('/')}`);\n }\n throw error;\n }\n } else {\n try {\n const newFileHandle = await currentResource.dirHandle.getFileHandle(segment, { create: true });\n const nextResource = new FileSysFileHandleResource(newFileHandle, currentResource);\n currentResource.files[segment] = nextResource;\n return nextResource;\n } catch (error: any) {\n if (error.name === 'NotFoundError') {\n throw new Error(`File not found or not accessible: ${segments.join('/')}`);\n }\n throw error;\n }\n }\n } else {\n return null;\n }\n } else {\n currentResource = next;\n }\n } else {\n return null;\n }\n }\n } finally {\n if (workspaceChanged) {\n publish(TOPIC_WORKSPACE_CHANGED, workspaceService.getWorkspaceSync() ?? this.getWorkspace());\n }\n }\n return currentResource;\n }\n\n public touch() {\n publish(TOPIC_WORKSPACE_CHANGED, workspaceService.getWorkspaceSync() ?? this.getWorkspace());\n }\n\n async delete(name?: string, recursive: boolean = true) {\n if (!name) {\n const parent = this.getParent();\n if (parent instanceof FileSysDirHandleResource) {\n await parent.listChildren();\n if (parent.files) {\n delete parent.files[this.getName()];\n }\n }\n this.files = undefined;\n this.loadingPromise = undefined;\n return parent?.delete(this.getName());\n }\n return this.dirHandle.removeEntry(name, {\n recursive: recursive\n }).then(async () => {\n if (this.files) {\n delete this.files[name];\n }\n publish(TOPIC_WORKSPACE_CHANGED, workspaceService.getWorkspaceSync() ?? this.getWorkspace());\n });\n }\n\n async copyTo(targetPath: string) {\n for (const resource of (await this.listChildren())) {\n const targetResourceName = [targetPath, resource.getName()].join(\"/\");\n await resource.copyTo(targetResourceName);\n }\n }\n\n async rename(newName: string): Promise<void> {\n const parent = this.getParent() as FileSysDirHandleResource;\n if (!parent) {\n throw new Error('Cannot rename workspace root');\n }\n\n if (this.getName() === newName) {\n return;\n }\n\n if (!('move' in this.dirHandle) || typeof (this.dirHandle as any).move !== 'function') {\n throw new Error('Directory rename not supported in this browser. Please use a browser with File System Access API move() support.');\n }\n\n try {\n await (this.dirHandle as any).move(newName);\n } catch (error: any) {\n if (error.name === 'NotAllowedError' ||\n error.message?.includes('not allowed') ||\n error.message?.includes('user agent')) {\n throw new Error('Directory rename failed: The operation took too long and user activation expired. Please try again.');\n }\n throw error;\n }\n\n await parent.listChildren(true);\n publish(TOPIC_WORKSPACE_CHANGED, workspaceService.getWorkspaceSync() ?? this.getWorkspace());\n }\n}\n\n// Register default filesystem contribution\nworkspaceService.registerContribution({\n type: 'filesystem',\n name: 'fs',\n\n canHandle(input: any): boolean {\n return input && 'kind' in input && input.kind === 'directory';\n },\n\n async connect(input: FileSystemDirectoryHandle): Promise<Directory> {\n return new FileSysDirHandleResource(input);\n },\n\n async restore(data: any): Promise<Directory | undefined> {\n if (data && 'kind' in data && data.kind === 'directory') {\n return new FileSysDirHandleResource(data, undefined);\n }\n return undefined;\n },\n\n async persist(workspace: Directory): Promise<any> {\n if (workspace instanceof FileSysDirHandleResource) {\n return workspace.getHandle();\n }\n return null;\n }\n});\n\n"],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { A as
|
|
2
|
-
import { i as setLogLevel, n as defaultLogger, o as rootContext, s as uiContext, t as createLogger } from "./logger-
|
|
3
|
-
import { C as overrideContributionTargets, E as toastWarning, S as listContributionNameRemaps, T as toastInfo, a as TOPIC_COMMAND_REGISTERED, b as applyConfigNameRemaps, c as EMPTY_SIGNALPORT, d as activeSelectionSignal, f as activeTasksSignal, g as contributionRegistry, h as TOPIC_CONTRIBUTEIONS_CHANGED, i as CommandStack, l as activeEditorSignal, m as perspectiveSwitchedSignal, n as watchSignal, o as commandRegistry, p as partDirtySignal, r as CommandRegistry, s as registerAll, t as DocksWidget, u as activePartSignal, w as toastError, x as contributionTargetMappingRegistry } from "./widget-
|
|
4
|
-
import { n as subscribe, r as unsubscribe, t as publish } from "./events-
|
|
5
|
-
import { a as File, c as StringFile, f as WorkspaceService, i as Directory, l as TOPIC_WORKSPACE_CHANGED, m as persistenceService, o as FileContentType, p as workspaceService, r as CompositeDirectory, t as FileSysDirHandleResource, u as TOPIC_WORKSPACE_CONNECTED } from "./fs-access-
|
|
6
|
-
import {
|
|
7
|
-
export { ABOUT_TABS, ABOUT_TAB_ATTRIBUTIONS, ABOUT_TAB_PACKAGES, ABOUT_TAB_RELEASE, ATTRIBUTION_ECLIPSE_DOCKS, COMMAND_SAVE, CTXMENU_FILEBROWSER_DELETE, CTXMENU_FILEBROWSER_RENAME, CommandRegistry, CommandStack, CompositeDirectory, Directory, DocksContainer, DocksDialogContent, DocksElement, DocksPart, DocksStandardLayout, DocksWidget, EDITOR_AREA_MAIN, EMPTY_SIGNALPORT, File, FileContentType, FileSysDirHandleResource, HIDE_DOT_RESOURCE, MouseButton, PANEL_BOTTOM, SIDEBAR_AUXILIARY, SIDEBAR_MAIN, SIDEBAR_MAIN_BOTTOM, SIDEBAR_MAIN_TOOLBAR, SIDEBAR_TOOLBAR_EXTENSIONS, SYSTEM_ATTRIBUTIONS, SYSTEM_DEFAULT_FILE_ICONS, SYSTEM_LAYOUTS, SYSTEM_VIEWS, StringFile, TOOLBAR_ACTIVE_PART_NAME, TOOLBAR_BOTTOM, TOOLBAR_BOTTOM_CENTER, TOOLBAR_BOTTOM_END, TOOLBAR_FAST_VIEWS, TOOLBAR_FULLSCREEN, TOOLBAR_INFO, TOOLBAR_LANGUAGE_SELECTOR, TOOLBAR_LAYOUT_SWITCHER, TOOLBAR_MAIN, TOOLBAR_MAIN_CENTER, TOOLBAR_MAIN_RIGHT, TOOLBAR_TASKS, TOOLBAR_THEME_SWITCHER, TOPIC_COMMAND_REGISTERED, TOPIC_CONTRIBUTEIONS_CHANGED, TOPIC_SETTINGS_CHANGED, TOPIC_WORKSPACE_CHANGED, TOPIC_WORKSPACE_CONNECTED, VIEW_FILEBROWSER, VIEW_LOG_TERMINAL, WorkspaceService, activeEditorSignal, activePartSignal, activeSelectionSignal, activeTasksSignal, appLoaderService, appSettings, applyConfigNameRemaps, commandRegistry, configureFramework, confirmDialog, contributionRegistry, contributionTargetMappingRegistry, createJsRuntime, createLazyLabel, createLogger, dialogService, editorRegistry, esmShService, extensionRegistry, filebrowserDialog, formDialog, formDialogRequired, getFrameworkConfig, i18n, icon, infoDialog, listContributionNameRemaps, defaultLogger as logger, navigableInfoDialog, overrideContributionTargets, parseIconSpec, parseMarkdownHtml, partDirtySignal, persistenceService, perspectiveSwitchedSignal, promptDialog, publish, registerAll, renderCommandContribution, renderDropdownContribution, renderDropdownContributions, renderDropdownItem, renderDropdownSubmenu, rootContext, runJavaScriptCode, sanitizeHtml, setLogLevel, subscribe, taskService, toastError, toastInfo, toastWarning, treeNodeComparator, uiContext, unsubscribe, validateFormDialogFields, versionInfoDialog, watchSignal, workspaceService };
|
|
1
|
+
import { $ as HIDE_DOT_RESOURCE, A as filebrowserDialog, B as dialogService, C as TOOLBAR_INFO, D as TOOLBAR_THEME_SWITCHER, E as TOOLBAR_TASKS, F as formDialogRequired, H as DocksElement, I as validateFormDialogFields, J as esmShService, L as promptDialog, M as confirmDialog, N as infoDialog, O as VIEW_FILEBROWSER, P as formDialog, Q as COMMAND_SAVE, R as appLoaderService, S as TOOLBAR_FULLSCREEN, T as TOOLBAR_LAYOUT_SWITCHER, U as parseMarkdownHtml, V as DocksDialogContent, W as sanitizeHtml, X as TOPIC_SETTINGS_CHANGED, Y as taskService, Z as appSettings, _ as CTXMENU_FILEBROWSER_RENAME, _t as TOOLBAR_MAIN_CENTER, a as renderDropdownItem, at as SIDEBAR_AUXILIARY, b as TOOLBAR_ACTIVE_PART_NAME, c as parseIconSpec, ct as SIDEBAR_MAIN_BOTTOM, d as DocksContainer, dt as SYSTEM_LAYOUTS, et as MouseButton, f as ABOUT_TAB_ATTRIBUTIONS, ft as SYSTEM_VIEWS, g as CTXMENU_FILEBROWSER_DELETE, gt as TOOLBAR_MAIN, h as ATTRIBUTION_ECLIPSE_DOCKS, ht as TOOLBAR_BOTTOM_END, i as renderDropdownContributions, it as PANEL_BOTTOM, j as navigableInfoDialog, k as VIEW_LOG_TERMINAL, l as versionInfoDialog, lt as SIDEBAR_MAIN_TOOLBAR, m as ABOUT_TAB_RELEASE, mt as TOOLBAR_BOTTOM_CENTER, n as renderCommandContribution, nt as ABOUT_TABS, o as renderDropdownSubmenu, ot as SIDEBAR_AUXILIARY_BOTTOM, p as ABOUT_TAB_PACKAGES, pt as TOOLBAR_BOTTOM, q as extensionRegistry, r as renderDropdownContribution, rt as EDITOR_AREA_MAIN, s as icon, st as SIDEBAR_MAIN, t as handleDropdownWaSelect, u as DocksPart, ut as SYSTEM_ATTRIBUTIONS, v as SIDEBAR_TOOLBAR_EXTENSIONS, vt as TOOLBAR_MAIN_RIGHT, w as TOOLBAR_LANGUAGE_SELECTOR, x as TOOLBAR_FAST_VIEWS, y as SYSTEM_DEFAULT_FILE_ICONS } from "./parts-DQRktiiR.js";
|
|
2
|
+
import { i as setLogLevel, n as defaultLogger, o as rootContext, s as uiContext, t as createLogger } from "./logger-CiT0Cc4g.js";
|
|
3
|
+
import { C as overrideContributionTargets, E as toastWarning, S as listContributionNameRemaps, T as toastInfo, a as TOPIC_COMMAND_REGISTERED, b as applyConfigNameRemaps, c as EMPTY_SIGNALPORT, d as activeSelectionSignal, f as activeTasksSignal, g as contributionRegistry, h as TOPIC_CONTRIBUTEIONS_CHANGED, i as CommandStack, l as activeEditorSignal, m as perspectiveSwitchedSignal, n as watchSignal, o as commandRegistry, p as partDirtySignal, r as CommandRegistry, s as registerAll, t as DocksWidget, u as activePartSignal, w as toastError, x as contributionTargetMappingRegistry } from "./widget-DUR6wxME.js";
|
|
4
|
+
import { n as subscribe, r as unsubscribe, t as publish } from "./events-BAE5R6TH.js";
|
|
5
|
+
import { a as File, c as StringFile, f as WorkspaceService, i as Directory, l as TOPIC_WORKSPACE_CHANGED, m as persistenceService, o as FileContentType, p as workspaceService, r as CompositeDirectory, t as FileSysDirHandleResource, u as TOPIC_WORKSPACE_CONNECTED } from "./fs-access-Cjcg0_Me.js";
|
|
6
|
+
import { _ as i18n, a as DocksStandardLayout, c as LAYOUT_PANEL_SETTINGS_KEY, d as layoutIdToPanelVisibility, f as resolveInitialPanelVisibilityFromApp, g as createLazyLabel, h as editorRegistry, i as createJsRuntime, l as LEGACY_PREFERRED_LAYOUT_KEY, m as treeNodeComparator, n as getFrameworkConfig, o as DEFAULT_LAYOUT_PANEL_VISIBILITY, p as resolveStoredPanelVisibility, r as runJavaScriptCode, s as LAYOUT_PANEL_OPTIONS, t as configureFramework, u as findStandardLayout } from "./api-DImisUWV.js";
|
|
7
|
+
export { ABOUT_TABS, ABOUT_TAB_ATTRIBUTIONS, ABOUT_TAB_PACKAGES, ABOUT_TAB_RELEASE, ATTRIBUTION_ECLIPSE_DOCKS, COMMAND_SAVE, CTXMENU_FILEBROWSER_DELETE, CTXMENU_FILEBROWSER_RENAME, CommandRegistry, CommandStack, CompositeDirectory, DEFAULT_LAYOUT_PANEL_VISIBILITY, Directory, DocksContainer, DocksDialogContent, DocksElement, DocksPart, DocksStandardLayout, DocksWidget, EDITOR_AREA_MAIN, EMPTY_SIGNALPORT, File, FileContentType, FileSysDirHandleResource, HIDE_DOT_RESOURCE, LAYOUT_PANEL_OPTIONS, LAYOUT_PANEL_SETTINGS_KEY, LEGACY_PREFERRED_LAYOUT_KEY, MouseButton, PANEL_BOTTOM, SIDEBAR_AUXILIARY, SIDEBAR_AUXILIARY_BOTTOM, SIDEBAR_MAIN, SIDEBAR_MAIN_BOTTOM, SIDEBAR_MAIN_TOOLBAR, SIDEBAR_TOOLBAR_EXTENSIONS, SYSTEM_ATTRIBUTIONS, SYSTEM_DEFAULT_FILE_ICONS, SYSTEM_LAYOUTS, SYSTEM_VIEWS, StringFile, TOOLBAR_ACTIVE_PART_NAME, TOOLBAR_BOTTOM, TOOLBAR_BOTTOM_CENTER, TOOLBAR_BOTTOM_END, TOOLBAR_FAST_VIEWS, TOOLBAR_FULLSCREEN, TOOLBAR_INFO, TOOLBAR_LANGUAGE_SELECTOR, TOOLBAR_LAYOUT_SWITCHER, TOOLBAR_MAIN, TOOLBAR_MAIN_CENTER, TOOLBAR_MAIN_RIGHT, TOOLBAR_TASKS, TOOLBAR_THEME_SWITCHER, TOPIC_COMMAND_REGISTERED, TOPIC_CONTRIBUTEIONS_CHANGED, TOPIC_SETTINGS_CHANGED, TOPIC_WORKSPACE_CHANGED, TOPIC_WORKSPACE_CONNECTED, VIEW_FILEBROWSER, VIEW_LOG_TERMINAL, WorkspaceService, activeEditorSignal, activePartSignal, activeSelectionSignal, activeTasksSignal, appLoaderService, appSettings, applyConfigNameRemaps, commandRegistry, configureFramework, confirmDialog, contributionRegistry, contributionTargetMappingRegistry, createJsRuntime, createLazyLabel, createLogger, dialogService, editorRegistry, esmShService, extensionRegistry, filebrowserDialog, findStandardLayout, formDialog, formDialogRequired, getFrameworkConfig, handleDropdownWaSelect, i18n, icon, infoDialog, layoutIdToPanelVisibility, listContributionNameRemaps, defaultLogger as logger, navigableInfoDialog, overrideContributionTargets, parseIconSpec, parseMarkdownHtml, partDirtySignal, persistenceService, perspectiveSwitchedSignal, promptDialog, publish, registerAll, renderCommandContribution, renderDropdownContribution, renderDropdownContributions, renderDropdownItem, renderDropdownSubmenu, resolveInitialPanelVisibilityFromApp, resolveStoredPanelVisibility, rootContext, runJavaScriptCode, sanitizeHtml, setLogLevel, subscribe, taskService, toastError, toastInfo, toastWarning, treeNodeComparator, uiContext, unsubscribe, validateFormDialogFields, versionInfoDialog, watchSignal, workspaceService };
|
|
@@ -1,10 +1,18 @@
|
|
|
1
|
+
import { LayoutPanelVisibility } from '../core/layout-panels';
|
|
1
2
|
import { DocksContainer } from '../parts/container';
|
|
2
3
|
export declare class DocksStandardLayout extends DocksContainer {
|
|
3
|
-
|
|
4
|
+
showLeftAux: boolean;
|
|
4
5
|
showBottomPanel: boolean;
|
|
5
6
|
showLeftSidebar: boolean;
|
|
6
7
|
showAuxSidebar: boolean;
|
|
8
|
+
showRightAux: boolean;
|
|
9
|
+
private panelsInitialized;
|
|
7
10
|
createRenderRoot(): this;
|
|
11
|
+
getPanelVisibility(): LayoutPanelVisibility;
|
|
12
|
+
private applyPanelVisibility;
|
|
13
|
+
setPanelVisibility(panels: Partial<LayoutPanelVisibility>): Promise<void>;
|
|
14
|
+
protected doInitUI(): void;
|
|
15
|
+
private initializePanelVisibility;
|
|
8
16
|
private getGridSizes;
|
|
9
17
|
render(): import('lit-html').TemplateResult<1>;
|
|
10
18
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standard-layout.d.ts","sourceRoot":"","sources":["../../src/layouts/standard-layout.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"standard-layout.d.ts","sourceRoot":"","sources":["../../src/layouts/standard-layout.ts"],"names":[],"mappings":"AAmBA,OAAO,EAGH,KAAK,qBAAqB,EAC7B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAC,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAElD,qBACa,mBAAoB,SAAQ,cAAc;IAEnD,WAAW,EAAE,OAAO,CAAS;IAG7B,eAAe,EAAE,OAAO,CAAQ;IAGhC,eAAe,EAAE,OAAO,CAAQ;IAGhC,cAAc,EAAE,OAAO,CAAQ;IAG/B,YAAY,EAAE,OAAO,CAAS;IAE9B,OAAO,CAAC,iBAAiB,CAAS;IAElC,gBAAgB;IAIhB,kBAAkB,IAAI,qBAAqB;IAU3C,OAAO,CAAC,oBAAoB;IAQtB,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,qBAAqB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAc/E,SAAS,CAAC,QAAQ;YAIJ,yBAAyB;IAcvC,OAAO,CAAC,YAAY;IAapB,MAAM;CA6IT;AAED,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,qBAAqB;QAC3B,uBAAuB,EAAE,mBAAmB,CAAC;KAChD;CACJ"}
|
|
@@ -182,4 +182,4 @@ rootContext.put("logger", defaultLogger);
|
|
|
182
182
|
//#endregion
|
|
183
183
|
export { unregisterLogHandler as a, setLogLevel as i, defaultLogger as n, rootContext as o, registerLogHandler as r, uiContext as s, createLogger as t };
|
|
184
184
|
|
|
185
|
-
//# sourceMappingURL=logger-
|
|
185
|
+
//# sourceMappingURL=logger-CiT0Cc4g.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger-DT0_NW3S.js","names":[],"sources":["../src/core/di.ts","../src/core/logger.ts"],"sourcesContent":["export class DependencyContext {\n private variables: any;\n private proxy: any;\n private children: DependencyContext[] = [];\n private parent?: DependencyContext;\n\n constructor(variables: any) {\n this.variables = variables\n // @ts-ignore\n this.proxy = new Proxy(variables, this)\n }\n\n get(target: any, prop: string): any {\n return target[prop] || this.parent?.getProxy()[prop];\n }\n\n set(target: any, prop: string, value: any) {\n target[prop] = value;\n }\n\n put(prop: string, value: any) {\n this.variables[prop] = value;\n }\n\n public getProxy() {\n return this.proxy;\n }\n\n public createChild(variables: any = {}): DependencyContext {\n const child = new DependencyContext(variables)\n child.parent = this\n this.children.push(child)\n return child\n }\n\n getChildren() {\n return this.children;\n }\n\n getParent() {\n return this.parent;\n }\n\n destroy() {\n const index = this.parent?.children.indexOf(this)\n if (index !== undefined && index >= 0) {\n this.parent?.children.splice(index, 1)\n }\n this.parent = undefined\n }\n}\n\nexport const rootContext = new DependencyContext({});\nexport const uiContext = rootContext.createChild({});","import { rootContext } from './di';\n\nexport type LogLevel = 'info' | 'warning' | 'error' | 'debug';\n\nconst LogLevelPriority: Record<LogLevel, number> = {\n 'debug': 0,\n 'info': 1,\n 'warning': 2,\n 'error': 3,\n};\n\n// Global log level filter\nlet globalLogLevel: LogLevel = 'debug';\n\n// Store original console methods before any interception\nconst originalConsole = {\n log: console.log.bind(console),\n info: console.info.bind(console),\n warn: console.warn.bind(console),\n error: console.error.bind(console),\n debug: console.debug.bind(console)\n};\n\n// Log handler type\ntype LogHandler = (source: string, message: string, level: LogLevel) => void;\n\n// Registered log handler (set by UI components like log-terminal)\nlet logHandler: LogHandler | null = null;\n\n// Message buffer for logs that occur before handler is registered\nconst messageBuffer: Array<{source: string, message: string, level: LogLevel}> = [];\n\n// Format console arguments\nfunction formatArg(arg: any): string {\n if (arg === null) return 'null';\n if (arg === undefined) return 'undefined';\n if (typeof arg === 'string') return arg;\n if (typeof arg === 'number' || typeof arg === 'boolean') return String(arg);\n if (arg instanceof Error) return `${arg.name}: ${arg.message}`;\n \n try {\n return JSON.stringify(arg);\n } catch {\n return String(arg);\n }\n}\n\n/**\n * Global logger utility for logging messages\n */\nexport class Logger {\n constructor(private source: string) {}\n\n info(message: string, ...args: unknown[]) {\n const combinedMessage = args.length === 0\n ? message\n : `${message} ${args.map(a => formatArg(a)).join(' ')}`;\n this.log(combinedMessage, 'info');\n }\n\n warning(message: string, ...args: unknown[]) {\n const combinedMessage = args.length === 0\n ? message\n : `${message} ${args.map(a => formatArg(a)).join(' ')}`;\n this.log(combinedMessage, 'warning');\n }\n\n warn(message: string, ...args: unknown[]) {\n const combinedMessage = args.length === 0\n ? message\n : `${message} ${args.map(a => formatArg(a)).join(' ')}`;\n this.log(combinedMessage, 'warning');\n }\n\n error(message: string, ...args: unknown[]) {\n const combinedMessage = args.length === 0\n ? message\n : `${message} ${args.map(a => formatArg(a)).join(' ')}`;\n this.log(combinedMessage, 'error');\n }\n\n debug(message: string, ...args: unknown[]) {\n const combinedMessage = args.length === 0\n ? message\n : `${message} ${args.map(a => formatArg(a)).join(' ')}`;\n this.log(combinedMessage, 'debug');\n }\n\n private log(message: string, level: LogLevel) {\n dispatch(this.source, message, level);\n }\n}\n\n/**\n * Check if a log level should be displayed based on current filter\n */\nfunction shouldLog(level: LogLevel): boolean {\n return LogLevelPriority[level] >= LogLevelPriority[globalLogLevel];\n}\n\n/**\n * Dispatch a log message to the registered handler (or buffer it if no handler registered)\n */\nfunction dispatch(source: string, message: string, level: LogLevel) {\n if (!shouldLog(level)) {\n return;\n }\n\n if (logHandler) {\n logHandler(source, message, level);\n } else {\n // Buffer the message until handler is registered\n messageBuffer.push({ source, message, level });\n // Also log to console as fallback\n originalConsole[level === 'error' ? 'error' : level === 'warning' ? 'warn' : level === 'debug' ? 'debug' : 'log'](\n `[${source}] ${message}`\n );\n }\n}\n\n/**\n * Initialize console interception globally\n * Note: This is called automatically when the logger module is imported\n */\nexport function initializeConsoleInterception() {\n console.log = function(...args: any[]) {\n originalConsole.log.apply(console, args);\n dispatch('Console', args.map(a => formatArg(a)).join(' '), 'info');\n };\n \n console.info = function(...args: any[]) {\n originalConsole.info.apply(console, args);\n dispatch('Console', args.map(a => formatArg(a)).join(' '), 'info');\n };\n \n console.warn = function(...args: any[]) {\n originalConsole.warn.apply(console, args);\n dispatch('Console', args.map(a => formatArg(a)).join(' '), 'warning');\n };\n \n console.error = function(...args: any[]) {\n originalConsole.error.apply(console, args);\n dispatch('Console', args.map(a => formatArg(a)).join(' '), 'error');\n };\n \n console.debug = function(...args: any[]) {\n originalConsole.debug.apply(console, args);\n dispatch('Console', args.map(a => formatArg(a)).join(' '), 'debug');\n };\n}\n\n// Auto-initialize console interception when this module is imported\ninitializeConsoleInterception();\n\n/**\n * Register a handler to receive log messages\n * Also flushes any buffered messages to the new handler\n */\nexport function registerLogHandler(handler: LogHandler) {\n logHandler = handler;\n \n // Flush buffered messages\n while (messageBuffer.length > 0) {\n const msg = messageBuffer.shift();\n if (msg) {\n handler(msg.source, msg.message, msg.level);\n }\n }\n}\n\n/**\n * Unregister the current log handler\n */\nexport function unregisterLogHandler() {\n logHandler = null;\n}\n\n/**\n * Create a logger instance for a specific source\n */\nexport function createLogger(source: string): Logger {\n return new Logger(source);\n}\n\n/**\n * Set the global log level filter\n */\nexport function setLogLevel(level: LogLevel) {\n globalLogLevel = level;\n}\n\n/**\n * Default logger instance for backward compatibility\n * This provides a simple logger similar to the old logging.ts\n */\nconst defaultLogger = createLogger('System');\n\n// Register default logger in DI container for backward compatibility\nrootContext.put('logger', defaultLogger);\n\nexport default defaultLogger;\n\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"logger-CiT0Cc4g.js","names":[],"sources":["../src/core/di.ts","../src/core/logger.ts"],"sourcesContent":["export class DependencyContext {\n private variables: any;\n private proxy: any;\n private children: DependencyContext[] = [];\n private parent?: DependencyContext;\n\n constructor(variables: any) {\n this.variables = variables\n // @ts-ignore\n this.proxy = new Proxy(variables, this)\n }\n\n get(target: any, prop: string): any {\n return target[prop] || this.parent?.getProxy()[prop];\n }\n\n set(target: any, prop: string, value: any) {\n target[prop] = value;\n }\n\n put(prop: string, value: any) {\n this.variables[prop] = value;\n }\n\n public getProxy() {\n return this.proxy;\n }\n\n public createChild(variables: any = {}): DependencyContext {\n const child = new DependencyContext(variables)\n child.parent = this\n this.children.push(child)\n return child\n }\n\n getChildren() {\n return this.children;\n }\n\n getParent() {\n return this.parent;\n }\n\n destroy() {\n const index = this.parent?.children.indexOf(this)\n if (index !== undefined && index >= 0) {\n this.parent?.children.splice(index, 1)\n }\n this.parent = undefined\n }\n}\n\nexport const rootContext = new DependencyContext({});\nexport const uiContext = rootContext.createChild({});","import { rootContext } from './di';\n\nexport type LogLevel = 'info' | 'warning' | 'error' | 'debug';\n\nconst LogLevelPriority: Record<LogLevel, number> = {\n 'debug': 0,\n 'info': 1,\n 'warning': 2,\n 'error': 3,\n};\n\n// Global log level filter\nlet globalLogLevel: LogLevel = 'debug';\n\n// Store original console methods before any interception\nconst originalConsole = {\n log: console.log.bind(console),\n info: console.info.bind(console),\n warn: console.warn.bind(console),\n error: console.error.bind(console),\n debug: console.debug.bind(console)\n};\n\n// Log handler type\ntype LogHandler = (source: string, message: string, level: LogLevel) => void;\n\n// Registered log handler (set by UI components like log-terminal)\nlet logHandler: LogHandler | null = null;\n\n// Message buffer for logs that occur before handler is registered\nconst messageBuffer: Array<{source: string, message: string, level: LogLevel}> = [];\n\n// Format console arguments\nfunction formatArg(arg: any): string {\n if (arg === null) return 'null';\n if (arg === undefined) return 'undefined';\n if (typeof arg === 'string') return arg;\n if (typeof arg === 'number' || typeof arg === 'boolean') return String(arg);\n if (arg instanceof Error) return `${arg.name}: ${arg.message}`;\n \n try {\n return JSON.stringify(arg);\n } catch {\n return String(arg);\n }\n}\n\n/**\n * Global logger utility for logging messages\n */\nexport class Logger {\n constructor(private source: string) {}\n\n info(message: string, ...args: unknown[]) {\n const combinedMessage = args.length === 0\n ? message\n : `${message} ${args.map(a => formatArg(a)).join(' ')}`;\n this.log(combinedMessage, 'info');\n }\n\n warning(message: string, ...args: unknown[]) {\n const combinedMessage = args.length === 0\n ? message\n : `${message} ${args.map(a => formatArg(a)).join(' ')}`;\n this.log(combinedMessage, 'warning');\n }\n\n warn(message: string, ...args: unknown[]) {\n const combinedMessage = args.length === 0\n ? message\n : `${message} ${args.map(a => formatArg(a)).join(' ')}`;\n this.log(combinedMessage, 'warning');\n }\n\n error(message: string, ...args: unknown[]) {\n const combinedMessage = args.length === 0\n ? message\n : `${message} ${args.map(a => formatArg(a)).join(' ')}`;\n this.log(combinedMessage, 'error');\n }\n\n debug(message: string, ...args: unknown[]) {\n const combinedMessage = args.length === 0\n ? message\n : `${message} ${args.map(a => formatArg(a)).join(' ')}`;\n this.log(combinedMessage, 'debug');\n }\n\n private log(message: string, level: LogLevel) {\n dispatch(this.source, message, level);\n }\n}\n\n/**\n * Check if a log level should be displayed based on current filter\n */\nfunction shouldLog(level: LogLevel): boolean {\n return LogLevelPriority[level] >= LogLevelPriority[globalLogLevel];\n}\n\n/**\n * Dispatch a log message to the registered handler (or buffer it if no handler registered)\n */\nfunction dispatch(source: string, message: string, level: LogLevel) {\n if (!shouldLog(level)) {\n return;\n }\n\n if (logHandler) {\n logHandler(source, message, level);\n } else {\n // Buffer the message until handler is registered\n messageBuffer.push({ source, message, level });\n // Also log to console as fallback\n originalConsole[level === 'error' ? 'error' : level === 'warning' ? 'warn' : level === 'debug' ? 'debug' : 'log'](\n `[${source}] ${message}`\n );\n }\n}\n\n/**\n * Initialize console interception globally\n * Note: This is called automatically when the logger module is imported\n */\nexport function initializeConsoleInterception() {\n console.log = function(...args: any[]) {\n originalConsole.log.apply(console, args);\n dispatch('Console', args.map(a => formatArg(a)).join(' '), 'info');\n };\n \n console.info = function(...args: any[]) {\n originalConsole.info.apply(console, args);\n dispatch('Console', args.map(a => formatArg(a)).join(' '), 'info');\n };\n \n console.warn = function(...args: any[]) {\n originalConsole.warn.apply(console, args);\n dispatch('Console', args.map(a => formatArg(a)).join(' '), 'warning');\n };\n \n console.error = function(...args: any[]) {\n originalConsole.error.apply(console, args);\n dispatch('Console', args.map(a => formatArg(a)).join(' '), 'error');\n };\n \n console.debug = function(...args: any[]) {\n originalConsole.debug.apply(console, args);\n dispatch('Console', args.map(a => formatArg(a)).join(' '), 'debug');\n };\n}\n\n// Auto-initialize console interception when this module is imported\ninitializeConsoleInterception();\n\n/**\n * Register a handler to receive log messages\n * Also flushes any buffered messages to the new handler\n */\nexport function registerLogHandler(handler: LogHandler) {\n logHandler = handler;\n \n // Flush buffered messages\n while (messageBuffer.length > 0) {\n const msg = messageBuffer.shift();\n if (msg) {\n handler(msg.source, msg.message, msg.level);\n }\n }\n}\n\n/**\n * Unregister the current log handler\n */\nexport function unregisterLogHandler() {\n logHandler = null;\n}\n\n/**\n * Create a logger instance for a specific source\n */\nexport function createLogger(source: string): Logger {\n return new Logger(source);\n}\n\n/**\n * Set the global log level filter\n */\nexport function setLogLevel(level: LogLevel) {\n globalLogLevel = level;\n}\n\n/**\n * Default logger instance for backward compatibility\n * This provides a simple logger similar to the old logging.ts\n */\nconst defaultLogger = createLogger('System');\n\n// Register default logger in DI container for backward compatibility\nrootContext.put('logger', defaultLogger);\n\nexport default defaultLogger;\n\n"],"mappings":"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"}
|
|
@@ -38,4 +38,4 @@ var logterminal_de_default = {
|
|
|
38
38
|
//#endregion
|
|
39
39
|
export { ALL, ALL_LOGS, AUTO_SCROLL, AUTO_SCROLL_DISABLED, AUTO_SCROLL_ENABLED, CLEAR, CLEAR_LOGS, DEBUG, DEBUG_LOGS, ERRORS, ERROR_LOGS, INFO, INFO_LOGS, MANUAL, NO_LOG_MESSAGES, WARNINGS, WARNING_LOGS, logterminal_de_default as default };
|
|
40
40
|
|
|
41
|
-
//# sourceMappingURL=logterminal.de-
|
|
41
|
+
//# sourceMappingURL=logterminal.de-BP1FuxHH.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logterminal.de-
|
|
1
|
+
{"version":3,"file":"logterminal.de-BP1FuxHH.js","names":[],"sources":["../src/components/logterminal.de.json"],"sourcesContent":["{\n \"ALL_LOGS\": \"Alle Protokolle\",\n \"ALL\": \"Alle\",\n \"INFO_LOGS\": \"Info-Protokolle\",\n \"INFO\": \"Info\",\n \"WARNING_LOGS\": \"Warnungsprotokolle\",\n \"WARNINGS\": \"Warnungen\",\n \"ERROR_LOGS\": \"Fehlerprotokolle\",\n \"ERRORS\": \"Fehler\",\n \"DEBUG_LOGS\": \"Debug-Protokolle\",\n \"DEBUG\": \"Debug\",\n \"AUTO_SCROLL_ENABLED\": \"Automatisches Scrollen aktiviert\",\n \"AUTO_SCROLL_DISABLED\": \"Automatisches Scrollen deaktiviert\",\n \"AUTO_SCROLL\": \"Automatisches Scrollen\",\n \"MANUAL\": \"Manuell\",\n \"CLEAR_LOGS\": \"Protokolle löschen\",\n \"CLEAR\": \"Löschen\",\n \"NO_LOG_MESSAGES\": \"Keine Protokollnachrichten\"\n}\n"],"mappings":""}
|
|
@@ -38,4 +38,4 @@ var logterminal_en_default = {
|
|
|
38
38
|
//#endregion
|
|
39
39
|
export { ALL, ALL_LOGS, AUTO_SCROLL, AUTO_SCROLL_DISABLED, AUTO_SCROLL_ENABLED, CLEAR, CLEAR_LOGS, DEBUG, DEBUG_LOGS, ERRORS, ERROR_LOGS, INFO, INFO_LOGS, MANUAL, NO_LOG_MESSAGES, WARNINGS, WARNING_LOGS, logterminal_en_default as default };
|
|
40
40
|
|
|
41
|
-
//# sourceMappingURL=logterminal.en-
|
|
41
|
+
//# sourceMappingURL=logterminal.en-BeDRvTvb.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logterminal.en-
|
|
1
|
+
{"version":3,"file":"logterminal.en-BeDRvTvb.js","names":[],"sources":["../src/components/logterminal.en.json"],"sourcesContent":["{\n \"ALL_LOGS\": \"All logs\",\n \"ALL\": \"All\",\n \"INFO_LOGS\": \"Info logs\",\n \"INFO\": \"Info\",\n \"WARNING_LOGS\": \"Warning logs\",\n \"WARNINGS\": \"Warnings\",\n \"ERROR_LOGS\": \"Error logs\",\n \"ERRORS\": \"Errors\",\n \"DEBUG_LOGS\": \"Debug logs\",\n \"DEBUG\": \"Debug\",\n \"AUTO_SCROLL_ENABLED\": \"Auto-scroll enabled\",\n \"AUTO_SCROLL_DISABLED\": \"Auto-scroll disabled\",\n \"AUTO_SCROLL\": \"Auto-scroll\",\n \"MANUAL\": \"Manual\",\n \"CLEAR_LOGS\": \"Clear logs\",\n \"CLEAR\": \"Clear\",\n \"NO_LOG_MESSAGES\": \"No log messages\"\n}\n"],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"partname.de-
|
|
1
|
+
{"version":3,"file":"partname.de-C0I4Wf2X.js","names":[],"sources":["../src/components/partname.de.json"],"sourcesContent":["{\n \"NO_PART\": \"<kein Bereich>\",\n \"ACTIVE_PART\": \"Aktiver Bereich\"\n}\n"],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"partname.en-
|
|
1
|
+
{"version":3,"file":"partname.en-CIT8z3cY.js","names":[],"sources":["../src/components/partname.en.json"],"sourcesContent":["{\n \"NO_PART\": \"<no part>\",\n \"ACTIVE_PART\": \"Active part\"\n}\n"],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contextmenu.d.ts","sourceRoot":"","sources":["../../src/parts/contextmenu.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,YAAY,EAAC,MAAM,WAAW,CAAC;AAqBvC,qBACa,gBAAiB,SAAQ,YAAY;IAE9C,WAAW,EAAE,MAAM,EAAE,CAAM;IAGpB,uBAAuB,CAAC,EAAE,MAAM,GAAG,CAAa;IAGvD,OAAO,CAAC,aAAa,CAAsB;IAG3C,OAAO,CAAC,MAAM,CAAkB;IAEhC,OAAO,CAAC,YAAY,CAA4C;IAEhE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAK5B;IAEF,OAAO,CAAC,WAAW,CAA4B;IAE/C,OAAO,CAAC,8BAA8B,CAA6C;IAEnF;;;;;;;;;;OAUG;IACH,OAAO,CAAC,yBAAyB;IAWjC,SAAS,CAAC,UAAU;IAepB,SAAS,CAAC,UAAU,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAO5D,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAO/E,OAAO,CAAC,oBAAoB;IAU5B,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,iBAAiB;IAuBzB,oFAAoF;IACpF,OAAO,CAAC,WAAW;IAOnB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAoB3B,OAAO,CAAC,WAAW;IAQnB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAoB/B,OAAO,CAAC,oBAAoB,CAK1B;IAEF,uGAAuG;IAC1F,IAAI,CAAC,QAAQ,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;IAoBhG,yFAAyF;IACzF,OAAO,CAAC,sBAAsB;IAQ9B,OAAO,CAAC,OAAO;IAMf,SAAS,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAOhE,OAAO,CAAC,kBAAkB;IAI1B,MAAM;
|
|
1
|
+
{"version":3,"file":"contextmenu.d.ts","sourceRoot":"","sources":["../../src/parts/contextmenu.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,YAAY,EAAC,MAAM,WAAW,CAAC;AAqBvC,qBACa,gBAAiB,SAAQ,YAAY;IAE9C,WAAW,EAAE,MAAM,EAAE,CAAM;IAGpB,uBAAuB,CAAC,EAAE,MAAM,GAAG,CAAa;IAGvD,OAAO,CAAC,aAAa,CAAsB;IAG3C,OAAO,CAAC,MAAM,CAAkB;IAEhC,OAAO,CAAC,YAAY,CAA4C;IAEhE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAK5B;IAEF,OAAO,CAAC,WAAW,CAA4B;IAE/C,OAAO,CAAC,8BAA8B,CAA6C;IAEnF;;;;;;;;;;OAUG;IACH,OAAO,CAAC,yBAAyB;IAWjC,SAAS,CAAC,UAAU;IAepB,SAAS,CAAC,UAAU,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAO5D,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAO/E,OAAO,CAAC,oBAAoB;IAU5B,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,iBAAiB;IAuBzB,oFAAoF;IACpF,OAAO,CAAC,WAAW;IAOnB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAoB3B,OAAO,CAAC,WAAW;IAQnB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAoB/B,OAAO,CAAC,oBAAoB,CAK1B;IAEF,uGAAuG;IAC1F,IAAI,CAAC,QAAQ,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;IAoBhG,yFAAyF;IACzF,OAAO,CAAC,sBAAsB;IAQ9B,OAAO,CAAC,OAAO;IAMf,SAAS,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAOhE,OAAO,CAAC,kBAAkB;IAI1B,MAAM;IAkBN,MAAM,CAAC,MAAM,0BAuBX;CACL;AAED,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,qBAAqB;QAC3B,mBAAmB,EAAE,gBAAgB,CAAA;KACxC;CACJ"}
|
package/dist/parts/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import "../parts-
|
|
1
|
+
import "../parts-DQRktiiR.js";
|
package/dist/parts/part.d.ts
CHANGED
|
@@ -8,6 +8,8 @@ export declare abstract class DocksPart extends DocksContainer {
|
|
|
8
8
|
private dirty;
|
|
9
9
|
tabContribution?: TabContribution;
|
|
10
10
|
isEditor: boolean;
|
|
11
|
+
/** Compact layout for dialog/tab embedding (no fill-height shell or nested scroll). */
|
|
12
|
+
embedded: boolean;
|
|
11
13
|
protected commandStack?: CommandStack;
|
|
12
14
|
getCommandStack(): CommandStack | undefined;
|
|
13
15
|
/**
|
package/dist/parts/part.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"part.d.ts","sourceRoot":"","sources":["../../src/parts/part.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAO,cAAc,EAAQ,cAAc,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAEzF,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAK/D,8BAAsB,SAAU,SAAQ,cAAc;IAClD,mIAAmI;IACnI,SAAS,CAAC,UAAU,EAAE,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAc;IAGlE,OAAO,CAAC,KAAK,CAAiB;IAGvB,eAAe,CAAC,EAAE,eAAe,CAAC;IAGlC,QAAQ,EAAE,OAAO,CAAS;IAEjC,SAAS,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;IAE/B,eAAe,IAAI,YAAY,GAAG,SAAS;IAIlD;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,SAAS,CAAC,aAAa,IAAI,cAAc,GAAG,OAAO,OAAO;IAI1D;;;;;OAKG;IACH,SAAS,CAAC,qBAAqB,IAAI,IAAI;IA0BvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkCG;IACH,SAAS,CAAC,iBAAiB,IAAI,cAAc,GAAG,OAAO,OAAO;IAI9D,SAAS,CAAC,aAAa,IAAI,cAAc,GAAG,OAAO,OAAO;IAI1D,8DAA8D;IAC9D,OAAO,CAAC,gBAAgB;IAKxB,uEAAuE;IACvE,OAAO,CAAC,oBAAoB;IAK5B,OAAO,CAAC,oBAAoB,CAM1B;IAEF,OAAO,CAAC,sBAAsB;IAM9B,OAAO,CAAC,8BAA8B;IAUtC,SAAS,CAAC,MAAM;IAuChB,SAAS,CAAC,OAAO,CAAC,kBAAkB,EAAE,cAAc;IAepD,SAAS,CAAC,OAAO;IAGjB,oBAAoB;IAMb,KAAK;IAIZ,iBAAiB;IAOjB,IAAI;IAGG,OAAO;IAIP,SAAS,CAAC,KAAK,EAAE,OAAO;IAQ/B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,
|
|
1
|
+
{"version":3,"file":"part.d.ts","sourceRoot":"","sources":["../../src/parts/part.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAO,cAAc,EAAQ,cAAc,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAEzF,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAK/D,8BAAsB,SAAU,SAAQ,cAAc;IAClD,mIAAmI;IACnI,SAAS,CAAC,UAAU,EAAE,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAc;IAGlE,OAAO,CAAC,KAAK,CAAiB;IAGvB,eAAe,CAAC,EAAE,eAAe,CAAC;IAGlC,QAAQ,EAAE,OAAO,CAAS;IAEjC,uFAAuF;IAEvF,QAAQ,UAAS;IAEjB,SAAS,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;IAE/B,eAAe,IAAI,YAAY,GAAG,SAAS;IAIlD;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,SAAS,CAAC,aAAa,IAAI,cAAc,GAAG,OAAO,OAAO;IAI1D;;;;;OAKG;IACH,SAAS,CAAC,qBAAqB,IAAI,IAAI;IA0BvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkCG;IACH,SAAS,CAAC,iBAAiB,IAAI,cAAc,GAAG,OAAO,OAAO;IAI9D,SAAS,CAAC,aAAa,IAAI,cAAc,GAAG,OAAO,OAAO;IAI1D,8DAA8D;IAC9D,OAAO,CAAC,gBAAgB;IAKxB,uEAAuE;IACvE,OAAO,CAAC,oBAAoB;IAK5B,OAAO,CAAC,oBAAoB,CAM1B;IAEF,OAAO,CAAC,sBAAsB;IAM9B,OAAO,CAAC,8BAA8B;IAUtC,SAAS,CAAC,MAAM;IAuChB,SAAS,CAAC,OAAO,CAAC,kBAAkB,EAAE,cAAc;IAepD,SAAS,CAAC,OAAO;IAGjB,oBAAoB;IAMb,KAAK;IAIZ,iBAAiB;IAOjB,IAAI;IAGG,OAAO;IAIP,SAAS,CAAC,KAAK,EAAE,OAAO;IAQ/B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAyDhC;IAEF,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,cAAc;CAIhD"}
|
|
@@ -9,13 +9,20 @@ export declare class DocksResizableGrid extends DocksElement {
|
|
|
9
9
|
private gridChildren;
|
|
10
10
|
private resizing;
|
|
11
11
|
private resizeOverlay;
|
|
12
|
-
private childrenLoaded;
|
|
13
12
|
private childStylesApplied;
|
|
14
13
|
private mutationObserver?;
|
|
15
|
-
private
|
|
14
|
+
private refreshScheduled;
|
|
15
|
+
private layoutGeneration;
|
|
16
16
|
createRenderRoot(): this;
|
|
17
17
|
protected doBeforeUI(): void;
|
|
18
|
-
private
|
|
18
|
+
private scheduleRefreshGridLayout;
|
|
19
|
+
private getGridChildrenFromDom;
|
|
20
|
+
private static isNestedResizableGrid;
|
|
21
|
+
private applyChildLayoutStyles;
|
|
22
|
+
private resolveGridSizes;
|
|
23
|
+
private resolvePersistedSizes;
|
|
24
|
+
private refreshGridLayout;
|
|
25
|
+
protected doInitUI(): void;
|
|
19
26
|
private saveSizes;
|
|
20
27
|
updated(changedProperties: Map<string, any>): void;
|
|
21
28
|
private startResize;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resizable-grid.d.ts","sourceRoot":"","sources":["../../src/parts/resizable-grid.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAO,OAAO,EAAC,MAAM,KAAK,CAAC;AAClC,OAAO,EAAC,YAAY,EAAC,MAAM,WAAW,CAAC;AAEvC,qBACa,kBAAmB,SAAQ,YAAY;IAChD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAK;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAK;IAGrD,WAAW,EAAE,YAAY,GAAG,UAAU,CAAgB;IAGtD,KAAK,CAAC,EAAE,MAAM,CAAC;IAGf,OAAO,CAAC,SAAS,CAAgB;IAGjC,OAAO,CAAC,YAAY,CAAqB;IAEzC,OAAO,CAAC,QAAQ,CAKA;IAEhB,OAAO,CAAC,aAAa,CAA+B;IACpD,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"resizable-grid.d.ts","sourceRoot":"","sources":["../../src/parts/resizable-grid.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAO,OAAO,EAAC,MAAM,KAAK,CAAC;AAClC,OAAO,EAAC,YAAY,EAAC,MAAM,WAAW,CAAC;AAEvC,qBACa,kBAAmB,SAAQ,YAAY;IAChD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAK;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAK;IAGrD,WAAW,EAAE,YAAY,GAAG,UAAU,CAAgB;IAGtD,KAAK,CAAC,EAAE,MAAM,CAAC;IAGf,OAAO,CAAC,SAAS,CAAgB;IAGjC,OAAO,CAAC,YAAY,CAAqB;IAEzC,OAAO,CAAC,QAAQ,CAKA;IAEhB,OAAO,CAAC,aAAa,CAA+B;IACpD,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,gBAAgB,CAAC,CAAmB;IAC5C,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,gBAAgB,CAAK;IAE7B,gBAAgB;IAOhB,SAAS,CAAC,UAAU;IAQpB,OAAO,CAAC,yBAAyB;IAWjC,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAIpC,OAAO,CAAC,sBAAsB;IAc9B,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,qBAAqB;YAqBf,iBAAiB;IA0C/B,SAAS,CAAC,QAAQ;YAIJ,SAAS;IAoBvB,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC;IAgC3C,OAAO,CAAC,WAAW;IA8CnB,OAAO,CAAC,YAAY,CAoCnB;IAED,OAAO,CAAC,UAAU,CA0BjB;IAID,MAAM;IAiFN,oBAAoB;IAWpB,iBAAiB;CAKpB;AAED,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,qBAAqB;QAC3B,sBAAsB,EAAE,kBAAkB,CAAA;KAC7C;CACJ"}
|
package/dist/parts/tabs.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { DocksContainer } from './container';
|
|
2
2
|
import { TabContribution } from '../core/contributionregistry';
|
|
3
|
+
import { DocksPart } from './part';
|
|
3
4
|
/**
|
|
4
5
|
* DocksTabs - A dynamic tab container component
|
|
5
6
|
*
|
|
@@ -22,6 +23,10 @@ export declare class DocksTabs extends DocksContainer {
|
|
|
22
23
|
*/
|
|
23
24
|
withToolbar: boolean;
|
|
24
25
|
hideTabs: boolean;
|
|
26
|
+
/** Size to tab content instead of filling the parent height (e.g. About dialog). */
|
|
27
|
+
fitContent: boolean;
|
|
28
|
+
/** Fill a fixed-height parent; tab body scrolls instead of resizing the container. */
|
|
29
|
+
fillHeight: boolean;
|
|
25
30
|
/** Tab and nav-toolbar control sizing (`s` | `m` | `l`). */
|
|
26
31
|
itemSize: 's' | 'm' | 'l';
|
|
27
32
|
/** Tab contributions for this container */
|
|
@@ -38,6 +43,7 @@ export declare class DocksTabs extends DocksContainer {
|
|
|
38
43
|
has(key: string): boolean;
|
|
39
44
|
activate(key: string): void;
|
|
40
45
|
getActiveEditor(): string | null;
|
|
46
|
+
getTabPart(tabName: string): DocksPart | null;
|
|
41
47
|
open(contribution: TabContribution): void;
|
|
42
48
|
handleTabAuxClick(event: MouseEvent, contribution: TabContribution): void;
|
|
43
49
|
closeTab(event: Event, tabName: string): Promise<void>;
|