@pstdio/workbench 0.44.0-nightly.20261017030225 → 0.44.0
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/extensions.d.ts +163 -1040
- package/dist/extensions.js +1194 -808
- package/dist/extensions.js.map +1 -1
- package/dist/{file-renderer-view-r1qeAkQT.js → file-renderer-view-C5dyoQQW.js} +211 -214
- package/dist/file-renderer-view-C5dyoQQW.js.map +1 -0
- package/dist/{index-zQfxsv7O.d.ts → index-8x-QT7wg.d.ts} +1994 -533
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2052 -2002
- package/dist/index.js.map +1 -1
- package/dist/{kanban-presentation-BtBGjJnW.d.ts → kanban-presentation-pexk_oCY.d.ts} +1 -1
- package/dist/layout-tab-presentation-Bz6EgFEa.js +15 -0
- package/dist/layout-tab-presentation-Bz6EgFEa.js.map +1 -0
- package/dist/{navigation-tree-registry-CIwRvLFJ.js → navigation-tree-registry-C5l3eO3n.js} +2 -2
- package/dist/{navigation-tree-registry-CIwRvLFJ.js.map → navigation-tree-registry-C5l3eO3n.js.map} +1 -1
- package/dist/react-C-HbdPSw.js +8881 -0
- package/dist/react-C-HbdPSw.js.map +1 -0
- package/dist/react.d.ts +75 -29
- package/dist/react.js +2 -2
- package/dist/storage.d.ts +3 -2
- package/dist/storage.js +142 -123
- package/dist/storage.js.map +1 -1
- package/dist/webview-runtime.js +1 -1
- package/dist/workbench-renderers-Bz_dLyHW.js +4775 -0
- package/dist/workbench-renderers-Bz_dLyHW.js.map +1 -0
- package/package.json +3 -3
- package/dist/file-renderer-view-r1qeAkQT.js.map +0 -1
- package/dist/react-CoeiP5wi.js +0 -10939
- package/dist/react-CoeiP5wi.js.map +0 -1
- package/dist/workbench-renderers-Bj4sazP5.js +0 -976
- package/dist/workbench-renderers-Bj4sazP5.js.map +0 -1
package/dist/storage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","names":["WorkbenchStorageLike","length","getItem","key","index","setItem","value","removeItem","WorkbenchStoragePersistenceKind","CreateWorkbenchStoragePersistenceInput","debounceMs","eventTarget","addEventListener","type","listener","removeEventListener","namespace","storage","workbenchStoragePersistenceKey","kind","scope","createMemoryStorage","map","Map","size","get","keys","set","delete","resolveStorage","localStorage","readJson","T","raw","undefined","JSON","parse","LayoutPersistenceAdapter","WorkbenchLayout","CreateWorkbenchStoragePersistenceInput","readJson","resolveStorage","workbenchStoragePersistenceKey","PersistedWorkbenchLayoutV5","version","layout","PersistedWorkbenchLayout","WORKBENCH_LAYOUT_VERSION","const","WORKBENCH_LAYOUT_INDEX_VERSION","WORKBENCH_LAYOUT_RESOURCE_LIMIT","PersistedWorkbenchLayoutScopeIndex","scopes","PersistedWorkbenchLayoutGeneration","generation","createLocalStorageLayoutPersistence","input","storage","pending","Map","raw","scope","debounceMs","eventTarget","window","addEventListener","type","listener","removeEventListener","undefined","timer","ReturnType","setTimeout","generationKey","namespace","getGeneration","persisted","advanceGeneration","setItem","JSON","stringify","resourceProjectId","match","scopeProjectId","storedProjectScopes","projectId","key","prefix","index","length","startsWith","slice","push","readScopes","kind","Array","isArray","filter","getItem","writeScopes","next","touchProjectScope","candidate","touchResourceScope","evictedScope","splice","Math","max","removeItem","flush","clearTimeout","writes","values","clear","write","scheduleFlush","getLayout","pendingWrite","get","parse","setLayout","delete","set","listScopes","Set","transformLayouts","transform","getCompatibilityMarker","setCompatibilityMarker","value","advanceWriteGeneration","dispose","PersistedTreeRendererStates","PersistedWorkbenchPageLocation","PersistedWorkbenchPanelMenuState","TreeRendererPersistenceAdapter","WorkbenchPageLocationPersistence","WorkbenchPanelMenuStatePersistenceAdapter","WorkbenchPersistenceAdapter","WorkbenchStatusBarPersistenceAdapter","createLocalStorageLayoutPersistence","CreateWorkbenchStoragePersistenceInput","readJson","resolveStorage","workbenchStoragePersistenceKey","WorkbenchStorageLike","WorkbenchStoragePersistenceKind","CreateLocalStoragePanelMenuStatePersistenceInput","scope","CreateLocalStorageTreePersistenceInput","CreateLocalStorageWorkbenchPersistenceInput","StoredWorkbenchPageLocation","version","WORKBENCH_PAGE_LOCATION_VERSION","const","createLocalStoragePageLocationPersistence","input","storage","load","projectId","stored","namespace","undefined","location","rootLevel","save","persisted","setItem","JSON","stringify","createLocalStoragePanelMenuStatePersistence","getMenuStates","setMenuStates","state","key","createLocalStorageTreePersistence","getTreeStates","setTreeStates","createLocalStorageWorkbenchPersistence","layoutPersistence","debounceMs","eventTarget","snapshotPersistence","getSnapshot","layout","getLayout","setSnapshot","snapshot","setLayout","flush","dispose","statusBarKey","statusBarPersistence","getOrder","setOrder","ids","panelMenuStatePersistence","pageLocationPersistence","treePersistence","workbenchStoragePersistenceKey","namespace","kind","scope","createMemoryStorage","map","key","index","value","resolveStorage","storage","readJson","raw","WORKBENCH_LAYOUT_VERSION","WORKBENCH_LAYOUT_INDEX_VERSION","WORKBENCH_LAYOUT_RESOURCE_LIMIT","createLocalStorageLayoutPersistence","input","pending","debounceMs","eventTarget","type","listener","timer","generationKey","getGeneration","persisted","advanceGeneration","generation","resourceProjectId","scopeProjectId","storedProjectScopes","prefix","scopes","projectId","readScopes","writeScopes","next","touchProjectScope","candidate","touchResourceScope","evictedScope","flush","writes","write","scheduleFlush","pendingWrite","layout","transform","WORKBENCH_PAGE_LOCATION_VERSION","createLocalStoragePageLocationPersistence","stored","createLocalStoragePanelMenuStatePersistence","state","createLocalStorageTreePersistence","createLocalStorageWorkbenchPersistence","layoutPersistence","snapshotPersistence","snapshot","statusBarKey","ids"],"sources":["../src/storage/local-storage-persistence-helpers.ts","../src/storage/local-storage-layout-persistence.ts","../src/storage/local-storage-persistence.ts"],"sourcesContent":["export interface WorkbenchStorageLike {\n readonly length?: number;\n getItem(key: string): string | null;\n key?(index: number): string | null;\n setItem(key: string, value: string): void;\n removeItem?(key: string): void;\n}\n\nexport type WorkbenchStoragePersistenceKind =\n | \"layout\"\n | \"layout-compatibility\"\n | \"layout-generation\"\n | \"layout-resource-index\"\n | \"layout-scope-index\"\n | \"panel-menus\"\n | \"page-location\"\n | \"status-bar\"\n | \"tree\";\n\nexport interface CreateWorkbenchStoragePersistenceInput {\n debounceMs?: number;\n eventTarget?: {\n addEventListener(type: \"pagehide\", listener: () => void): void;\n removeEventListener(type: \"pagehide\", listener: () => void): void;\n };\n namespace: string;\n storage?: WorkbenchStorageLike;\n}\n\nexport const workbenchStoragePersistenceKey = (\n namespace: string,\n kind: WorkbenchStoragePersistenceKind,\n scope: string | undefined,\n) => `${namespace}:${kind}:${scope ?? \"global\"}`;\n\nconst createMemoryStorage = (): WorkbenchStorageLike => {\n const map = new Map<string, string>();\n return {\n get length() {\n return map.size;\n },\n getItem: (key) => map.get(key) ?? null,\n key: (index) => [...map.keys()][index] ?? null,\n setItem: (key, value) => {\n map.set(key, value);\n },\n removeItem: (key) => {\n map.delete(key);\n },\n };\n};\n\nexport const resolveStorage = (storage?: WorkbenchStorageLike): WorkbenchStorageLike => {\n if (storage) return storage;\n if (typeof localStorage !== \"undefined\") return localStorage;\n return createMemoryStorage();\n};\n\nexport const readJson = <T>(storage: WorkbenchStorageLike, key: string): T | undefined => {\n const raw = storage.getItem(key);\n if (!raw) return undefined;\n try {\n return JSON.parse(raw) as T;\n } catch {\n return undefined;\n }\n};\n","import type { LayoutPersistenceAdapter, WorkbenchLayout } from \"../core\";\nimport {\n type CreateWorkbenchStoragePersistenceInput,\n readJson,\n resolveStorage,\n workbenchStoragePersistenceKey,\n} from \"./local-storage-persistence-helpers\";\n\ninterface PersistedWorkbenchLayoutV5 {\n version: 5;\n layout: WorkbenchLayout;\n}\n\ntype PersistedWorkbenchLayout = PersistedWorkbenchLayoutV5;\n\n// Version 5 makes the side region's visibility the Side Panel's open state. Older\n// layouts saved a side visibility that never meant open, so they are discarded.\n// Only the layout cache changes; routed locations and independent preferences stay valid.\nconst WORKBENCH_LAYOUT_VERSION = 5 as const;\nconst WORKBENCH_LAYOUT_INDEX_VERSION = 1 as const;\nconst WORKBENCH_LAYOUT_RESOURCE_LIMIT = 50;\n\ninterface PersistedWorkbenchLayoutScopeIndex {\n version: 1;\n scopes: string[];\n}\n\ninterface PersistedWorkbenchLayoutGeneration {\n version: 1;\n generation: number;\n}\n\nexport const createLocalStorageLayoutPersistence = (\n input: CreateWorkbenchStoragePersistenceInput,\n): LayoutPersistenceAdapter => {\n const storage = resolveStorage(input.storage);\n const pending = new Map<string, { generation: number; raw: string; scope: string | undefined }>();\n const debounceMs = input.debounceMs ?? 250;\n const eventTarget =\n input.eventTarget ??\n (typeof window !== \"undefined\"\n ? {\n addEventListener: (type: \"pagehide\", listener: () => void) => window.addEventListener(type, listener),\n removeEventListener: (type: \"pagehide\", listener: () => void) => window.removeEventListener(type, listener),\n }\n : undefined);\n let timer: ReturnType<typeof setTimeout> | undefined;\n\n const generationKey = workbenchStoragePersistenceKey(input.namespace, \"layout-generation\", undefined);\n const getGeneration = () => {\n const persisted = readJson<unknown>(storage, generationKey);\n return typeof persisted === \"object\" &&\n persisted !== null &&\n \"version\" in persisted &&\n persisted.version === 1 &&\n \"generation\" in persisted &&\n typeof persisted.generation === \"number\"\n ? persisted.generation\n : 0;\n };\n\n const advanceGeneration = () => {\n const generation = getGeneration() + 1;\n const persisted: PersistedWorkbenchLayoutGeneration = { version: 1, generation };\n storage.setItem(generationKey, JSON.stringify(persisted));\n return generation;\n };\n\n const resourceProjectId = (scope: string | undefined) =>\n scope?.match(/^project\\/([^/]+)\\/mode\\/[^/]+\\/resource\\//)?.[1];\n const scopeProjectId = (scope: string | undefined) => scope?.match(/^project\\/([^/]+)/)?.[1];\n\n const storedProjectScopes = (projectId: string) => {\n if (!storage.key) return [];\n const prefix = `${input.namespace}:layout:`;\n const scopes: string[] = [];\n for (let index = 0; index < (storage.length ?? 0); index += 1) {\n const key = storage.key(index);\n if (!key?.startsWith(prefix)) continue;\n const scope = key.slice(prefix.length);\n if (scopeProjectId(scope) === projectId) scopes.push(scope);\n }\n return scopes;\n };\n\n const readScopes = (kind: \"layout-resource-index\" | \"layout-scope-index\", projectId: string) => {\n const persisted = readJson<unknown>(storage, workbenchStoragePersistenceKey(input.namespace, kind, projectId));\n return typeof persisted === \"object\" &&\n persisted !== null &&\n \"version\" in persisted &&\n persisted.version === WORKBENCH_LAYOUT_INDEX_VERSION &&\n \"scopes\" in persisted &&\n Array.isArray(persisted.scopes)\n ? persisted.scopes.filter(\n (scope): scope is string =>\n typeof scope === \"string\" &&\n storage.getItem(workbenchStoragePersistenceKey(input.namespace, \"layout\", scope)) !== null,\n )\n : [];\n };\n\n const writeScopes = (kind: \"layout-resource-index\" | \"layout-scope-index\", projectId: string, scopes: string[]) => {\n const next: PersistedWorkbenchLayoutScopeIndex = { version: WORKBENCH_LAYOUT_INDEX_VERSION, scopes };\n storage.setItem(workbenchStoragePersistenceKey(input.namespace, kind, projectId), JSON.stringify(next));\n };\n\n const touchProjectScope = (scope: string | undefined) => {\n const projectId = scopeProjectId(scope);\n if (!projectId || !scope) return;\n const scopes = readScopes(\"layout-scope-index\", projectId).filter((candidate) => candidate !== scope);\n scopes.push(scope);\n writeScopes(\"layout-scope-index\", projectId, scopes);\n };\n\n const touchResourceScope = (scope: string | undefined) => {\n const projectId = resourceProjectId(scope);\n if (!projectId || !scope) return;\n const scopes = readScopes(\"layout-resource-index\", projectId).filter((candidate) => candidate !== scope);\n scopes.push(scope);\n for (const evictedScope of scopes.splice(0, Math.max(0, scopes.length - WORKBENCH_LAYOUT_RESOURCE_LIMIT))) {\n storage.removeItem?.(workbenchStoragePersistenceKey(input.namespace, \"layout\", evictedScope));\n storage.removeItem?.(workbenchStoragePersistenceKey(input.namespace, \"panel-menus\", evictedScope));\n }\n writeScopes(\"layout-resource-index\", projectId, scopes);\n };\n\n const flush = () => {\n if (timer) clearTimeout(timer);\n timer = undefined;\n const writes = [...pending.values()];\n pending.clear();\n const generation = getGeneration();\n for (const write of writes) {\n if (write.generation !== generation) continue;\n storage.setItem(workbenchStoragePersistenceKey(input.namespace, \"layout\", write.scope), write.raw);\n touchProjectScope(write.scope);\n touchResourceScope(write.scope);\n }\n };\n\n const scheduleFlush = () => {\n if (debounceMs === 0) {\n flush();\n return;\n }\n if (timer) clearTimeout(timer);\n timer = setTimeout(flush, debounceMs);\n };\n\n eventTarget?.addEventListener(\"pagehide\", flush);\n\n return {\n getLayout: (scope) => {\n const key = workbenchStoragePersistenceKey(input.namespace, \"layout\", scope);\n const pendingWrite = pending.get(key);\n const persisted =\n pendingWrite && pendingWrite.generation === getGeneration()\n ? (JSON.parse(pendingWrite.raw) as PersistedWorkbenchLayout)\n : readJson<PersistedWorkbenchLayout>(storage, key);\n if (persisted?.version === WORKBENCH_LAYOUT_VERSION) return persisted.layout;\n return undefined;\n },\n setLayout: (layout, scope) => {\n const persisted: PersistedWorkbenchLayoutV5 = { version: WORKBENCH_LAYOUT_VERSION, layout };\n const key = workbenchStoragePersistenceKey(input.namespace, \"layout\", scope);\n pending.delete(key);\n pending.set(key, {\n generation: getGeneration(),\n raw: JSON.stringify(persisted),\n scope,\n });\n scheduleFlush();\n },\n flush,\n listScopes(projectId) {\n return [\n ...new Set([\n ...readScopes(\"layout-scope-index\", projectId),\n ...readScopes(\"layout-resource-index\", projectId),\n ...storedProjectScopes(projectId),\n ]),\n ];\n },\n transformLayouts(projectId, transform) {\n flush();\n advanceGeneration();\n for (const scope of this.listScopes?.(projectId) ?? []) {\n const key = workbenchStoragePersistenceKey(input.namespace, \"layout\", scope);\n const persisted = readJson<PersistedWorkbenchLayout>(storage, key);\n if (persisted?.version !== WORKBENCH_LAYOUT_VERSION) continue;\n const layout = transform(persisted.layout, scope);\n if (!layout) {\n storage.removeItem?.(key);\n continue;\n }\n storage.setItem(\n key,\n JSON.stringify({ version: WORKBENCH_LAYOUT_VERSION, layout } satisfies PersistedWorkbenchLayoutV5),\n );\n }\n },\n getCompatibilityMarker: (key) =>\n readJson<string>(storage, workbenchStoragePersistenceKey(input.namespace, \"layout-compatibility\", key)),\n setCompatibilityMarker: (key, value) => {\n advanceGeneration();\n storage.setItem(\n workbenchStoragePersistenceKey(input.namespace, \"layout-compatibility\", key),\n JSON.stringify(value),\n );\n },\n advanceWriteGeneration: advanceGeneration,\n dispose() {\n flush();\n eventTarget?.removeEventListener(\"pagehide\", flush);\n },\n };\n};\n","import type {\n PersistedTreeRendererStates,\n PersistedWorkbenchPageLocation,\n PersistedWorkbenchPanelMenuState,\n TreeRendererPersistenceAdapter,\n WorkbenchPageLocationPersistence,\n WorkbenchPanelMenuStatePersistenceAdapter,\n WorkbenchPersistenceAdapter,\n WorkbenchStatusBarPersistenceAdapter,\n} from \"../core\";\nimport { createLocalStorageLayoutPersistence } from \"./local-storage-layout-persistence\";\nimport {\n type CreateWorkbenchStoragePersistenceInput,\n readJson,\n resolveStorage,\n workbenchStoragePersistenceKey,\n} from \"./local-storage-persistence-helpers\";\n\nexport type {\n WorkbenchStorageLike,\n WorkbenchStoragePersistenceKind,\n} from \"./local-storage-persistence-helpers\";\nexport { createLocalStorageLayoutPersistence, workbenchStoragePersistenceKey };\n\nexport interface CreateLocalStoragePanelMenuStatePersistenceInput extends CreateWorkbenchStoragePersistenceInput {\n scope: string;\n}\n\nexport interface CreateLocalStorageTreePersistenceInput extends CreateWorkbenchStoragePersistenceInput {\n scope?: string;\n}\n\nexport interface CreateLocalStorageWorkbenchPersistenceInput extends CreateWorkbenchStoragePersistenceInput {\n scope?: string;\n}\n\ntype StoredWorkbenchPageLocation = PersistedWorkbenchPageLocation & { version: 1 };\n\nconst WORKBENCH_PAGE_LOCATION_VERSION = 1 as const;\n\nexport const createLocalStoragePageLocationPersistence = (\n input: CreateWorkbenchStoragePersistenceInput,\n): WorkbenchPageLocationPersistence => {\n const storage = resolveStorage(input.storage);\n return {\n load: (projectId) => {\n const stored = readJson<StoredWorkbenchPageLocation>(\n storage,\n workbenchStoragePersistenceKey(input.namespace, \"page-location\", projectId),\n );\n if (stored?.version !== WORKBENCH_PAGE_LOCATION_VERSION) return undefined;\n return { location: stored.location, ...(stored.rootLevel ? { rootLevel: stored.rootLevel } : {}) };\n },\n save: (projectId, persisted) => {\n const stored: StoredWorkbenchPageLocation = { version: WORKBENCH_PAGE_LOCATION_VERSION, ...persisted };\n storage.setItem(\n workbenchStoragePersistenceKey(input.namespace, \"page-location\", projectId),\n JSON.stringify(stored),\n );\n },\n };\n};\nexport const createLocalStoragePanelMenuStatePersistence = (\n input: CreateLocalStoragePanelMenuStatePersistenceInput,\n): WorkbenchPanelMenuStatePersistenceAdapter => {\n const storage = resolveStorage(input.storage);\n return {\n getMenuStates: (scope) =>\n readJson<PersistedWorkbenchPanelMenuState>(\n storage,\n workbenchStoragePersistenceKey(input.namespace, \"panel-menus\", scope ?? input.scope),\n ),\n setMenuStates: (state, scope) => {\n const key = workbenchStoragePersistenceKey(input.namespace, \"panel-menus\", scope ?? input.scope);\n storage.setItem(key, JSON.stringify(state));\n },\n };\n};\n\nexport const createLocalStorageTreePersistence = (\n input: CreateLocalStorageTreePersistenceInput,\n): TreeRendererPersistenceAdapter => {\n const storage = resolveStorage(input.storage);\n const key = workbenchStoragePersistenceKey(input.namespace, \"tree\", input.scope);\n return {\n getTreeStates: () => readJson<PersistedTreeRendererStates>(storage, key),\n setTreeStates: (state) => {\n storage.setItem(key, JSON.stringify(state));\n },\n };\n};\n\nexport const createLocalStorageWorkbenchPersistence = (input: CreateLocalStorageWorkbenchPersistenceInput) => {\n const storage = resolveStorage(input.storage);\n const layoutPersistence = createLocalStorageLayoutPersistence({\n debounceMs: input.debounceMs,\n eventTarget: input.eventTarget,\n namespace: input.namespace,\n storage,\n });\n const snapshotPersistence: WorkbenchPersistenceAdapter = {\n getSnapshot: (scope) => {\n const layout = layoutPersistence.getLayout(scope);\n return layout ? { layout } : undefined;\n },\n setSnapshot: (snapshot, scope) => layoutPersistence.setLayout(snapshot.layout, scope),\n flush: layoutPersistence.flush,\n dispose: layoutPersistence.dispose,\n };\n const statusBarKey = workbenchStoragePersistenceKey(input.namespace, \"status-bar\", undefined);\n const statusBarPersistence: WorkbenchStatusBarPersistenceAdapter = {\n getOrder: () => readJson<string[]>(storage, statusBarKey),\n setOrder: (ids) => storage.setItem(statusBarKey, JSON.stringify(ids)),\n };\n\n return {\n snapshotPersistence,\n statusBarPersistence,\n layoutPersistence,\n panelMenuStatePersistence: createLocalStoragePanelMenuStatePersistence({\n namespace: input.namespace,\n scope: input.scope ?? \"global\",\n storage,\n }),\n pageLocationPersistence: createLocalStoragePageLocationPersistence({ namespace: input.namespace, storage }),\n treePersistence: createLocalStorageTreePersistence({ namespace: input.namespace, scope: input.scope, storage }),\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"storage.js","names":["WorkbenchStorageLike","length","getItem","key","index","setItem","value","removeItem","WorkbenchStoragePersistenceKind","CreateWorkbenchStoragePersistenceInput","debounceMs","eventTarget","addEventListener","type","listener","removeEventListener","namespace","storage","workbenchStoragePersistenceKey","kind","scope","createMemoryStorage","map","Map","size","get","keys","set","delete","resolveStorage","localStorage","readJson","T","raw","undefined","JSON","parse","LayoutPersistenceAdapter","WorkbenchLayout","cacheLayoutData","CreateWorkbenchStoragePersistenceInput","readJson","resolveStorage","workbenchStoragePersistenceKey","PersistedWorkbenchLayoutV5","version","layout","PersistedWorkbenchLayout","WORKBENCH_LAYOUT_VERSION","const","WORKBENCH_LAYOUT_INDEX_VERSION","WORKBENCH_LAYOUT_RESOURCE_LIMIT","PersistedWorkbenchLayoutScopeIndex","scopes","PersistedWorkbenchLayoutGeneration","generation","createLocalStorageLayoutPersistence","input","storage","pending","Map","raw","scope","debounceMs","eventTarget","window","addEventListener","type","listener","removeEventListener","undefined","timer","ReturnType","setTimeout","generationKey","namespace","getGeneration","persisted","advanceGeneration","setItem","JSON","stringify","resourceProjectId","match","scopeProjectId","storedProjectScopes","projectId","key","prefix","index","length","startsWith","slice","push","readScopes","kind","Array","isArray","filter","getItem","writeScopes","next","touchProjectScope","candidate","touchResourceScope","evictedScope","splice","Math","max","removeItem","flush","clearTimeout","writes","values","clear","write","scheduleFlush","getLayout","pendingWrite","get","parse","setLayout","delete","set","listScopes","Set","transformLayouts","transform","getCompatibilityMarker","setCompatibilityMarker","value","advanceWriteGeneration","dispose","PersistedTreeRendererStates","PersistedWorkbenchPageLocation","PersistedWorkbenchPanelMenuState","PreferencePersistenceAdapter","PreferenceValue","TreeRendererPersistenceAdapter","WorkbenchPageLocationPersistence","WorkbenchPanelMenuStatePersistenceAdapter","WorkbenchPersistenceAdapter","WorkbenchStatusBarPersistenceAdapter","createLocalStorageLayoutPersistence","CreateWorkbenchStoragePersistenceInput","readJson","resolveStorage","workbenchStoragePersistenceKey","WorkbenchStorageLike","WorkbenchStoragePersistenceKind","CreateLocalStoragePanelMenuStatePersistenceInput","scope","CreateLocalStorageTreePersistenceInput","CreateLocalStorageWorkbenchPersistenceInput","StoredWorkbenchPageLocation","version","WORKBENCH_PAGE_LOCATION_VERSION","const","createLocalStoragePageLocationPersistence","input","storage","load","projectId","stored","namespace","undefined","location","rootLevel","save","persisted","setItem","JSON","stringify","createLocalStoragePanelMenuStatePersistence","getMenuStates","setMenuStates","state","key","createLocalStorageTreePersistence","getTreeStates","setTreeStates","createLocalStorageWorkbenchPersistence","preferenceKey","preferencePersistence","getValue","name","Record","scopeId","setValue","value","values","layoutPersistence","debounceMs","eventTarget","snapshotPersistence","getSnapshot","layout","getLayout","setSnapshot","snapshot","setLayout","flush","dispose","statusBarKey","statusBarPersistence","getOrder","setOrder","ids","panelMenuStatePersistence","pageLocationPersistence","treePersistence","cacheLayoutData","workbenchStoragePersistenceKey","namespace","kind","scope","createMemoryStorage","map","key","index","value","resolveStorage","storage","readJson","raw","WORKBENCH_LAYOUT_VERSION","WORKBENCH_LAYOUT_INDEX_VERSION","WORKBENCH_LAYOUT_RESOURCE_LIMIT","createLocalStorageLayoutPersistence","input","pending","debounceMs","eventTarget","type","listener","timer","generationKey","getGeneration","persisted","advanceGeneration","generation","resourceProjectId","scopeProjectId","storedProjectScopes","prefix","scopes","projectId","readScopes","writeScopes","next","touchProjectScope","candidate","touchResourceScope","evictedScope","flush","writes","write","scheduleFlush","pendingWrite","layout","transform","WORKBENCH_PAGE_LOCATION_VERSION","createLocalStoragePageLocationPersistence","stored","createLocalStoragePanelMenuStatePersistence","state","createLocalStorageTreePersistence","createLocalStorageWorkbenchPersistence","preferenceKey","preferencePersistence","name","values","layoutPersistence","snapshotPersistence","snapshot","statusBarKey","ids"],"sources":["../src/storage/local-storage-persistence-helpers.ts","../src/storage/local-storage-layout-persistence.ts","../src/storage/local-storage-persistence.ts"],"sourcesContent":["export interface WorkbenchStorageLike {\n readonly length?: number;\n getItem(key: string): string | null;\n key?(index: number): string | null;\n setItem(key: string, value: string): void;\n removeItem?(key: string): void;\n}\n\nexport type WorkbenchStoragePersistenceKind =\n | \"layout\"\n | \"layout-compatibility\"\n | \"layout-generation\"\n | \"layout-resource-index\"\n | \"layout-scope-index\"\n | \"panel-menus\"\n | \"page-location\"\n | \"preferences\"\n | \"status-bar\"\n | \"tree\";\n\nexport interface CreateWorkbenchStoragePersistenceInput {\n debounceMs?: number;\n eventTarget?: {\n addEventListener(type: \"pagehide\", listener: () => void): void;\n removeEventListener(type: \"pagehide\", listener: () => void): void;\n };\n namespace: string;\n storage?: WorkbenchStorageLike;\n}\n\nexport const workbenchStoragePersistenceKey = (\n namespace: string,\n kind: WorkbenchStoragePersistenceKind,\n scope: string | undefined,\n) => `${namespace}:${kind}:${scope ?? \"global\"}`;\n\nconst createMemoryStorage = (): WorkbenchStorageLike => {\n const map = new Map<string, string>();\n return {\n get length() {\n return map.size;\n },\n getItem: (key) => map.get(key) ?? null,\n key: (index) => [...map.keys()][index] ?? null,\n setItem: (key, value) => {\n map.set(key, value);\n },\n removeItem: (key) => {\n map.delete(key);\n },\n };\n};\n\nexport const resolveStorage = (storage?: WorkbenchStorageLike): WorkbenchStorageLike => {\n if (storage) return storage;\n if (typeof localStorage !== \"undefined\") return localStorage;\n return createMemoryStorage();\n};\n\nexport const readJson = <T>(storage: WorkbenchStorageLike, key: string): T | undefined => {\n const raw = storage.getItem(key);\n if (!raw) return undefined;\n try {\n return JSON.parse(raw) as T;\n } catch {\n return undefined;\n }\n};\n","import type { LayoutPersistenceAdapter, WorkbenchLayout } from \"../core\";\nimport { cacheLayoutData } from \"../core/registries/layout/layout-tab-presentation\";\nimport {\n type CreateWorkbenchStoragePersistenceInput,\n readJson,\n resolveStorage,\n workbenchStoragePersistenceKey,\n} from \"./local-storage-persistence-helpers\";\n\ninterface PersistedWorkbenchLayoutV5 {\n version: 5;\n layout: WorkbenchLayout;\n}\n\ntype PersistedWorkbenchLayout = PersistedWorkbenchLayoutV5;\n\n// Version 5 makes the side region's visibility the Side Panel's open state. Older\n// layouts saved a side visibility that never meant open, so they are discarded.\n// Only the layout cache changes; routed locations and independent preferences stay valid.\nconst WORKBENCH_LAYOUT_VERSION = 5 as const;\nconst WORKBENCH_LAYOUT_INDEX_VERSION = 1 as const;\nconst WORKBENCH_LAYOUT_RESOURCE_LIMIT = 50;\n\ninterface PersistedWorkbenchLayoutScopeIndex {\n version: 1;\n scopes: string[];\n}\n\ninterface PersistedWorkbenchLayoutGeneration {\n version: 1;\n generation: number;\n}\n\nexport const createLocalStorageLayoutPersistence = (\n input: CreateWorkbenchStoragePersistenceInput,\n): LayoutPersistenceAdapter => {\n const storage = resolveStorage(input.storage);\n const pending = new Map<string, { generation: number; raw: string; scope: string | undefined }>();\n const debounceMs = input.debounceMs ?? 250;\n const eventTarget =\n input.eventTarget ??\n (typeof window !== \"undefined\"\n ? {\n addEventListener: (type: \"pagehide\", listener: () => void) => window.addEventListener(type, listener),\n removeEventListener: (type: \"pagehide\", listener: () => void) => window.removeEventListener(type, listener),\n }\n : undefined);\n let timer: ReturnType<typeof setTimeout> | undefined;\n\n const generationKey = workbenchStoragePersistenceKey(input.namespace, \"layout-generation\", undefined);\n const getGeneration = () => {\n const persisted = readJson<unknown>(storage, generationKey);\n return typeof persisted === \"object\" &&\n persisted !== null &&\n \"version\" in persisted &&\n persisted.version === 1 &&\n \"generation\" in persisted &&\n typeof persisted.generation === \"number\"\n ? persisted.generation\n : 0;\n };\n\n const advanceGeneration = () => {\n const generation = getGeneration() + 1;\n const persisted: PersistedWorkbenchLayoutGeneration = { version: 1, generation };\n storage.setItem(generationKey, JSON.stringify(persisted));\n return generation;\n };\n\n const resourceProjectId = (scope: string | undefined) =>\n scope?.match(/^project\\/([^/]+)\\/mode\\/[^/]+\\/resource\\//)?.[1];\n const scopeProjectId = (scope: string | undefined) => scope?.match(/^project\\/([^/]+)/)?.[1];\n\n const storedProjectScopes = (projectId: string) => {\n if (!storage.key) return [];\n const prefix = `${input.namespace}:layout:`;\n const scopes: string[] = [];\n for (let index = 0; index < (storage.length ?? 0); index += 1) {\n const key = storage.key(index);\n if (!key?.startsWith(prefix)) continue;\n const scope = key.slice(prefix.length);\n if (scopeProjectId(scope) === projectId) scopes.push(scope);\n }\n return scopes;\n };\n\n const readScopes = (kind: \"layout-resource-index\" | \"layout-scope-index\", projectId: string) => {\n const persisted = readJson<unknown>(storage, workbenchStoragePersistenceKey(input.namespace, kind, projectId));\n return typeof persisted === \"object\" &&\n persisted !== null &&\n \"version\" in persisted &&\n persisted.version === WORKBENCH_LAYOUT_INDEX_VERSION &&\n \"scopes\" in persisted &&\n Array.isArray(persisted.scopes)\n ? persisted.scopes.filter(\n (scope): scope is string =>\n typeof scope === \"string\" &&\n storage.getItem(workbenchStoragePersistenceKey(input.namespace, \"layout\", scope)) !== null,\n )\n : [];\n };\n\n const writeScopes = (kind: \"layout-resource-index\" | \"layout-scope-index\", projectId: string, scopes: string[]) => {\n const next: PersistedWorkbenchLayoutScopeIndex = { version: WORKBENCH_LAYOUT_INDEX_VERSION, scopes };\n storage.setItem(workbenchStoragePersistenceKey(input.namespace, kind, projectId), JSON.stringify(next));\n };\n\n const touchProjectScope = (scope: string | undefined) => {\n const projectId = scopeProjectId(scope);\n if (!projectId || !scope) return;\n const scopes = readScopes(\"layout-scope-index\", projectId).filter((candidate) => candidate !== scope);\n scopes.push(scope);\n writeScopes(\"layout-scope-index\", projectId, scopes);\n };\n\n const touchResourceScope = (scope: string | undefined) => {\n const projectId = resourceProjectId(scope);\n if (!projectId || !scope) return;\n const scopes = readScopes(\"layout-resource-index\", projectId).filter((candidate) => candidate !== scope);\n scopes.push(scope);\n for (const evictedScope of scopes.splice(0, Math.max(0, scopes.length - WORKBENCH_LAYOUT_RESOURCE_LIMIT))) {\n storage.removeItem?.(workbenchStoragePersistenceKey(input.namespace, \"layout\", evictedScope));\n storage.removeItem?.(workbenchStoragePersistenceKey(input.namespace, \"panel-menus\", evictedScope));\n }\n writeScopes(\"layout-resource-index\", projectId, scopes);\n };\n\n const flush = () => {\n if (timer) clearTimeout(timer);\n timer = undefined;\n const writes = [...pending.values()];\n pending.clear();\n const generation = getGeneration();\n for (const write of writes) {\n if (write.generation !== generation) continue;\n storage.setItem(workbenchStoragePersistenceKey(input.namespace, \"layout\", write.scope), write.raw);\n touchProjectScope(write.scope);\n touchResourceScope(write.scope);\n }\n };\n\n const scheduleFlush = () => {\n if (debounceMs === 0) {\n flush();\n return;\n }\n if (timer) clearTimeout(timer);\n timer = setTimeout(flush, debounceMs);\n };\n\n eventTarget?.addEventListener(\"pagehide\", flush);\n\n return {\n getLayout: (scope) => {\n const key = workbenchStoragePersistenceKey(input.namespace, \"layout\", scope);\n const pendingWrite = pending.get(key);\n const persisted =\n pendingWrite && pendingWrite.generation === getGeneration()\n ? (JSON.parse(pendingWrite.raw) as PersistedWorkbenchLayout)\n : readJson<PersistedWorkbenchLayout>(storage, key);\n if (persisted?.version === WORKBENCH_LAYOUT_VERSION) return persisted.layout;\n return undefined;\n },\n setLayout: (layout, scope) => {\n const persisted: PersistedWorkbenchLayoutV5 = {\n version: WORKBENCH_LAYOUT_VERSION,\n layout: cacheLayoutData(layout),\n };\n const key = workbenchStoragePersistenceKey(input.namespace, \"layout\", scope);\n pending.delete(key);\n pending.set(key, {\n generation: getGeneration(),\n raw: JSON.stringify(persisted),\n scope,\n });\n scheduleFlush();\n },\n flush,\n listScopes(projectId) {\n return [\n ...new Set([\n ...readScopes(\"layout-scope-index\", projectId),\n ...readScopes(\"layout-resource-index\", projectId),\n ...storedProjectScopes(projectId),\n ]),\n ];\n },\n transformLayouts(projectId, transform) {\n flush();\n advanceGeneration();\n for (const scope of this.listScopes?.(projectId) ?? []) {\n const key = workbenchStoragePersistenceKey(input.namespace, \"layout\", scope);\n const persisted = readJson<PersistedWorkbenchLayout>(storage, key);\n if (persisted?.version !== WORKBENCH_LAYOUT_VERSION) continue;\n const layout = transform(persisted.layout, scope);\n if (!layout) {\n storage.removeItem?.(key);\n continue;\n }\n storage.setItem(\n key,\n JSON.stringify({ version: WORKBENCH_LAYOUT_VERSION, layout } satisfies PersistedWorkbenchLayoutV5),\n );\n }\n },\n getCompatibilityMarker: (key) =>\n readJson<string>(storage, workbenchStoragePersistenceKey(input.namespace, \"layout-compatibility\", key)),\n setCompatibilityMarker: (key, value) => {\n advanceGeneration();\n storage.setItem(\n workbenchStoragePersistenceKey(input.namespace, \"layout-compatibility\", key),\n JSON.stringify(value),\n );\n },\n advanceWriteGeneration: advanceGeneration,\n dispose() {\n flush();\n eventTarget?.removeEventListener(\"pagehide\", flush);\n },\n };\n};\n","import type {\n PersistedTreeRendererStates,\n PersistedWorkbenchPageLocation,\n PersistedWorkbenchPanelMenuState,\n PreferencePersistenceAdapter,\n PreferenceValue,\n TreeRendererPersistenceAdapter,\n WorkbenchPageLocationPersistence,\n WorkbenchPanelMenuStatePersistenceAdapter,\n WorkbenchPersistenceAdapter,\n WorkbenchStatusBarPersistenceAdapter,\n} from \"../core\";\nimport { createLocalStorageLayoutPersistence } from \"./local-storage-layout-persistence\";\nimport {\n type CreateWorkbenchStoragePersistenceInput,\n readJson,\n resolveStorage,\n workbenchStoragePersistenceKey,\n} from \"./local-storage-persistence-helpers\";\n\nexport type {\n WorkbenchStorageLike,\n WorkbenchStoragePersistenceKind,\n} from \"./local-storage-persistence-helpers\";\nexport { createLocalStorageLayoutPersistence, workbenchStoragePersistenceKey };\n\nexport interface CreateLocalStoragePanelMenuStatePersistenceInput extends CreateWorkbenchStoragePersistenceInput {\n scope: string;\n}\n\nexport interface CreateLocalStorageTreePersistenceInput extends CreateWorkbenchStoragePersistenceInput {\n scope?: string;\n}\n\nexport interface CreateLocalStorageWorkbenchPersistenceInput extends CreateWorkbenchStoragePersistenceInput {\n scope?: string;\n}\n\ntype StoredWorkbenchPageLocation = PersistedWorkbenchPageLocation & { version: 1 };\n\nconst WORKBENCH_PAGE_LOCATION_VERSION = 1 as const;\n\nexport const createLocalStoragePageLocationPersistence = (\n input: CreateWorkbenchStoragePersistenceInput,\n): WorkbenchPageLocationPersistence => {\n const storage = resolveStorage(input.storage);\n return {\n load: (projectId) => {\n const stored = readJson<StoredWorkbenchPageLocation>(\n storage,\n workbenchStoragePersistenceKey(input.namespace, \"page-location\", projectId),\n );\n if (stored?.version !== WORKBENCH_PAGE_LOCATION_VERSION) return undefined;\n return { location: stored.location, ...(stored.rootLevel ? { rootLevel: stored.rootLevel } : {}) };\n },\n save: (projectId, persisted) => {\n const stored: StoredWorkbenchPageLocation = { version: WORKBENCH_PAGE_LOCATION_VERSION, ...persisted };\n storage.setItem(\n workbenchStoragePersistenceKey(input.namespace, \"page-location\", projectId),\n JSON.stringify(stored),\n );\n },\n };\n};\nexport const createLocalStoragePanelMenuStatePersistence = (\n input: CreateLocalStoragePanelMenuStatePersistenceInput,\n): WorkbenchPanelMenuStatePersistenceAdapter => {\n const storage = resolveStorage(input.storage);\n return {\n getMenuStates: (scope) =>\n readJson<PersistedWorkbenchPanelMenuState>(\n storage,\n workbenchStoragePersistenceKey(input.namespace, \"panel-menus\", scope ?? input.scope),\n ),\n setMenuStates: (state, scope) => {\n const key = workbenchStoragePersistenceKey(input.namespace, \"panel-menus\", scope ?? input.scope);\n storage.setItem(key, JSON.stringify(state));\n },\n };\n};\n\nexport const createLocalStorageTreePersistence = (\n input: CreateLocalStorageTreePersistenceInput,\n): TreeRendererPersistenceAdapter => {\n const storage = resolveStorage(input.storage);\n const key = workbenchStoragePersistenceKey(input.namespace, \"tree\", input.scope);\n return {\n getTreeStates: () => readJson<PersistedTreeRendererStates>(storage, key),\n setTreeStates: (state) => {\n storage.setItem(key, JSON.stringify(state));\n },\n };\n};\n\nexport const createLocalStorageWorkbenchPersistence = (input: CreateLocalStorageWorkbenchPersistenceInput) => {\n const storage = resolveStorage(input.storage);\n const preferenceKey = workbenchStoragePersistenceKey(input.namespace, \"preferences\", undefined);\n const preferencePersistence: PreferencePersistenceAdapter = {\n getValue: (name, scope) =>\n readJson<Record<string, PreferenceValue>>(storage, preferenceKey)?.[\n JSON.stringify([name, scope.scope, scope.scopeId])\n ],\n setValue: (name, value, scope) => {\n const values = readJson<Record<string, PreferenceValue>>(storage, preferenceKey) ?? {};\n storage.setItem(\n preferenceKey,\n JSON.stringify({ ...values, [JSON.stringify([name, scope.scope, scope.scopeId])]: value }),\n );\n },\n };\n const layoutPersistence = createLocalStorageLayoutPersistence({\n debounceMs: input.debounceMs,\n eventTarget: input.eventTarget,\n namespace: input.namespace,\n storage,\n });\n const snapshotPersistence: WorkbenchPersistenceAdapter = {\n getSnapshot: (scope) => {\n const layout = layoutPersistence.getLayout(scope);\n return layout ? { layout } : undefined;\n },\n setSnapshot: (snapshot, scope) => layoutPersistence.setLayout(snapshot.layout, scope),\n flush: layoutPersistence.flush,\n dispose: layoutPersistence.dispose,\n };\n const statusBarKey = workbenchStoragePersistenceKey(input.namespace, \"status-bar\", undefined);\n const statusBarPersistence: WorkbenchStatusBarPersistenceAdapter = {\n getOrder: () => readJson<string[]>(storage, statusBarKey),\n setOrder: (ids) => storage.setItem(statusBarKey, JSON.stringify(ids)),\n };\n\n return {\n preferencePersistence,\n snapshotPersistence,\n statusBarPersistence,\n layoutPersistence,\n panelMenuStatePersistence: createLocalStoragePanelMenuStatePersistence({\n namespace: input.namespace,\n scope: input.scope ?? \"global\",\n storage,\n }),\n pageLocationPersistence: createLocalStoragePageLocationPersistence({ namespace: input.namespace, storage }),\n treePersistence: createLocalStorageTreePersistence({ namespace: input.namespace, scope: input.scope, storage }),\n };\n};\n"],"mappings":"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"}
|
package/dist/webview-runtime.js
CHANGED
|
@@ -27,7 +27,7 @@ var e = "pstdio-extension-mount", t = (e) => e.replaceAll("&", "&").replaceA
|
|
|
27
27
|
${t}
|
|
28
28
|
</body>
|
|
29
29
|
</html>
|
|
30
|
-
`, i = (e) => r(`<script src="${t(e)}"><\/script>`), a = (e) => r(`<script>${n(e)}<\/script>`), o = () => "// Generated by packages/pstdio-extensions/scripts/build-runtime.ts\nfunction ne(){let e=globalThis;if(e.window!==void 0&&e.document!==void 0)return\"browser\";if(e.WorkerGlobalScope!==void 0&&e.self!==void 0&&e.self instanceof e.WorkerGlobalScope||e.window===void 0&&e.self!==void 0&&typeof e.importScripts==\"function\")return\"worker\";let t=e.process;if(t&&typeof t==\"object\"){let r=t.versions??{},n=t.release?.name;if(r.bun||n===\"bun\"||e.Bun!==void 0)return\"bun\";if(r.node&&n===\"node\")return\"node\"}return e.Bun===void 0?\"browser\":\"bun\"}function T(){return ne()}function z(){return T()===\"worker\"}function B(){let e=T();return e===\"node\"||e===\"bun\"}function se(){return window.self!==window.top}function oe(e){let t={};return function r(n,a=\"\"){Object.keys(n).forEach((s)=>{let o=a?`${a}.${s}`:s;n[s]===Object(n[s])&&r(n[s],o),typeof n[s]==\"function\"&&(t[o]=n[s],delete n[s])})}(e),t}function ie(e){return!e||e===\"null\"?\"*\":e}function ae(e,t,r){if(!e||typeof e!=\"object\")return e;let n=Array.isArray(t)?t:t.split(\".\").map((s)=>s.match(/^\\d+$/)?Number(s):s),a=e;for(let s=0;s<n.length;s++){let o=n[s];s===n.length-1?a[o]=r:((!a[o]||typeof a[o]!=\"object\")&&(a[o]=typeof n[s+1]==\"number\"?[]:{}),a=a[o])}return e}function ce(e=10){let t=\"\";for(let r=0;r<e;r++)t+=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\".charAt(Math.floor(Math.random()*62));return t}var V=T(),P=null;if(V===\"node\"||V===\"bun\")try{let e=globalThis.require;P=e?.(\"node:worker_threads\")?.parentPort??null}catch{}function de(){if(B())return P;if(z())return self;if(se())return window.parent;throw Error(\"No valid target found for postMessage\")}function j(e,t,r,n){if(!e)throw Error(\"Rimless Error: No target specified for postMessage\");if(B()&&e===P){e.postMessage(t,{transfer:n});return}if(z()){e.postMessage(t,{transfer:n});return}if(e.postMessage){e.postMessage(t,{targetOrigin:ie(r),transfer:n});return}throw Error(\"Rimless Error: Invalid target for postMessage\")}function G(e){return P!==null&&e===P}function M(e,t,r){G(e)?e.on(t,r):(\"addEventListener\"in e)&&e.addEventListener(t,r)}function L(e,t,r){G(e)?e.off(t,r):(\"removeEventListener\"in e)&&e.removeEventListener(t,r)}function N(e){return e.data||e}var E=function(e){return e.MESSAGE=\"message\",e}({}),g=function(e){return e.HANDSHAKE_REQUEST=\"RIMLESS/HANDSHAKE_REQUEST\",e.HANDSHAKE_REPLY=\"RIMLESS/HANDSHAKE_REPLY\",e.RPC_REQUEST=\"RIMLESS/RPC_REQUEST\",e.RPC_RESOLVE=\"RIMLESS/RPC_RESOLVE\",e.RPC_REJECT=\"RIMLESS/RPC_REJECT\",e}({}),v=Symbol();function le(e={},t,r,n,a){let s=[];for(let[o,i]of Object.entries(e)){async function c(p){let{action:m,callID:h,connectionID:R,callName:k,args:w=[]}=N(p);if(m!==g.RPC_REQUEST||!h||!k||k!==o||R!==t)return;let u={action:g.RPC_RESOLVE,callID:h,callName:k,connectionID:R,error:null,result:null},A;try{u.result=await i(...w,a),u.result?.[v]&&(A=u.result[v]??[],delete u.result[v])}catch(I){u.action=g.RPC_REJECT,u.error=JSON.parse(JSON.stringify(I,Object.getOwnPropertyNames(I)))}j(n,u,p?.origin,A)}M(r,E.MESSAGE,c),s.push(()=>L(r,E.MESSAGE,c))}return()=>s.forEach((o)=>o())}function fe(e,t,r,n=new Set,a,s){return(...o)=>new Promise((i,c)=>{let p=ce();function m(){L(a,E.MESSAGE,h),n.delete(m)}function h(w){let{callID:u,connectionID:A,callName:I,result:te,error:re,action:W}=N(w);if(!(!u||!I)&&I===e&&u===p&&A===t){if(W===g.RPC_RESOLVE)return m(),i(te);if(W===g.RPC_REJECT)return m(),c(re)}}let R={action:g.RPC_REQUEST,args:o,callID:p,callName:e,connectionID:t},k=o.reduce((w,u)=>u[v]?.length?w.concat(u[v]):w,o[v]??[]);M(a,E.MESSAGE,h),n.add(m),j(s,R,r?.origin,k)})}function ue(e={},t=[],r,n,a,s){let o={...e},i=new Set;for(let c of t)ae(o,c,fe(c,r,n,i,a,s));return{remote:o,unregisterRemote:()=>i.forEach((c)=>c())}}function pe(e={},t){return new Promise(async(r)=>{let n=oe(e),a=de(),s=self||window;async function o(i){let c=N(i);if(c?.action!==g.HANDSHAKE_REPLY)return;let{remote:p,unregisterRemote:m}=ue(c.schema,c.methodNames,c.connectionID,i,s,a),h=le(n,c.connectionID,s,a,p);return await t?.onConnectionSetup?.(p),j(a,{action:g.HANDSHAKE_REPLY,connectionID:c.connectionID},i?.origin),r({remote:p,close:()=>{L(s,E.MESSAGE,o),m(),h()},id:c.connectionID})}M(s,E.MESSAGE,o),j(a,{action:g.HANDSHAKE_REQUEST,methodNames:Object.keys(n),schema:e})})}var q={connect:pe};var me=(e)=>typeof e===\"object\"&&e!==null,J=(e)=>{try{let t=JSON.stringify(e);if(typeof t===\"string\"&&t.length>0)return t}catch{}try{return String(e)}catch{return\"Unknown error\"}},C=(e)=>{if(e instanceof Error)return{message:e.message,stack:e.stack};if(typeof e===\"string\")return{message:e};if(me(e)){let t=typeof e.message===\"string\"?e.message:null,r=typeof e.stack===\"string\"?e.stack:void 0;if(t)return r?{message:t,stack:r}:{message:t};return{message:J(e)}}if(e===null||e===void 0)return{message:\"Unknown error\"};return{message:J(e)}};var _=\"(?:0|[1-9]\\\\d*)\",je=new RegExp(`^\\\\^(${_}\\\\.${_}\\\\.${_})$`);var H=[\"sidenav\",\"main\",\"secondary\",\"side\"];var f=(e,t)=>({extensionId:\"pstdio\",kind:e,id:t}),y={project:f(\"mode\",\"project\"),sessions:f(\"mode\",\"sessions\"),settings:f(\"mode\",\"settings\")},Ce={project:{ref:y.project,regions:H},sessions:{ref:y.sessions,regions:H},settings:{ref:y.settings,regions:H}},U=(e,t,r)=>({id:e,ref:f(\"resource-kind\",e),label:t,menuSlots:r}),D=[{id:\"headerPrimary\",placement:\"header-primary\",access:\"public\"},{id:\"headerOverflow\",placement:\"header-overflow\",access:\"public\"}],K={project:U(\"project\",\"Extension\",D),session:U(\"session\",\"Session\",D),workspace:U(\"workspace\",\"Workspace\",D)},b={project:K.project.ref,session:K.session.ref,workspace:K.workspace.ref},x={start:f(\"page\",\"start\"),sessions:f(\"page\",\"sessions\"),session:f(\"page\",\"session\"),workspaces:f(\"page\",\"workspaces\"),workspace:f(\"page\",\"workspace\")},Oe={start:{ref:x.start,mode:y.project,path:\"\",primary:{cardinality:\"one\",resourceKinds:[]}},sessions:{ref:x.sessions,mode:y.sessions,path:\"sessions\",primary:{cardinality:\"one\",resourceKinds:[]}},session:{ref:x.session,mode:y.sessions,path:\"session\",primary:{cardinality:\"one\",resourceKinds:[\"session\",\"session-draft\"]}},workspaces:{ref:x.workspaces,mode:y.project,path:\"workspaces\",primary:{cardinality:\"one\",resourceKinds:[]}},workspace:{ref:x.workspace,mode:y.project,path:\"workspace\",primary:{cardinality:\"many\",resourceKinds:[\"workspace\"]}}},ge={projectSession:f(\"placement\",\"project-session\")},Te={projectSession:{ref:ge.projectSession,mode:y.project,cardinality:\"many\",resourceKinds:[\"session\",\"session-draft\"]}},Me={projectSettings:f(\"settings-panel\",\"project.settings\"),extensionSettings:f(\"settings-panel\",\"extension.settings\"),statusBarLeading:f(\"status-bar-item\",\"status-bar.leading\"),statusBarTrailing:f(\"status-bar-item\",\"status-bar.trailing\")};var F=(e)=>({...e,kind:\"command\"}),Le=Object.assign(F,{forExtension:(e)=>(t)=>F({extensionId:`${e.publisher}.${e.name}`,id:t})}),ye=(e)=>({...e,kind:\"event\"}),O=(e,t)=>({id:e,kind:t.kind,label:t.label,description:t.description,metadata:t.metadata}),l=(e)=>ye({extensionId:\"pstdio\",id:e}),S=(e,t)=>O(`${e.id}.${t}`,{kind:\"menu\"}),$e={sidenav:O(\"project.sidenav\",{kind:\"panel\"}),headerPrimary:S(b.project,\"headerPrimary\"),headerOverflow:S(b.project,\"headerOverflow\"),settingsPanels:O(\"project.settingsPanels\",{kind:\"settings\"})},Ne={headerPrimary:S(b.session,\"headerPrimary\"),headerOverflow:S(b.session,\"headerOverflow\")},_e={headerPrimary:S(b.workspace,\"headerPrimary\"),headerOverflow:S(b.workspace,\"headerOverflow\"),sidenav:O(\"workspace.sidenav\",{kind:\"panel\"})},He={opened:l(\"project.opened\")},Ue={boardViewsChanged:l(\"view.board-views.changed\"),resourceAnchorsChanged:l(\"view.resource-anchors.changed\"),sessionsChanged:l(\"view.sessions.changed\"),workspacesChanged:l(\"view.workspaces.changed\"),repositoriesChanged:l(\"view.repositories.changed\")},De={started:l(\"session.started\"),resumed:l(\"session.resumed\"),awaitingInput:l(\"session.awaitingInput\"),succeeded:l(\"session.succeeded\"),failed:l(\"session.failed\"),completed:l(\"session.completed\")},Ke={created:l(\"workspace.created\"),provision:l(\"workspace.provision\"),ready:l(\"workspace.ready\"),archived:l(\"workspace.archived\"),deleted:l(\"workspace.deleted\")},We={removed:l(\"worktree.removed\")},Ve={committed:l(\"git.committed\"),rebased:l(\"git.rebased\"),merged:l(\"git.merged\"),conflicted:l(\"git.conflicted\")};var he=[\"clipboard.write\",\"commands.execute\",\"commands.stream\",\"navigation.open\",\"page.params.update\",\"placement.close\",\"notification.show\",\"notification.action\",\"notification.resolve\",\"notification.dismiss\",\"preferences.get\",\"preferences.set\",\"extension.settings.all\",\"extension.settings.get\",\"extension.settings.set\",\"extension.settings.delete\",\"terminal.session\",\"files.upload\",\"files.list\",\"files.delete\"],we=[\"artifacts.read\"],ve=[\"host.dispatchKeyboardEvent\"],ze=[...he.filter((e)=>e!==\"clipboard.write\"),...we,...ve];var d=(e)=>(t)=>({...t,ref:{kind:e,id:t.id}}),Be=d(\"view\"),Ge=d(\"view-menu\"),qe=d(\"placement\"),Je=d(\"resource-kind\");var Fe=d(\"navigation-item\"),Qe=d(\"navigation-tree\"),Ye=d(\"mode\");var Xe=d(\"status-bar-item\"),Ze=d(\"status\"),et=d(\"settings-panel\"),tt=d(\"activity-item\"),rt=d(\"settings-section\"),nt=d(\"command-palette-resource\"),st=d(\"keybinding\"),ot=d(\"schedule\"),it=d(\"artifact-mount\"),at=d(\"template-type\"),ct=d(\"template\"),dt=d(\"skill\"),lt=d(\"theme\"),ft=d(\"file-icon-theme\"),ut=d(\"workspace-type\"),pt=d(\"harness\"),mt=d(\"connection\");var Q=(e,t,r)=>({call:async(n,...a)=>{try{return await e({method:n,params:a[0]})}catch(s){if(s instanceof Error)throw s;throw Error(C(s).message)}},onEvent:t,extensionId:r}),Y=(e)=>{let t=e,r=new Set;return{get:()=>t,subscribe:(n)=>(r.add(n),()=>r.delete(n)),set:(n)=>{t=n;for(let a of r)a(t)}}};var X=(e)=>{let t,r,n=!1;return{initialize:(a)=>{if(n)return Promise.resolve();return t??=e(a).then((s)=>{if(typeof s!==\"function\")return;if(n)s();else r=s}),t},dispose:()=>{n=!0,r?.(),r=void 0}}};var Z=\"pstdio-extension-mount\",Ee=()=>{let e=new Map;return{get length(){return e.size},clear:()=>e.clear(),getItem:(t)=>e.get(t)??null,key:(t)=>Array.from(e.keys())[t]??null,removeItem:(t)=>e.delete(t),setItem:(t,r)=>e.set(t,r)}},be=()=>{for(let e of[\"localStorage\",\"sessionStorage\"])try{window[e]}catch{Object.defineProperty(window,e,{configurable:!0,value:Ee()})}},ee=(e,t)=>{let r=document.documentElement,n=e===\"dark\"?\"light\":\"dark\";r.classList.remove(n),r.classList.add(e),r.setAttribute(\"data-theme\",e),r.style.colorScheme=e;for(let[a,s]of Object.entries(t))if(a.startsWith(\"--\"))r.style.setProperty(a,s)},Se=(e)=>{for(let t of e){let r=document.createElement(\"link\");r.rel=\"stylesheet\",r.href=t,document.head.appendChild(r)}},ke=()=>{let e=document.getElementById(Z);if(!e)e=document.createElement(\"div\"),e.id=Z,e.style.height=\"100%\",e.style.width=\"100%\",document.body.appendChild(e);return e},Ie=()=>{window.addEventListener(\"message\",(e)=>{let t=e.data?.action;if(typeof t!==\"string\"||!t.startsWith(\"RIMLESS/\"))return;if(e.source!==window.parent)e.stopImmediatePropagation()},{capture:!0})},Pe=(e)=>e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement||e instanceof HTMLSelectElement||e instanceof HTMLElement&&e.isContentEditable,xe=async()=>{be(),Ie();let e=Y(void 0),t=new Map,r=(o,i)=>{let c=t.get(o)??new Set;return c.add(i),t.set(o,c),()=>{c.delete(i)}},n=X(async(o)=>{Se(o.styles);let i=await import(o.moduleUrl),c=i.default??(i.mount?i:void 0);if(!c?.mount)throw Error(\"Extension module does not export a default view (defineExtensionView).\");let p=Q((m)=>s.remote.call(m),r,o.extensionId);return await c.mount(ke(),p,e)}),a=!1,s=await q.connect({init:async(o)=>{try{if(ee(o.theme,o.themeVariables),e.set(o.props),await n.initialize(o),!a)a=!0,document.addEventListener(\"keydown\",(i)=>{if(!i.ctrlKey&&!i.metaKey&&!i.altKey)return;if(Pe(i.target)&&!i.shiftKey)return;s.remote.call({method:\"host.dispatchKeyboardEvent\",params:{key:i.key,code:i.code,ctrlKey:i.ctrlKey,metaKey:i.metaKey,altKey:i.altKey,shiftKey:i.shiftKey,repeat:i.repeat}}).catch(()=>{})},!0)}catch(i){let c=C(i);throw s.remote.runtimeError(c),i instanceof Error?i:Error(c.message)}},themeUpdate:(o)=>{ee(o.theme,o.variables)},propsUpdate:(o)=>{e.set(o.props)},hostEvent:(o)=>{for(let i of t.get(o.scope)??[])i(o.payload)}});s.remote.ready({}),window.addEventListener(\"beforeunload\",()=>{n.dispose()})};xe();\n";
|
|
30
|
+
`, i = (e) => r(`<script src="${t(e)}"><\/script>`), a = (e) => r(`<script>${n(e)}<\/script>`), o = () => "// Generated by packages/pstdio-extensions/scripts/build-runtime.ts\nfunction se(){let e=globalThis;if(e.window!==void 0&&e.document!==void 0)return\"browser\";if(e.WorkerGlobalScope!==void 0&&e.self!==void 0&&e.self instanceof e.WorkerGlobalScope||e.window===void 0&&e.self!==void 0&&typeof e.importScripts==\"function\")return\"worker\";let t=e.process;if(t&&typeof t==\"object\"){let r=t.versions??{},s=t.release?.name;if(r.bun||s===\"bun\"||e.Bun!==void 0)return\"bun\";if(r.node&&s===\"node\")return\"node\"}return e.Bun===void 0?\"browser\":\"bun\"}function O(){return se()}function z(){return O()===\"worker\"}function K(){let e=O();return e===\"node\"||e===\"bun\"}function oe(){return window.self!==window.top}function ae(e){let t={};return function r(s,i=\"\"){Object.keys(s).forEach((o)=>{let n=i?`${i}.${o}`:o;s[o]===Object(s[o])&&r(s[o],n),typeof s[o]==\"function\"&&(t[n]=s[o],delete s[o])})}(e),t}function ie(e){return!e||e===\"null\"?\"*\":e}function ce(e,t,r){if(!e||typeof e!=\"object\")return e;let s=Array.isArray(t)?t:t.split(\".\").map((o)=>o.match(/^\\d+$/)?Number(o):o),i=e;for(let o=0;o<s.length;o++){let n=s[o];o===s.length-1?i[n]=r:((!i[n]||typeof i[n]!=\"object\")&&(i[n]=typeof s[o+1]==\"number\"?[]:{}),i=i[n])}return e}function de(e=10){let t=\"\";for(let r=0;r<e;r++)t+=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\".charAt(Math.floor(Math.random()*62));return t}var B=O(),k=null;if(B===\"node\"||B===\"bun\")try{let e=globalThis.require;k=e?.(\"node:worker_threads\")?.parentPort??null}catch{}function le(){if(K())return k;if(z())return self;if(oe())return window.parent;throw Error(\"No valid target found for postMessage\")}function x(e,t,r,s){if(!e)throw Error(\"Rimless Error: No target specified for postMessage\");if(K()&&e===k){e.postMessage(t,{transfer:s});return}if(z()){e.postMessage(t,{transfer:s});return}if(e.postMessage){e.postMessage(t,{targetOrigin:ie(r),transfer:s});return}throw Error(\"Rimless Error: Invalid target for postMessage\")}function G(e){return k!==null&&e===k}function j(e,t,r){G(e)?e.on(t,r):(\"addEventListener\"in e)&&e.addEventListener(t,r)}function _(e,t,r){G(e)?e.off(t,r):(\"removeEventListener\"in e)&&e.removeEventListener(t,r)}function M(e){return e.data||e}var w=function(e){return e.MESSAGE=\"message\",e}({}),g=function(e){return e.HANDSHAKE_REQUEST=\"RIMLESS/HANDSHAKE_REQUEST\",e.HANDSHAKE_REPLY=\"RIMLESS/HANDSHAKE_REPLY\",e.RPC_REQUEST=\"RIMLESS/RPC_REQUEST\",e.RPC_RESOLVE=\"RIMLESS/RPC_RESOLVE\",e.RPC_REJECT=\"RIMLESS/RPC_REJECT\",e}({}),E=Symbol();function fe(e={},t,r,s,i){let o=[];for(let[n,a]of Object.entries(e)){async function c(p){let{action:m,callID:h,connectionID:C,callName:S,args:v=[]}=M(p);if(m!==g.RPC_REQUEST||!h||!S||S!==n||C!==t)return;let u={action:g.RPC_RESOLVE,callID:h,callName:S,connectionID:C,error:null,result:null},R;try{u.result=await a(...v,i),u.result?.[E]&&(R=u.result[E]??[],delete u.result[E])}catch(P){u.action=g.RPC_REJECT,u.error=JSON.parse(JSON.stringify(P,Object.getOwnPropertyNames(P)))}x(s,u,p?.origin,R)}j(r,w.MESSAGE,c),o.push(()=>_(r,w.MESSAGE,c))}return()=>o.forEach((n)=>n())}function ue(e,t,r,s=new Set,i,o){return(...n)=>new Promise((a,c)=>{let p=de();function m(){_(i,w.MESSAGE,h),s.delete(m)}function h(v){let{callID:u,connectionID:R,callName:P,result:re,error:ne,action:V}=M(v);if(!(!u||!P)&&P===e&&u===p&&R===t){if(V===g.RPC_RESOLVE)return m(),a(re);if(V===g.RPC_REJECT)return m(),c(ne)}}let C={action:g.RPC_REQUEST,args:n,callID:p,callName:e,connectionID:t},S=n.reduce((v,u)=>u[E]?.length?v.concat(u[E]):v,n[E]??[]);j(i,w.MESSAGE,h),s.add(m),x(o,C,r?.origin,S)})}function pe(e={},t=[],r,s,i,o){let n={...e},a=new Set;for(let c of t)ce(n,c,ue(c,r,s,a,i,o));return{remote:n,unregisterRemote:()=>a.forEach((c)=>c())}}function me(e={},t){return new Promise(async(r)=>{let s=ae(e),i=le(),o=self||window;async function n(a){let c=M(a);if(c?.action!==g.HANDSHAKE_REPLY)return;let{remote:p,unregisterRemote:m}=pe(c.schema,c.methodNames,c.connectionID,a,o,i),h=fe(s,c.connectionID,o,i,p);return await t?.onConnectionSetup?.(p),x(i,{action:g.HANDSHAKE_REPLY,connectionID:c.connectionID},a?.origin),r({remote:p,close:()=>{_(o,w.MESSAGE,n),m(),h()},id:c.connectionID})}j(o,w.MESSAGE,n),x(i,{action:g.HANDSHAKE_REQUEST,methodNames:Object.keys(s),schema:e})})}var q={connect:me};var J=(e={})=>{let t=e.locale??\"en\";return{...e,projectId:e.projectId,themePreference:e.themePreference??\"system\",locale:t,resource:e.resource,pageLocation:e.pageLocation,pageParams:e.pageParams??{},translations:e.translations??{locale:t,defaultLocale:t,bundle:{},defaultBundle:{}}}};var ge=(e)=>typeof e===\"object\"&&e!==null,F=(e)=>{try{let t=JSON.stringify(e);if(typeof t===\"string\"&&t.length>0)return t}catch{}try{return String(e)}catch{return\"Unknown error\"}},T=(e)=>{if(e instanceof Error)return{message:e.message,stack:e.stack};if(typeof e===\"string\")return{message:e};if(ge(e)){let t=typeof e.message===\"string\"?e.message:null,r=typeof e.stack===\"string\"?e.stack:void 0;if(t)return r?{message:t,stack:r}:{message:t};return{message:F(e)}}if(e===null||e===void 0)return{message:\"Unknown error\"};return{message:F(e)}};var W=\"(?:0|[1-9]\\\\d*)\",Te=new RegExp(`^\\\\^(${W}\\\\.${W}\\\\.${W})$`);var N=[\"sidenav\",\"main\",\"secondary\",\"side\"];var f=(e,t)=>({extensionId:\"pstdio\",kind:e,id:t}),y={project:f(\"mode\",\"project\"),sessions:f(\"mode\",\"sessions\"),settings:f(\"mode\",\"settings\")},Le={project:{ref:y.project,regions:N},sessions:{ref:y.sessions,regions:N},settings:{ref:y.settings,regions:N}},H=(e,t,r)=>({id:e,ref:f(\"resource-kind\",e),label:t,menuSlots:r}),D=[{id:\"headerPrimary\",placement:\"header-primary\",access:\"public\"},{id:\"headerOverflow\",placement:\"header-overflow\",access:\"public\"}],U={project:H(\"project\",\"Extension\",D),session:H(\"session\",\"Session\",D),workspace:H(\"workspace\",\"Workspace\",D)},b={project:U.project.ref,session:U.session.ref,workspace:U.workspace.ref},A={start:f(\"page\",\"start\"),sessions:f(\"page\",\"sessions\"),session:f(\"page\",\"session\"),workspaces:f(\"page\",\"workspaces\"),workspace:f(\"page\",\"workspace\")},Oe={start:{ref:A.start,mode:y.project,path:\"\",primary:{cardinality:\"one\",resourceKinds:[]}},sessions:{ref:A.sessions,mode:y.sessions,path:\"sessions\",primary:{cardinality:\"one\",resourceKinds:[]}},session:{ref:A.session,mode:y.sessions,path:\"session\",primary:{cardinality:\"one\",resourceKinds:[\"session\",\"session-draft\"]}},workspaces:{ref:A.workspaces,mode:y.project,path:\"workspaces\",primary:{cardinality:\"one\",resourceKinds:[]}},workspace:{ref:A.workspace,mode:y.project,path:\"workspace\",primary:{cardinality:\"many\",resourceKinds:[\"workspace\"]}}},ye={projectSession:f(\"placement\",\"project-session\")},je={projectSession:{ref:ye.projectSession,mode:y.project,cardinality:\"many\",resourceKinds:[\"session\",\"session-draft\"]}},_e={projectSettings:f(\"settings-panel\",\"project.settings\"),extensionSettings:f(\"settings-panel\",\"extension.settings\"),statusBarLeading:f(\"status-bar-item\",\"status-bar.leading\"),statusBarTrailing:f(\"status-bar-item\",\"status-bar.trailing\")};var Y=(e)=>({...e,kind:\"command\"}),Me=Object.assign(Y,{forExtension:(e)=>(t)=>Y({extensionId:`${e.publisher}.${e.name}`,id:t})}),he=(e)=>({...e,kind:\"event\"}),L=(e,t)=>({id:e,kind:t.kind,label:t.label,description:t.description,metadata:t.metadata}),l=(e)=>he({extensionId:\"pstdio\",id:e}),I=(e,t)=>L(`${e.id}.${t}`,{kind:\"menu\"}),We={sidenav:L(\"project.sidenav\",{kind:\"panel\"}),headerPrimary:I(b.project,\"headerPrimary\"),headerOverflow:I(b.project,\"headerOverflow\"),settingsPanels:L(\"project.settings\",{kind:\"settings\"})},Ne={headerPrimary:I(b.session,\"headerPrimary\"),headerOverflow:I(b.session,\"headerOverflow\")},He={headerPrimary:I(b.workspace,\"headerPrimary\"),headerOverflow:I(b.workspace,\"headerOverflow\"),sidenav:L(\"workspace.sidenav\",{kind:\"panel\"})},$e={opened:l(\"project.opened\")},De={boardViewsChanged:l(\"view.board-views.changed\"),resourceAnchorsChanged:l(\"view.resource-anchors.changed\"),sessionsChanged:l(\"view.sessions.changed\"),workspacesChanged:l(\"view.workspaces.changed\"),repositoriesChanged:l(\"view.repositories.changed\")},Ue={started:l(\"session.started\"),resumed:l(\"session.resumed\"),awaitingInput:l(\"session.awaitingInput\"),succeeded:l(\"session.succeeded\"),failed:l(\"session.failed\"),completed:l(\"session.completed\")},Ve={created:l(\"workspace.created\"),provision:l(\"workspace.provision\"),ready:l(\"workspace.ready\"),deleted:l(\"workspace.deleted\")},Be={removed:l(\"worktree.removed\")},ze={committed:l(\"git.committed\"),rebased:l(\"git.rebased\"),merged:l(\"git.merged\"),conflicted:l(\"git.conflicted\")};var ve=[\"clipboard.write\",\"commands.execute\",\"commands.stream\",\"navigation.open\",\"page.params.update\",\"placement.close\",\"notification.show\",\"notification.action\",\"notification.resolve\",\"notification.dismiss\",\"preferences.get\",\"preferences.set\",\"extension.settings.all\",\"extension.settings.get\",\"extension.settings.set\",\"extension.settings.delete\",\"terminal.session\",\"files.upload\",\"files.list\",\"files.delete\"],Ee=[\"artifacts.read\"];var Ke=[...ve.filter((e)=>e!==\"clipboard.write\"),...Ee];var d=(e)=>(t)=>({...t,ref:{kind:e,id:t.id}}),Ge=d(\"view\"),qe=d(\"view-menu\"),Je=d(\"placement\"),Fe=d(\"resource-kind\");var Ye=d(\"navigation-item\"),Qe=d(\"navigation-tree\"),Xe=d(\"mode\");var Ze=d(\"status-bar-item\"),et=d(\"settings-panel\"),tt=d(\"activity-item\"),rt=d(\"settings-section\"),nt=d(\"command-palette-resource\"),st=d(\"keybinding\"),ot=d(\"schedule\"),at=d(\"artifact-mount\"),it=d(\"template-type\"),ct=d(\"template\"),dt=d(\"skill\"),lt=d(\"theme\"),ft=d(\"file-icon-theme\"),ut=d(\"workspace-type\"),pt=d(\"harness\"),mt=d(\"connection\");var Q=(e,t,r,s)=>({call:async(i,...o)=>{try{let n=await e({method:i,params:o[0]});if(!n.ok)throw Object.assign(Error(n.error.message),n.error);return n.value}catch(n){if(n instanceof Error)throw n;throw Error(T(n).message)}},onEvent:t,extensionId:r,propsStore:s}),X=(e)=>{let t=e,r=new Set;return{get:()=>t,subscribe:(s)=>(r.add(s),()=>r.delete(s)),set:(s)=>{t=s;for(let i of r)i(t)}}};var Z=(e)=>{let t,r,s=!1;return{initialize:(i)=>{if(s)return Promise.resolve();return t??=e(i).then((o)=>{if(typeof o!==\"function\")return;if(s)o();else r=o}),t},dispose:()=>{s=!0,r?.(),r=void 0}}};var ee=\"pstdio-extension-mount\",we=()=>{let e=new Map;return{get length(){return e.size},clear:()=>e.clear(),getItem:(t)=>e.get(t)??null,key:(t)=>Array.from(e.keys())[t]??null,removeItem:(t)=>e.delete(t),setItem:(t,r)=>e.set(t,r)}},be=()=>{for(let e of[\"localStorage\",\"sessionStorage\"])try{window[e]}catch{Object.defineProperty(window,e,{configurable:!0,value:we()})}},te=(e,t)=>{let r=document.documentElement,s=e===\"dark\"?\"light\":\"dark\";r.classList.remove(s),r.classList.add(e),r.setAttribute(\"data-theme\",e),r.style.colorScheme=e;for(let[i,o]of Object.entries(t))if(i.startsWith(\"--\"))r.style.setProperty(i,o)},Ie=(e)=>{for(let t of e){let r=document.createElement(\"link\");r.rel=\"stylesheet\",r.href=t,document.head.appendChild(r)}},Se=()=>{let e=document.getElementById(ee);if(!e)e=document.createElement(\"div\"),e.id=ee,e.style.height=\"100%\",e.style.width=\"100%\",document.body.appendChild(e);return e},Pe=()=>{window.addEventListener(\"message\",(e)=>{let t=e.data?.action;if(typeof t!==\"string\"||!t.startsWith(\"RIMLESS/\"))return;if(e.source!==window.parent)e.stopImmediatePropagation()},{capture:!0})},ke=(e)=>e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement||e instanceof HTMLSelectElement||e instanceof HTMLElement&&e.isContentEditable,Ae=async()=>{be(),Pe();let e=X(J()),t=new Map,r=(n,a)=>{let c=t.get(n)??new Set;return c.add(a),t.set(n,c),()=>{c.delete(a)}},s=Z(async(n)=>{Ie(n.styles);let a=await import(n.moduleUrl),c=a.default??(a.mount?a:void 0);if(!c?.mount)throw Error(\"Extension module does not export a default view (defineExtensionView).\");let p=Q((m)=>o.remote.call(m),r,n.extensionId,e);return await c.mount(Se(),p,e)}),i=!1,o=await q.connect({init:async(n)=>{try{if(te(n.theme,n.themeVariables),e.set(n.props),await s.initialize(n),!i)i=!0,document.addEventListener(\"keydown\",(a)=>{if(!a.ctrlKey&&!a.metaKey&&!a.altKey)return;if(ke(a.target)&&!a.shiftKey)return;o.remote.dispatchKeyboardEvent({key:a.key,code:a.code,ctrlKey:a.ctrlKey,metaKey:a.metaKey,altKey:a.altKey,shiftKey:a.shiftKey,repeat:a.repeat}).catch(()=>{})},!0)}catch(a){let c=T(a);throw o.remote.runtimeError(c),a instanceof Error?a:Error(c.message)}},themeUpdate:(n)=>{te(n.theme,n.variables)},propsUpdate:(n)=>{e.set(n.props)},hostEvent:(n)=>{for(let a of t.get(n.scope)??[])a(n.payload)}});o.remote.ready({}),window.addEventListener(\"beforeunload\",()=>{s.dispose()})};Ae();\n";
|
|
31
31
|
//#endregion
|
|
32
32
|
export { o as getExtensionRuntimeScript, i as renderExtensionRuntimeHtml, a as renderInlineExtensionRuntimeHtml };
|
|
33
33
|
|