@pstdio/workbench 0.5.0 → 0.7.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/README.md +66 -72
- package/dist/composition-resolver-types-CWykPyEK.js +241 -0
- package/dist/composition-resolver-types-CWykPyEK.js.map +1 -0
- package/dist/extensions.d.ts +380 -29
- package/dist/extensions.js +1366 -883
- package/dist/extensions.js.map +1 -1
- package/dist/file-renderer-view-B6_iR4EN.js +496 -0
- package/dist/file-renderer-view-B6_iR4EN.js.map +1 -0
- package/dist/file-section-navigation-CfYqVObc.js +30 -0
- package/dist/file-section-navigation-CfYqVObc.js.map +1 -0
- package/dist/index.d.ts +305 -17
- package/dist/index.js +2343 -2083
- package/dist/index.js.map +1 -1
- package/dist/layout-types-DMoZz38-.js.map +1 -1
- package/dist/react.d.ts +190 -16
- package/dist/react.js +2473 -2374
- package/dist/react.js.map +1 -1
- package/dist/storage.js +132 -155
- package/dist/storage.js.map +1 -1
- package/dist/testing.d.ts +177 -14
- package/dist/webview-runtime.js +1 -1
- package/dist/webview-runtime.js.map +1 -1
- package/dist/workbench-built-ins-BncLJfQA.js +1175 -0
- package/dist/workbench-built-ins-BncLJfQA.js.map +1 -0
- package/dist/workbench-menu-paths-Bb0ICxeG.js +20 -0
- package/dist/workbench-menu-paths-Bb0ICxeG.js.map +1 -0
- package/package.json +4 -4
- package/dist/context-key-service-B2K9LAec.js +0 -1034
- package/dist/context-key-service-B2K9LAec.js.map +0 -1
- package/dist/file-renderer-view-DrrhYnb_.js +0 -171
- package/dist/file-renderer-view-DrrhYnb_.js.map +0 -1
- package/dist/workbench-menu-paths-B_QJzcNU.js +0 -12
- package/dist/workbench-menu-paths-B_QJzcNU.js.map +0 -1
package/dist/testing.d.ts
CHANGED
|
@@ -91,6 +91,7 @@ declare interface Command {
|
|
|
91
91
|
}
|
|
92
92
|
|
|
93
93
|
declare interface CommandHandler<TArgs = unknown, TResult = unknown> {
|
|
94
|
+
prepareArgs?(args: TArgs, context?: WorkbenchCommandExecutionContext, onArgsChange?: (args: TArgs) => void): TArgs | Promise<TArgs>;
|
|
94
95
|
execute(args: TArgs, context?: WorkbenchCommandExecutionContext): TResult | Promise<TResult>;
|
|
95
96
|
isEnabled?(args: TArgs): boolean;
|
|
96
97
|
isVisible?(args: TArgs): boolean;
|
|
@@ -147,6 +148,8 @@ declare interface CommandParamDescriptor {
|
|
|
147
148
|
options?: CommandParamOption[];
|
|
148
149
|
templateType?: string;
|
|
149
150
|
resourceType?: string;
|
|
151
|
+
accept?: string;
|
|
152
|
+
multiple?: boolean;
|
|
150
153
|
metadata?: Record<string, unknown>;
|
|
151
154
|
}
|
|
152
155
|
|
|
@@ -166,6 +169,7 @@ declare interface CommandRegistry {
|
|
|
166
169
|
isCommandEnabled(id: string, args?: unknown): boolean;
|
|
167
170
|
isCommandVisible(id: string, args?: unknown): boolean;
|
|
168
171
|
isCommandToggled(id: string, args?: unknown): boolean;
|
|
172
|
+
prepareCommandArgs(id: string, args: unknown, context?: WorkbenchCommandExecutionContext, onArgsChange?: (args: unknown) => void): Promise<unknown>;
|
|
169
173
|
executeCommand(id: string, args?: unknown, context?: WorkbenchCommandExecutionContext): Promise<unknown>;
|
|
170
174
|
onDidExecuteError(listener: WorkbenchCommandExecutionErrorListener): Disposable_2;
|
|
171
175
|
}
|
|
@@ -343,7 +347,7 @@ declare interface DataTableRendererContribution {
|
|
|
343
347
|
emptyDescription?: string;
|
|
344
348
|
executeQuery(context: DataTableRendererQueryContext): Promise<DataTableRendererQueryResult> | DataTableRendererQueryResult;
|
|
345
349
|
subscribe?: (listener: () => void) => Disposable_2 | (() => void);
|
|
346
|
-
|
|
350
|
+
onRowActivate?: (row: DataTableRendererRow) => Promise<void> | void;
|
|
347
351
|
}
|
|
348
352
|
|
|
349
353
|
declare type DataTableRendererImplementation = (input: WorkbenchPanelRenderInput & {
|
|
@@ -470,10 +474,23 @@ declare interface FileIconThemeRegistry {
|
|
|
470
474
|
|
|
471
475
|
declare interface FileRendererContent {
|
|
472
476
|
fileName?: string;
|
|
477
|
+
/** Workspace-relative path shown above the file preview. */
|
|
478
|
+
filePath?: string;
|
|
473
479
|
mimeType?: string;
|
|
474
480
|
content?: string;
|
|
475
481
|
dataUrl?: string;
|
|
476
482
|
placeholder?: string;
|
|
483
|
+
/** Override contribution-level save support for one loaded file. */
|
|
484
|
+
editable?: boolean;
|
|
485
|
+
/** Request Monaco for text that automatic dispatch would open as markdown. */
|
|
486
|
+
textRenderer?: "automatic" | "monaco";
|
|
487
|
+
/** Represent a deliberate no-file selection without an editable blank document. */
|
|
488
|
+
emptyState?: {
|
|
489
|
+
title: string;
|
|
490
|
+
description?: string;
|
|
491
|
+
};
|
|
492
|
+
/** Ordered backing-store revision when one is available. */
|
|
493
|
+
revision?: string;
|
|
477
494
|
}
|
|
478
495
|
|
|
479
496
|
declare interface FileRendererContribution {
|
|
@@ -483,35 +500,53 @@ declare interface FileRendererContribution {
|
|
|
483
500
|
/** Resolve the file's content (and identity) for the bound resource. */
|
|
484
501
|
load(resource: ResourceRef | undefined): Promise<FileRendererContent> | FileRendererContent;
|
|
485
502
|
/** Persist edited text. Absent ⇒ read-only. Never called for images. */
|
|
486
|
-
save?(resource: ResourceRef | undefined, content: string): Promise<
|
|
503
|
+
save?(resource: ResourceRef | undefined, content: string, origin?: FileRendererRefreshOrigin): Promise<FileRendererSaveResult | undefined> | FileRendererSaveResult | void;
|
|
487
504
|
}
|
|
488
505
|
|
|
489
506
|
declare type FileRendererImplementation = (input: WorkbenchPanelRenderInput & {
|
|
490
507
|
fileRendererId: string;
|
|
491
508
|
}) => unknown;
|
|
492
509
|
|
|
493
|
-
declare interface
|
|
510
|
+
declare interface FileRendererRefreshEnvelope {
|
|
511
|
+
resourceUri?: string;
|
|
512
|
+
origin?: FileRendererRefreshOrigin;
|
|
513
|
+
revision?: string;
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
declare interface FileRendererRefreshEvent extends FileRendererRefreshEnvelope {
|
|
494
517
|
fileRendererId: string;
|
|
495
518
|
}
|
|
496
519
|
|
|
497
520
|
declare type FileRendererRefreshListener = (event: FileRendererRefreshEvent) => void;
|
|
498
521
|
|
|
522
|
+
declare interface FileRendererRefreshOrigin {
|
|
523
|
+
rendererId: string;
|
|
524
|
+
instanceId: string;
|
|
525
|
+
operationId: string;
|
|
526
|
+
}
|
|
527
|
+
|
|
499
528
|
declare interface FileRendererRegistry {
|
|
500
529
|
fileRendererStore: WorkbenchStore<FileRendererStoreState>;
|
|
501
530
|
registerFileRenderer(contribution: FileRendererContribution, metadata?: ContributionMetadata): Disposable_2;
|
|
502
531
|
setFileRendererImplementation(impl: FileRendererImplementation): void;
|
|
503
532
|
getFileRenderer(id: string): RegisteredFileRendererContribution | undefined;
|
|
504
533
|
listFileRenderers(): RegisteredFileRendererContribution[];
|
|
505
|
-
refreshFileRenderer(id: string): void;
|
|
534
|
+
refreshFileRenderer(id: string, event?: FileRendererRefreshEnvelope): void;
|
|
506
535
|
onDidRefreshFileRenderer(listener: FileRendererRefreshListener): Disposable_2;
|
|
507
536
|
}
|
|
508
537
|
|
|
538
|
+
declare interface FileRendererSaveResult {
|
|
539
|
+
revision?: string;
|
|
540
|
+
}
|
|
541
|
+
|
|
509
542
|
declare interface FileRendererStoreState {
|
|
510
543
|
renderers: Record<string, RegisteredFileRendererContribution>;
|
|
511
544
|
}
|
|
512
545
|
|
|
513
546
|
declare interface HistoryController {
|
|
514
547
|
store: WorkbenchStore<HistoryStoreState>;
|
|
548
|
+
/** Snapshot the history for a compound navigation; the returned function restores it. */
|
|
549
|
+
createCheckpoint(): () => void;
|
|
515
550
|
goBack(): HistoryEntry | undefined;
|
|
516
551
|
goForward(): HistoryEntry | undefined;
|
|
517
552
|
goPrevious(): HistoryEntry | undefined;
|
|
@@ -537,6 +572,8 @@ declare interface KanbanRendererContribution<TRow extends KanbanRendererRow = Ka
|
|
|
537
572
|
id: string;
|
|
538
573
|
title: string;
|
|
539
574
|
resourceKind?: string;
|
|
575
|
+
/** Host-owned scope for persisted display settings. */
|
|
576
|
+
storageScope?: string;
|
|
540
577
|
/**
|
|
541
578
|
* Declarative attribute schema. The renderer dispatches filter / group /
|
|
542
579
|
* sort / display / inline-edit behavior on each descriptor's `type.kind`.
|
|
@@ -564,8 +601,8 @@ declare interface KanbanRendererContribution<TRow extends KanbanRendererRow = Ka
|
|
|
564
601
|
*/
|
|
565
602
|
executeQuery(state: KanbanRendererQueryState): Promise<TRow[]> | TRow[];
|
|
566
603
|
subscribe?: (listener: () => void) => Disposable_2 | (() => void);
|
|
567
|
-
/** Row
|
|
568
|
-
|
|
604
|
+
/** Row activation surfaced by the renderer (mirrored from <KanbanRenderer>). */
|
|
605
|
+
onRowActivate?: (row: TRow) => Promise<void> | void;
|
|
569
606
|
/** Per-row right-click context menu actions (mirrored from <KanbanRenderer>). */
|
|
570
607
|
getRowContextMenuActions?: (row: TRow) => ResourceContextAction[];
|
|
571
608
|
/**
|
|
@@ -659,7 +696,7 @@ declare interface KanbanRendererRow {
|
|
|
659
696
|
title: string;
|
|
660
697
|
/**
|
|
661
698
|
* Optional navigation handle. When set, the renderer's default click handler
|
|
662
|
-
* routes through the contribution's
|
|
699
|
+
* routes through the contribution's onRowActivate (which typically opens the
|
|
663
700
|
* resource via the workbench).
|
|
664
701
|
*/
|
|
665
702
|
resource?: unknown;
|
|
@@ -764,6 +801,16 @@ declare interface LayoutModel {
|
|
|
764
801
|
carryRegionState?: readonly WorkbenchRegion[];
|
|
765
802
|
}): void;
|
|
766
803
|
getPersistenceScope(): LayoutScope | undefined;
|
|
804
|
+
/** True when the current persistence scope already stores a layout. A new scope returns false. */
|
|
805
|
+
/** Whether anything is stored for the active scope right now. */
|
|
806
|
+
hasPersistedLayout(): boolean;
|
|
807
|
+
/**
|
|
808
|
+
* Whether the active scope was entered with a layout the user already had. Unlike
|
|
809
|
+
* `hasPersistedLayout`, writes made while entering a mode do not change the answer.
|
|
810
|
+
*/
|
|
811
|
+
enteredWithPersistedLayout(): boolean;
|
|
812
|
+
/** Moves owned panel menus beside their owner's current region and removes orphan menus. */
|
|
813
|
+
reconcilePanelMenus(): void;
|
|
767
814
|
onWillChangePersistenceScope(listener: (scope: LayoutScope | undefined) => void): {
|
|
768
815
|
dispose(): void;
|
|
769
816
|
};
|
|
@@ -876,6 +923,7 @@ declare interface OpenWidgetInput {
|
|
|
876
923
|
resource?: ResourceRef;
|
|
877
924
|
title?: string;
|
|
878
925
|
region?: WorkbenchRegion;
|
|
926
|
+
role?: WorkbenchWidgetRole;
|
|
879
927
|
ownerId?: string;
|
|
880
928
|
source?: ContributionSource;
|
|
881
929
|
pinned?: boolean;
|
|
@@ -893,7 +941,9 @@ declare interface OpenWorkbenchPanelInput {
|
|
|
893
941
|
resource?: ResourceRef;
|
|
894
942
|
title?: string;
|
|
895
943
|
region?: WorkbenchRegion;
|
|
944
|
+
role?: WorkbenchWidgetRole;
|
|
896
945
|
pinned?: boolean;
|
|
946
|
+
closable?: boolean;
|
|
897
947
|
mountStrategy?: WorkbenchPanelMountStrategy;
|
|
898
948
|
hiddenByDefault?: boolean;
|
|
899
949
|
tab?: WorkbenchPanelTab;
|
|
@@ -1007,7 +1057,6 @@ declare type RegisteredWidgetContribution = Omit<WidgetContribution, "priority"
|
|
|
1007
1057
|
ownedPanelMenuIds?: readonly string[];
|
|
1008
1058
|
singleton: boolean;
|
|
1009
1059
|
reuse: WidgetReusePolicy;
|
|
1010
|
-
role: WorkbenchWidgetRole;
|
|
1011
1060
|
} & RegisteredContributionMetadata;
|
|
1012
1061
|
|
|
1013
1062
|
declare interface RegisteredWorkbenchNotification extends RegisteredContributionMetadata {
|
|
@@ -1023,7 +1072,9 @@ declare interface RegisteredWorkbenchNotification extends RegisteredContribution
|
|
|
1023
1072
|
|
|
1024
1073
|
declare type ResolvedResourceHierarchyProvider = Required<ResourceHierarchyProvider>;
|
|
1025
1074
|
|
|
1026
|
-
declare type ResolvedResourcePresenter =
|
|
1075
|
+
declare type ResolvedResourcePresenter = Omit<ResourcePresenter, "priority"> & {
|
|
1076
|
+
priority: number;
|
|
1077
|
+
};
|
|
1027
1078
|
|
|
1028
1079
|
declare interface ResourceBrowseEntry {
|
|
1029
1080
|
resource: ResourceRef;
|
|
@@ -1045,6 +1096,14 @@ declare interface ResourceContextAction {
|
|
|
1045
1096
|
separatorBefore?: boolean;
|
|
1046
1097
|
}
|
|
1047
1098
|
|
|
1099
|
+
declare interface ResourceHierarchyCycle {
|
|
1100
|
+
code: typeof resourceHierarchyCycleCode;
|
|
1101
|
+
path: ResourceRef[];
|
|
1102
|
+
repeatedUri: string;
|
|
1103
|
+
}
|
|
1104
|
+
|
|
1105
|
+
declare const resourceHierarchyCycleCode = "resource_hierarchy_cycle";
|
|
1106
|
+
|
|
1048
1107
|
declare interface ResourceHierarchyProvider {
|
|
1049
1108
|
id: string;
|
|
1050
1109
|
priority?: number;
|
|
@@ -1077,6 +1136,7 @@ declare interface ResourcePresenter {
|
|
|
1077
1136
|
priority?: number;
|
|
1078
1137
|
canOpen(resource: ResourceRef): boolean;
|
|
1079
1138
|
open(resource: ResourceRef, input: OpenResourceInput): WorkbenchPanelInstance | Promise<WorkbenchPanelInstance>;
|
|
1139
|
+
afterOpen?(resource: ResourceRef, instance: WorkbenchPanelInstance, input: OpenResourceInput): void;
|
|
1080
1140
|
}
|
|
1081
1141
|
|
|
1082
1142
|
declare interface ResourceProvider {
|
|
@@ -1117,6 +1177,7 @@ declare interface ResourceRegistry {
|
|
|
1117
1177
|
registerHierarchyProvider(provider: ResourceHierarchyProvider): Disposable_2;
|
|
1118
1178
|
listHierarchyProviders(): ResolvedResourceHierarchyProvider[];
|
|
1119
1179
|
walkHierarchy(resource: ResourceRef | undefined): ResourceRef[];
|
|
1180
|
+
onDidDetectHierarchyCycle(listener: (cycle: ResourceHierarchyCycle) => void): Disposable_2;
|
|
1120
1181
|
isOpeningResource(): boolean;
|
|
1121
1182
|
openResource(resource: ResourceRef, input?: OpenResourceInput): Promise<WorkbenchPanelInstance>;
|
|
1122
1183
|
onDidOpenResource(listener: (resource: ResourceRef) => void): Disposable_2;
|
|
@@ -1281,11 +1342,13 @@ declare interface TreeNode {
|
|
|
1281
1342
|
target?: NavigationTarget;
|
|
1282
1343
|
/** Visual row variant for non-data rows such as placeholders. */
|
|
1283
1344
|
rowVariant?: TreeNodeRowVariant;
|
|
1345
|
+
inlineInput?: TreeNodeInlineInput;
|
|
1284
1346
|
actions?: TreeAction[];
|
|
1285
1347
|
contextMenuActions?: TreeAction[];
|
|
1286
1348
|
contextMenuPath?: MenuPath;
|
|
1287
1349
|
menuPath?: MenuPath;
|
|
1288
1350
|
menuPlacement?: "top-start" | "top-end" | "bottom-start" | "bottom-end" | "right-start" | "left-start";
|
|
1351
|
+
showContextMenuTrigger?: boolean;
|
|
1289
1352
|
collapsible?: boolean;
|
|
1290
1353
|
disabled?: boolean;
|
|
1291
1354
|
children?: TreeNode[];
|
|
@@ -1296,6 +1359,18 @@ declare interface TreeNode {
|
|
|
1296
1359
|
canHide?: boolean;
|
|
1297
1360
|
/** When false, the node stays fixed within its Sidenav group. */
|
|
1298
1361
|
canReorder?: boolean;
|
|
1362
|
+
/** Allow this node to be moved to another tree location. */
|
|
1363
|
+
canDrag?: boolean;
|
|
1364
|
+
/** Allow movable nodes to be dropped on this node. */
|
|
1365
|
+
canDrop?: boolean;
|
|
1366
|
+
}
|
|
1367
|
+
|
|
1368
|
+
declare interface TreeNodeInlineInput {
|
|
1369
|
+
ariaLabel: string;
|
|
1370
|
+
defaultValue?: string;
|
|
1371
|
+
placeholder?: string;
|
|
1372
|
+
onCommit(value: string): Promise<void> | void;
|
|
1373
|
+
onCancel?(): void;
|
|
1299
1374
|
}
|
|
1300
1375
|
|
|
1301
1376
|
declare type TreeNodeRowVariant = "empty-state";
|
|
@@ -1304,6 +1379,8 @@ declare interface TreeRendererContribution {
|
|
|
1304
1379
|
id: string;
|
|
1305
1380
|
title: string;
|
|
1306
1381
|
icon?: string;
|
|
1382
|
+
searchable?: boolean;
|
|
1383
|
+
searchPlaceholder?: string;
|
|
1307
1384
|
when?: string;
|
|
1308
1385
|
defaultExpandedSectionIds?: string[];
|
|
1309
1386
|
defaultExpandedNodeIds?: string[];
|
|
@@ -1311,6 +1388,7 @@ declare interface TreeRendererContribution {
|
|
|
1311
1388
|
getHeader?(ctx: TreeContext): Promise<TreeNode[]> | TreeNode[];
|
|
1312
1389
|
getFooter?(ctx: TreeContext): Promise<TreeNode[]> | TreeNode[];
|
|
1313
1390
|
getChildren(node: TreeNode, ctx: TreeContext): Promise<TreeNode[]> | TreeNode[];
|
|
1391
|
+
moveNode?(source: TreeNode, target: TreeNode | undefined, ctx: TreeContext): Promise<void> | void;
|
|
1314
1392
|
}
|
|
1315
1393
|
|
|
1316
1394
|
declare type TreeRendererImplementation = (input: WorkbenchPanelRenderInput & {
|
|
@@ -1405,7 +1483,6 @@ declare interface WidgetContribution {
|
|
|
1405
1483
|
priority?: number;
|
|
1406
1484
|
rendererId: string;
|
|
1407
1485
|
openCommandId?: string;
|
|
1408
|
-
role?: WorkbenchWidgetRole;
|
|
1409
1486
|
eligibleLocations?: WorkbenchLocationEligibility;
|
|
1410
1487
|
panelMenuOwner?: WorkbenchPanelMenuOwner;
|
|
1411
1488
|
tab?: WorkbenchWidgetTab;
|
|
@@ -1505,6 +1582,20 @@ declare interface WorkbenchCommandParamsRequest {
|
|
|
1505
1582
|
context?: WorkbenchCommandExecutionContext;
|
|
1506
1583
|
}
|
|
1507
1584
|
|
|
1585
|
+
declare interface WorkbenchCompositionAddablePanel extends WorkbenchModeAddablePanel {
|
|
1586
|
+
contribution: RegisteredWidgetContribution;
|
|
1587
|
+
}
|
|
1588
|
+
|
|
1589
|
+
declare interface WorkbenchCompositionController {
|
|
1590
|
+
panelsFor(region: WorkbenchPanelRegion): WorkbenchCompositionRegionPanels;
|
|
1591
|
+
}
|
|
1592
|
+
|
|
1593
|
+
declare interface WorkbenchCompositionRegionPanels {
|
|
1594
|
+
open: readonly WorkbenchWidgetPlacement[];
|
|
1595
|
+
addable: readonly WorkbenchCompositionAddablePanel[];
|
|
1596
|
+
closable: readonly string[];
|
|
1597
|
+
}
|
|
1598
|
+
|
|
1508
1599
|
declare interface WorkbenchCore extends WorkbenchCoreContributionContext {
|
|
1509
1600
|
host: WorkbenchHost;
|
|
1510
1601
|
registerModule(module: WorkbenchModuleContribution): Disposable_2;
|
|
@@ -1516,6 +1607,7 @@ declare interface WorkbenchCoreContributionContext {
|
|
|
1516
1607
|
commandPalette: WorkbenchCommandPaletteController;
|
|
1517
1608
|
commandPaletteResources: CommandPaletteResourceRegistry;
|
|
1518
1609
|
commands: CommandRegistry;
|
|
1610
|
+
composition: WorkbenchCompositionController;
|
|
1519
1611
|
context: ContextKeyService;
|
|
1520
1612
|
focus: WorkbenchFocusController;
|
|
1521
1613
|
history: HistoryController;
|
|
@@ -1524,6 +1616,7 @@ declare interface WorkbenchCoreContributionContext {
|
|
|
1524
1616
|
layout: WorkbenchLayoutModel;
|
|
1525
1617
|
modes: WorkbenchModeRegistry;
|
|
1526
1618
|
navigation: NavigationRegistry;
|
|
1619
|
+
navigator: WorkbenchNavigator;
|
|
1527
1620
|
notifications: NotificationRegistry;
|
|
1528
1621
|
panels: WorkbenchPanelsController;
|
|
1529
1622
|
preferences: PreferenceRegistry;
|
|
@@ -1596,7 +1689,7 @@ declare interface WorkbenchLayoutStoreState {
|
|
|
1596
1689
|
placeholders: Partial<Record<WorkbenchRegion, RegisteredPlaceholderContribution>>;
|
|
1597
1690
|
}
|
|
1598
1691
|
|
|
1599
|
-
declare type WorkbenchLocationContribution =
|
|
1692
|
+
declare type WorkbenchLocationContribution = WidgetContribution & WorkbenchPanelMenusContribution;
|
|
1600
1693
|
|
|
1601
1694
|
declare interface WorkbenchLocationEligibility {
|
|
1602
1695
|
modeIds?: string[];
|
|
@@ -1618,15 +1711,31 @@ declare type WorkbenchModeActivationContext = WorkbenchCoreContributionContext;
|
|
|
1618
1711
|
|
|
1619
1712
|
declare type WorkbenchModeActivationResult = Disposable_2 | readonly Disposable_2[] | undefined;
|
|
1620
1713
|
|
|
1714
|
+
declare interface WorkbenchModeAddablePanel {
|
|
1715
|
+
panelId: string;
|
|
1716
|
+
region: WorkbenchPanelRegion;
|
|
1717
|
+
allowedRegions?: readonly WorkbenchRegion[];
|
|
1718
|
+
pinned?: boolean;
|
|
1719
|
+
}
|
|
1720
|
+
|
|
1721
|
+
declare interface WorkbenchModeAddablePanelContext {
|
|
1722
|
+
layout: WorkbenchLayout;
|
|
1723
|
+
resource?: ResourceRef;
|
|
1724
|
+
}
|
|
1725
|
+
|
|
1621
1726
|
declare type WorkbenchModeChangeListener = () => void;
|
|
1622
1727
|
|
|
1623
1728
|
declare interface WorkbenchModeContribution {
|
|
1624
1729
|
id: string;
|
|
1625
1730
|
label?: string;
|
|
1626
1731
|
panels?: readonly WorkbenchPanelRegion[];
|
|
1732
|
+
resourceKinds?: readonly string[];
|
|
1733
|
+
defaultResource?: ResourceRef | (() => Promise<ResourceRef | undefined> | ResourceRef | undefined);
|
|
1734
|
+
listAddablePanels?(context: WorkbenchModeAddablePanelContext): readonly WorkbenchModeAddablePanel[];
|
|
1627
1735
|
activate(ctx: WorkbenchModeActivationContext): WorkbenchModeActivationResult;
|
|
1628
1736
|
seed?(ctx: WorkbenchModeActivationContext): void;
|
|
1629
1737
|
enter?(ctx: WorkbenchModeActivationContext): WorkbenchModeActivationResult;
|
|
1738
|
+
reconcile?(ctx: WorkbenchModeActivationContext): void;
|
|
1630
1739
|
}
|
|
1631
1740
|
|
|
1632
1741
|
declare interface WorkbenchModeRegistry {
|
|
@@ -1662,6 +1771,14 @@ declare interface WorkbenchModuleContribution {
|
|
|
1662
1771
|
|
|
1663
1772
|
declare type WorkbenchModuleContributionContext = WorkbenchModuleContext;
|
|
1664
1773
|
|
|
1774
|
+
declare interface WorkbenchNavigationCommit {
|
|
1775
|
+
modeId: string | undefined;
|
|
1776
|
+
resource: ResourceRef | undefined;
|
|
1777
|
+
replaceActive: boolean;
|
|
1778
|
+
}
|
|
1779
|
+
|
|
1780
|
+
declare type WorkbenchNavigationDiagnosticCode = "navigation_mode_missing" | "navigation_resource_missing" | "navigation_resource_incompatible" | "navigation_default_missing" | "navigation_target_stale";
|
|
1781
|
+
|
|
1665
1782
|
declare interface WorkbenchNavigationEntry {
|
|
1666
1783
|
entryId: string;
|
|
1667
1784
|
recordedAt: number;
|
|
@@ -1676,6 +1793,53 @@ declare interface WorkbenchNavigationEntry {
|
|
|
1676
1793
|
closedSubPanel?: WorkbenchClosedSubPanel;
|
|
1677
1794
|
}
|
|
1678
1795
|
|
|
1796
|
+
declare type WorkbenchNavigationResult = {
|
|
1797
|
+
ok: true;
|
|
1798
|
+
modeId: string | undefined;
|
|
1799
|
+
resource: ResourceRef | undefined;
|
|
1800
|
+
} | {
|
|
1801
|
+
ok: false;
|
|
1802
|
+
code: WorkbenchNavigationDiagnosticCode;
|
|
1803
|
+
message: string;
|
|
1804
|
+
};
|
|
1805
|
+
|
|
1806
|
+
declare interface WorkbenchNavigationTarget {
|
|
1807
|
+
modeId?: string;
|
|
1808
|
+
resource?: ResourceRef;
|
|
1809
|
+
replaceActive?: boolean;
|
|
1810
|
+
}
|
|
1811
|
+
|
|
1812
|
+
declare interface WorkbenchNavigator {
|
|
1813
|
+
configure(hooks: WorkbenchNavigatorHostHooks): void;
|
|
1814
|
+
getSelectedResource(): ResourceRef | undefined;
|
|
1815
|
+
open(target: WorkbenchNavigationTarget): Promise<WorkbenchNavigationResult>;
|
|
1816
|
+
commitContext(input: WorkbenchNavigatorCommitInput): WorkbenchNavigationResult;
|
|
1817
|
+
getLastResource(projectId: string | undefined, modeId: string): ResourceRef | undefined;
|
|
1818
|
+
forgetResource(uri: string): void;
|
|
1819
|
+
onDidCommit(listener: (commit: WorkbenchNavigationCommit) => void): {
|
|
1820
|
+
dispose(): void;
|
|
1821
|
+
};
|
|
1822
|
+
}
|
|
1823
|
+
|
|
1824
|
+
declare interface WorkbenchNavigatorCommitInput {
|
|
1825
|
+
modeId?: string | null;
|
|
1826
|
+
resource?: ResourceRef | null;
|
|
1827
|
+
replaceActive?: boolean;
|
|
1828
|
+
present?: boolean;
|
|
1829
|
+
}
|
|
1830
|
+
|
|
1831
|
+
declare interface WorkbenchNavigatorHostHooks {
|
|
1832
|
+
getProjectId?(): string | undefined;
|
|
1833
|
+
getSelectedResource?(): ResourceRef | undefined;
|
|
1834
|
+
interpretSelection?(resource: ResourceRef): ResourceRef | undefined;
|
|
1835
|
+
applySelection?(resource: ResourceRef | undefined): void;
|
|
1836
|
+
applyScope?(commit: WorkbenchNavigationCommit): void;
|
|
1837
|
+
applyBreadcrumb?(resource: ResourceRef | undefined): void;
|
|
1838
|
+
presentResource?(resource: ResourceRef, input: {
|
|
1839
|
+
replaceActive: boolean;
|
|
1840
|
+
}): Promise<unknown> | unknown;
|
|
1841
|
+
}
|
|
1842
|
+
|
|
1679
1843
|
declare interface WorkbenchNotification {
|
|
1680
1844
|
id?: string;
|
|
1681
1845
|
level: WorkbenchNotificationLevel;
|
|
@@ -1717,7 +1881,6 @@ declare interface WorkbenchPanelContribution {
|
|
|
1717
1881
|
region: WorkbenchRegion;
|
|
1718
1882
|
fallbackRegion?: WorkbenchRegion;
|
|
1719
1883
|
rendererId: string;
|
|
1720
|
-
closable: boolean;
|
|
1721
1884
|
singleton?: boolean;
|
|
1722
1885
|
reuse?: WorkbenchPanelReusePolicy;
|
|
1723
1886
|
mountStrategy?: WorkbenchPanelMountStrategy;
|
|
@@ -1773,7 +1936,7 @@ declare interface WorkbenchPanelInstance_2 {
|
|
|
1773
1936
|
tab?: WorkbenchPanelTab_2;
|
|
1774
1937
|
}
|
|
1775
1938
|
|
|
1776
|
-
declare type WorkbenchPanelMenuContribution = Omit<WidgetContribution, "region" | "fallbackRegion"
|
|
1939
|
+
declare type WorkbenchPanelMenuContribution = Omit<WidgetContribution, "region" | "fallbackRegion"> & {
|
|
1777
1940
|
region: WorkbenchPanelMenuRegion;
|
|
1778
1941
|
fallbackRegion?: WorkbenchPanelMenuRegion;
|
|
1779
1942
|
};
|
|
@@ -1979,7 +2142,7 @@ declare type WorkbenchStoreSelector<TState, TValue> = (state: TState) => TValue;
|
|
|
1979
2142
|
|
|
1980
2143
|
declare type WorkbenchStoreSelectorListener<TValue> = (value: TValue, previousValue: TValue) => void;
|
|
1981
2144
|
|
|
1982
|
-
declare type WorkbenchSubPanelContribution = Omit<WidgetContribution, "region" | "fallbackRegion"
|
|
2145
|
+
declare type WorkbenchSubPanelContribution = Omit<WidgetContribution, "region" | "fallbackRegion"> & {
|
|
1983
2146
|
region: WorkbenchPanelRegion;
|
|
1984
2147
|
fallbackRegion?: WorkbenchPanelRegion;
|
|
1985
2148
|
} & WorkbenchPanelMenusContribution;
|
package/dist/webview-runtime.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const r = '// Generated by packages/pstdio-extensions/scripts/build-runtime.ts\nfunction d(){let P=globalThis;if(P.window!==void 0&&P.document!==void 0)return"browser";if(P.WorkerGlobalScope!==void 0&&P.self!==void 0&&P.self instanceof P.WorkerGlobalScope||P.window===void 0&&P.self!==void 0&&typeof P.importScripts=="function")return"worker";let G=P.process;if(G&&typeof G=="object"){let R=G.versions??{},J=G.release?.name;if(R.bun||J==="bun"||P.Bun!==void 0)return"bun";if(R.node&&J==="node")return"node"}return P.Bun===void 0?"browser":"bun"}function V(){return d()}function b(){return V()==="worker"}function x(){let P=V();return P==="node"||P==="bun"}function u(){return window.self!==window.top}function p(P){let G={};return function R(J,X=""){Object.keys(J).forEach((Q)=>{let K=X?`${X}.${Q}`:Q;J[Q]===Object(J[Q])&&R(J[Q],K),typeof J[Q]=="function"&&(G[K]=J[Q],delete J[Q])})}(P),G}function i(P){return!P||P==="null"?"*":P}function l(P,G,R){if(!P||typeof P!="object")return P;let J=Array.isArray(G)?G:G.split(".").map((Q)=>Q.match(/^\\d+$/)?Number(Q):Q),X=P;for(let Q=0;Q<J.length;Q++){let K=J[Q];Q===J.length-1?X[K]=R:((!X[K]||typeof X[K]!="object")&&(X[K]=typeof J[Q+1]=="number"?[]:{}),X=X[K])}return P}function r(P=10){let G="";for(let R=0;R<P;R++)G+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".charAt(Math.floor(Math.random()*62));return G}var E=V(),_=null;if(E==="node"||E==="bun")try{let P=globalThis.require;_=P?.("node:worker_threads")?.parentPort??null}catch{}function s(){if(x())return _;if(b())return self;if(u())return window.parent;throw Error("No valid target found for postMessage")}function D(P,G,R,J){if(!P)throw Error("Rimless Error: No target specified for postMessage");if(x()&&P===_){P.postMessage(G,{transfer:J});return}if(b()){P.postMessage(G,{transfer:J});return}if(P.postMessage){P.postMessage(G,{targetOrigin:i(R),transfer:J});return}throw Error("Rimless Error: Invalid target for postMessage")}function S(P){return _!==null&&P===_}function j(P,G,R){S(P)?P.on(G,R):("addEventListener"in P)&&P.addEventListener(G,R)}function H(P,G,R){S(P)?P.off(G,R):("removeEventListener"in P)&&P.removeEventListener(G,R)}function w(P){return P.data||P}var
|
|
1
|
+
const r = '// Generated by packages/pstdio-extensions/scripts/build-runtime.ts\nfunction d(){let P=globalThis;if(P.window!==void 0&&P.document!==void 0)return"browser";if(P.WorkerGlobalScope!==void 0&&P.self!==void 0&&P.self instanceof P.WorkerGlobalScope||P.window===void 0&&P.self!==void 0&&typeof P.importScripts=="function")return"worker";let G=P.process;if(G&&typeof G=="object"){let R=G.versions??{},J=G.release?.name;if(R.bun||J==="bun"||P.Bun!==void 0)return"bun";if(R.node&&J==="node")return"node"}return P.Bun===void 0?"browser":"bun"}function V(){return d()}function b(){return V()==="worker"}function x(){let P=V();return P==="node"||P==="bun"}function u(){return window.self!==window.top}function p(P){let G={};return function R(J,X=""){Object.keys(J).forEach((Q)=>{let K=X?`${X}.${Q}`:Q;J[Q]===Object(J[Q])&&R(J[Q],K),typeof J[Q]=="function"&&(G[K]=J[Q],delete J[Q])})}(P),G}function i(P){return!P||P==="null"?"*":P}function l(P,G,R){if(!P||typeof P!="object")return P;let J=Array.isArray(G)?G:G.split(".").map((Q)=>Q.match(/^\\d+$/)?Number(Q):Q),X=P;for(let Q=0;Q<J.length;Q++){let K=J[Q];Q===J.length-1?X[K]=R:((!X[K]||typeof X[K]!="object")&&(X[K]=typeof J[Q+1]=="number"?[]:{}),X=X[K])}return P}function r(P=10){let G="";for(let R=0;R<P;R++)G+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".charAt(Math.floor(Math.random()*62));return G}var E=V(),_=null;if(E==="node"||E==="bun")try{let P=globalThis.require;_=P?.("node:worker_threads")?.parentPort??null}catch{}function s(){if(x())return _;if(b())return self;if(u())return window.parent;throw Error("No valid target found for postMessage")}function D(P,G,R,J){if(!P)throw Error("Rimless Error: No target specified for postMessage");if(x()&&P===_){P.postMessage(G,{transfer:J});return}if(b()){P.postMessage(G,{transfer:J});return}if(P.postMessage){P.postMessage(G,{targetOrigin:i(R),transfer:J});return}throw Error("Rimless Error: Invalid target for postMessage")}function S(P){return _!==null&&P===_}function j(P,G,R){S(P)?P.on(G,R):("addEventListener"in P)&&P.addEventListener(G,R)}function H(P,G,R){S(P)?P.off(G,R):("removeEventListener"in P)&&P.removeEventListener(G,R)}function w(P){return P.data||P}var L=function(P){return P.MESSAGE="message",P}({}),M=function(P){return P.HANDSHAKE_REQUEST="RIMLESS/HANDSHAKE_REQUEST",P.HANDSHAKE_REPLY="RIMLESS/HANDSHAKE_REPLY",P.RPC_REQUEST="RIMLESS/RPC_REQUEST",P.RPC_RESOLVE="RIMLESS/RPC_RESOLVE",P.RPC_REJECT="RIMLESS/RPC_REJECT",P}({}),A=Symbol();function o(P={},G,R,J,X){let Q=[];for(let[K,Z]of Object.entries(P)){async function Y(B){let{action:N,callID:q,connectionID:$,callName:O,args:U=[]}=w(B);if(N!==M.RPC_REQUEST||!q||!O||O!==K||$!==G)return;let F={action:M.RPC_RESOLVE,callID:q,callName:O,connectionID:$,error:null,result:null},T;try{F.result=await Z(...U,X),F.result?.[A]&&(T=F.result[A]??[],delete F.result[A])}catch(C){F.action=M.RPC_REJECT,F.error=JSON.parse(JSON.stringify(C,Object.getOwnPropertyNames(C)))}D(J,F,B?.origin,T)}j(R,L.MESSAGE,Y),Q.push(()=>H(R,L.MESSAGE,Y))}return()=>Q.forEach((K)=>K())}function t(P,G,R,J=[],X,Q){return(...K)=>new Promise((Z,Y)=>{let B=r();function N(O){let{callID:U,connectionID:F,callName:T,result:C,error:v,action:I}=w(O);if(!(!U||!T)&&T===P&&U===B&&F===G){if(I===M.RPC_RESOLVE)return Z(C);if(I===M.RPC_REJECT)return Y(v)}}let q={action:M.RPC_REQUEST,args:K,callID:B,callName:P,connectionID:G},$=K.reduce((O,U)=>U[A]?.length?O.concat(U[A]):O,K[A]??[]);j(X,L.MESSAGE,N),J.push(()=>H(X,L.MESSAGE,N)),D(Q,q,R?.origin,$)})}function a(P={},G=[],R,J,X,Q){let K={...P},Z=[];for(let Y of G)l(K,Y,t(Y,R,J,Z,X,Q));return{remote:K,unregisterRemote:()=>Z.forEach((Y)=>Y())}}function n(P={},G){return new Promise(async(R)=>{let J=p(P),X=s(),Q=self||window;async function K(Z){let Y=w(Z);if(Y?.action!==M.HANDSHAKE_REPLY)return;let{remote:B,unregisterRemote:N}=a(Y.schema,Y.methodNames,Y.connectionID,Z,Q,X),q=o(J,Y.connectionID,Q,X,B);return await G?.onConnectionSetup?.(B),D(X,{action:M.HANDSHAKE_REPLY,connectionID:Y.connectionID},Z?.origin),R({remote:B,close:()=>{H(Q,L.MESSAGE,K),N(),q()},id:Y.connectionID})}j(Q,L.MESSAGE,K),D(X,{action:M.HANDSHAKE_REQUEST,methodNames:Object.keys(J),schema:P})})}var f={connect:n};var e=(P)=>typeof P==="object"&&P!==null,y=(P)=>{try{let G=JSON.stringify(P);if(typeof G==="string"&&G.length>0)return G}catch{}try{return String(P)}catch{return"Unknown error"}},k=(P)=>{if(P instanceof Error)return{message:P.message,stack:P.stack};if(typeof P==="string")return{message:P};if(e(P)){let G=typeof P.message==="string"?P.message:null,R=typeof P.stack==="string"?P.stack:void 0;if(G)return R?{message:G,stack:R}:{message:G};return{message:y(P)}}if(P===null||P===void 0)return{message:"Unknown error"};return{message:y(P)}};var z=(P)=>({id:P}),W=(P,G)=>({id:P,kind:G.kind,label:G.label,description:G.description,metadata:G.metadata}),zP={sidenav:W("project.sidenav",{kind:"panel"}),headerPrimary:W("project.headerPrimary",{kind:"menu"}),headerOverflow:W("project.headerOverflow",{kind:"menu"}),settingsPanels:W("project.settingsPanels",{kind:"settings"})},BP={headerPrimary:W("session.headerPrimary",{kind:"menu"}),headerOverflow:W("session.headerOverflow",{kind:"menu"}),transcriptActions:W("session.transcriptActions",{kind:"menu"})},WP={headerPrimary:W("workspace.headerPrimary",{kind:"menu"}),headerOverflow:W("workspace.headerOverflow",{kind:"menu"}),sidenav:W("workspace.sidenav",{kind:"panel"})},qP={opened:z("project.opened")},FP={started:z("session.started"),resumed:z("session.resumed"),awaitingInput:z("session.awaitingInput"),succeeded:z("session.succeeded"),failed:z("session.failed"),completed:z("session.completed")},MP={created:z("workspace.created"),provision:z("workspace.provision"),ready:z("workspace.ready"),archived:z("workspace.archived"),deleted:z("workspace.deleted")},NP={removed:z("worktree.removed")},OP={committed:z("git.committed"),rebased:z("git.rebased"),merged:z("git.merged"),conflicted:z("git.conflicted")};var PP=["commands.execute","resource.open","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"],GP=["host.dispatchKeyboardEvent"],UP=[...PP,...GP];var c=(P,G)=>({call:async(R,J)=>await P({method:R,params:J}),onEvent:G}),g=(P)=>{let G=P,R=new Set;return{get:()=>G,subscribe:(J)=>{return R.add(J),()=>R.delete(J)},set:(J)=>{G=J;for(let X of R)X(G)}}};var h="pstdio-extension-mount",RP=()=>{let P=new Map;return{get length(){return P.size},clear:()=>P.clear(),getItem:(G)=>P.get(G)??null,key:(G)=>Array.from(P.keys())[G]??null,removeItem:(G)=>P.delete(G),setItem:(G,R)=>P.set(G,R)}},JP=()=>{for(let P of["localStorage","sessionStorage"])try{window[P]}catch{Object.defineProperty(window,P,{configurable:!0,value:RP()})}},m=(P,G)=>{let R=document.documentElement,J=P==="dark"?"light":"dark";R.classList.remove(J),R.classList.add(P),R.setAttribute("data-theme",P),R.style.colorScheme=P;for(let[X,Q]of Object.entries(G))if(X.startsWith("--"))R.style.setProperty(X,Q)},KP=(P)=>{for(let G of P){let R=document.createElement("link");R.rel="stylesheet",R.href=G,document.head.appendChild(R)}},QP=()=>{let P=document.getElementById(h);if(!P)P=document.createElement("div"),P.id=h,P.style.height="100%",P.style.width="100%",document.body.appendChild(P);return P},XP=(P)=>P instanceof HTMLInputElement||P instanceof HTMLTextAreaElement||P instanceof HTMLSelectElement||P instanceof HTMLElement&&P.isContentEditable,YP=async()=>{JP();let P=g(void 0),G=new Map,R=(K,Z)=>{let Y=G.get(K)??new Set;return Y.add(Z),G.set(K,Y),()=>{Y.delete(Z)}},J,X=!1,Q=await f.connect({init:async(K)=>{try{m(K.theme,K.themeVariables),KP(K.styles),P.set(K.props);let Z=QP(),Y=await import(K.moduleUrl),B=Y.default??(Y.mount?Y:void 0);if(!B?.mount)throw Error("Extension module does not export a default view (defineExtensionView).");let N=c(($)=>Q.remote.call($),R),q=await B.mount(Z,N,P);if(J=typeof q==="function"?q:void 0,!X)X=!0,document.addEventListener("keydown",($)=>{if(!$.ctrlKey&&!$.metaKey&&!$.altKey)return;if(XP($.target)&&!$.shiftKey)return;Q.remote.call({method:"host.dispatchKeyboardEvent",params:{key:$.key,code:$.code,ctrlKey:$.ctrlKey,metaKey:$.metaKey,altKey:$.altKey,shiftKey:$.shiftKey,repeat:$.repeat}}).catch(()=>{})},!0)}catch(Z){let Y=k(Z);throw Q.remote.runtimeError(Y),Z instanceof Error?Z:Error(Y.message)}},themeUpdate:(K)=>{m(K.theme,K.variables)},propsUpdate:(K)=>{P.set(K.props)},hostEvent:(K)=>{for(let Z of G.get(K.scope)??[])Z(K.payload)}});Q.remote.ready({}),window.addEventListener("beforeunload",()=>{J?.()})};YP();\n', t = "pstdio-extension-mount", o = (e) => e.replaceAll("&", "&").replaceAll('"', """).replaceAll("<", "<"), i = (e) => e.replaceAll("<\/script", "<\\/script").replaceAll("<!--", "<\\!--"), n = (e) => `<!doctype html>
|
|
2
2
|
<html lang="en">
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="utf-8" />
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webview-runtime.js","sources":["../../pstdio-extensions/src/bridge/webview-runtime/runtime.bundle.js?raw","../../pstdio-extensions/src/bridge/webview-runtime/runtime-html.ts","../src/webview-runtime/index.ts"],"sourcesContent":["export default \"// Generated by packages/pstdio-extensions/scripts/build-runtime.ts\\nfunction d(){let P=globalThis;if(P.window!==void 0&&P.document!==void 0)return\\\"browser\\\";if(P.WorkerGlobalScope!==void 0&&P.self!==void 0&&P.self instanceof P.WorkerGlobalScope||P.window===void 0&&P.self!==void 0&&typeof P.importScripts==\\\"function\\\")return\\\"worker\\\";let G=P.process;if(G&&typeof G==\\\"object\\\"){let R=G.versions??{},J=G.release?.name;if(R.bun||J===\\\"bun\\\"||P.Bun!==void 0)return\\\"bun\\\";if(R.node&&J===\\\"node\\\")return\\\"node\\\"}return P.Bun===void 0?\\\"browser\\\":\\\"bun\\\"}function V(){return d()}function b(){return V()===\\\"worker\\\"}function x(){let P=V();return P===\\\"node\\\"||P===\\\"bun\\\"}function u(){return window.self!==window.top}function p(P){let G={};return function R(J,X=\\\"\\\"){Object.keys(J).forEach((Q)=>{let K=X?`${X}.${Q}`:Q;J[Q]===Object(J[Q])&&R(J[Q],K),typeof J[Q]==\\\"function\\\"&&(G[K]=J[Q],delete J[Q])})}(P),G}function i(P){return!P||P===\\\"null\\\"?\\\"*\\\":P}function l(P,G,R){if(!P||typeof P!=\\\"object\\\")return P;let J=Array.isArray(G)?G:G.split(\\\".\\\").map((Q)=>Q.match(/^\\\\d+$/)?Number(Q):Q),X=P;for(let Q=0;Q<J.length;Q++){let K=J[Q];Q===J.length-1?X[K]=R:((!X[K]||typeof X[K]!=\\\"object\\\")&&(X[K]=typeof J[Q+1]==\\\"number\\\"?[]:{}),X=X[K])}return P}function r(P=10){let G=\\\"\\\";for(let R=0;R<P;R++)G+=\\\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\\\".charAt(Math.floor(Math.random()*62));return G}var E=V(),_=null;if(E===\\\"node\\\"||E===\\\"bun\\\")try{let P=globalThis.require;_=P?.(\\\"node:worker_threads\\\")?.parentPort??null}catch{}function s(){if(x())return _;if(b())return self;if(u())return window.parent;throw Error(\\\"No valid target found for postMessage\\\")}function D(P,G,R,J){if(!P)throw Error(\\\"Rimless Error: No target specified for postMessage\\\");if(x()&&P===_){P.postMessage(G,{transfer:J});return}if(b()){P.postMessage(G,{transfer:J});return}if(P.postMessage){P.postMessage(G,{targetOrigin:i(R),transfer:J});return}throw Error(\\\"Rimless Error: Invalid target for postMessage\\\")}function S(P){return _!==null&&P===_}function j(P,G,R){S(P)?P.on(G,R):(\\\"addEventListener\\\"in P)&&P.addEventListener(G,R)}function H(P,G,R){S(P)?P.off(G,R):(\\\"removeEventListener\\\"in P)&&P.removeEventListener(G,R)}function w(P){return P.data||P}var N=function(P){return P.MESSAGE=\\\"message\\\",P}({}),M=function(P){return P.HANDSHAKE_REQUEST=\\\"RIMLESS/HANDSHAKE_REQUEST\\\",P.HANDSHAKE_REPLY=\\\"RIMLESS/HANDSHAKE_REPLY\\\",P.RPC_REQUEST=\\\"RIMLESS/RPC_REQUEST\\\",P.RPC_RESOLVE=\\\"RIMLESS/RPC_RESOLVE\\\",P.RPC_REJECT=\\\"RIMLESS/RPC_REJECT\\\",P}({}),L=Symbol();function o(P={},G,R,J,X){let Q=[];for(let[K,Z]of Object.entries(P)){async function Y(B){let{action:O,callID:q,connectionID:$,callName:U,args:A=[]}=w(B);if(O!==M.RPC_REQUEST||!q||!U||U!==K||$!==G)return;let F={action:M.RPC_RESOLVE,callID:q,callName:U,connectionID:$,error:null,result:null},T;try{F.result=await Z(...A,X),F.result?.[L]&&(T=F.result[L]??[],delete F.result[L])}catch(C){F.action=M.RPC_REJECT,F.error=JSON.parse(JSON.stringify(C,Object.getOwnPropertyNames(C)))}D(J,F,B?.origin,T)}j(R,N.MESSAGE,Y),Q.push(()=>H(R,N.MESSAGE,Y))}return()=>Q.forEach((K)=>K())}function t(P,G,R,J=[],X,Q){return(...K)=>new Promise((Z,Y)=>{let B=r();function O(U){let{callID:A,connectionID:F,callName:T,result:C,error:v,action:I}=w(U);if(!(!A||!T)&&T===P&&A===B&&F===G){if(I===M.RPC_RESOLVE)return Z(C);if(I===M.RPC_REJECT)return Y(v)}}let q={action:M.RPC_REQUEST,args:K,callID:B,callName:P,connectionID:G},$=K.reduce((U,A)=>A[L]?.length?U.concat(A[L]):U,K[L]??[]);j(X,N.MESSAGE,O),J.push(()=>H(X,N.MESSAGE,O)),D(Q,q,R?.origin,$)})}function a(P={},G=[],R,J,X,Q){let K={...P},Z=[];for(let Y of G)l(K,Y,t(Y,R,J,Z,X,Q));return{remote:K,unregisterRemote:()=>Z.forEach((Y)=>Y())}}function n(P={},G){return new Promise(async(R)=>{let J=p(P),X=s(),Q=self||window;async function K(Z){let Y=w(Z);if(Y?.action!==M.HANDSHAKE_REPLY)return;let{remote:B,unregisterRemote:O}=a(Y.schema,Y.methodNames,Y.connectionID,Z,Q,X),q=o(J,Y.connectionID,Q,X,B);return await G?.onConnectionSetup?.(B),D(X,{action:M.HANDSHAKE_REPLY,connectionID:Y.connectionID},Z?.origin),R({remote:B,close:()=>{H(Q,N.MESSAGE,K),O(),q()},id:Y.connectionID})}j(Q,N.MESSAGE,K),D(X,{action:M.HANDSHAKE_REQUEST,methodNames:Object.keys(J),schema:P})})}var f={connect:n};var e=(P)=>typeof P===\\\"object\\\"&&P!==null,y=(P)=>{try{let G=JSON.stringify(P);if(typeof G===\\\"string\\\"&&G.length>0)return G}catch{}try{return String(P)}catch{return\\\"Unknown error\\\"}},k=(P)=>{if(P instanceof Error)return{message:P.message,stack:P.stack};if(typeof P===\\\"string\\\")return{message:P};if(e(P)){let G=typeof P.message===\\\"string\\\"?P.message:null,R=typeof P.stack===\\\"string\\\"?P.stack:void 0;if(G)return R?{message:G,stack:R}:{message:G};return{message:y(P)}}if(P===null||P===void 0)return{message:\\\"Unknown error\\\"};return{message:y(P)}};var z=(P)=>({id:P}),W=(P,G)=>({id:P,kind:G.kind,label:G.label,description:G.description,metadata:G.metadata}),zP={sidenav:W(\\\"project.sidenav\\\",{kind:\\\"panel\\\"}),headerPrimary:W(\\\"project.headerPrimary\\\",{kind:\\\"menu\\\"}),headerOverflow:W(\\\"project.headerOverflow\\\",{kind:\\\"menu\\\"}),settingsPanels:W(\\\"project.settingsPanels\\\",{kind:\\\"settings\\\"})},BP={headerPrimary:W(\\\"session.headerPrimary\\\",{kind:\\\"menu\\\"}),headerOverflow:W(\\\"session.headerOverflow\\\",{kind:\\\"menu\\\"}),transcriptActions:W(\\\"session.transcriptActions\\\",{kind:\\\"menu\\\"})},WP={headerPrimary:W(\\\"workspace.headerPrimary\\\",{kind:\\\"menu\\\"}),headerOverflow:W(\\\"workspace.headerOverflow\\\",{kind:\\\"menu\\\"}),sidenav:W(\\\"workspace.sidenav\\\",{kind:\\\"panel\\\"})},qP={opened:z(\\\"project.opened\\\")},FP={started:z(\\\"session.started\\\"),resumed:z(\\\"session.resumed\\\"),awaitingInput:z(\\\"session.awaitingInput\\\"),succeeded:z(\\\"session.succeeded\\\"),failed:z(\\\"session.failed\\\"),completed:z(\\\"session.completed\\\")},MP={created:z(\\\"workspace.created\\\"),provision:z(\\\"workspace.provision\\\"),ready:z(\\\"workspace.ready\\\"),archived:z(\\\"workspace.archived\\\"),deleted:z(\\\"workspace.deleted\\\")},OP={removed:z(\\\"worktree.removed\\\")},UP={committed:z(\\\"git.committed\\\"),rebased:z(\\\"git.rebased\\\"),merged:z(\\\"git.merged\\\"),conflicted:z(\\\"git.conflicted\\\")};var PP=[\\\"commands.execute\\\",\\\"resource.open\\\",\\\"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\\\"],GP=[\\\"host.dispatchKeyboardEvent\\\"],AP=[...PP,...GP];var c=(P,G)=>({call:async(R,J)=>await P({method:R,params:J}),onEvent:G}),h=(P)=>{let G=P,R=new Set;return{get:()=>G,subscribe:(J)=>{return R.add(J),()=>R.delete(J)},set:(J)=>{G=J;for(let X of R)X(G)}}};var g=\\\"pstdio-extension-mount\\\",RP=()=>{let P=new Map;return{get length(){return P.size},clear:()=>P.clear(),getItem:(G)=>P.get(G)??null,key:(G)=>Array.from(P.keys())[G]??null,removeItem:(G)=>P.delete(G),setItem:(G,R)=>P.set(G,R)}},JP=()=>{for(let P of[\\\"localStorage\\\",\\\"sessionStorage\\\"])try{window[P]}catch{Object.defineProperty(window,P,{configurable:!0,value:RP()})}},m=(P,G)=>{let R=document.documentElement,J=P===\\\"dark\\\"?\\\"light\\\":\\\"dark\\\";R.classList.remove(J),R.classList.add(P),R.setAttribute(\\\"data-theme\\\",P),R.style.colorScheme=P;for(let[X,Q]of Object.entries(G))if(X.startsWith(\\\"--\\\"))R.style.setProperty(X,Q)},KP=(P)=>{for(let G of P){let R=document.createElement(\\\"link\\\");R.rel=\\\"stylesheet\\\",R.href=G,document.head.appendChild(R)}},QP=()=>{let P=document.getElementById(g);if(!P)P=document.createElement(\\\"div\\\"),P.id=g,P.style.height=\\\"100%\\\",P.style.width=\\\"100%\\\",document.body.appendChild(P);return P},XP=(P)=>P instanceof HTMLInputElement||P instanceof HTMLTextAreaElement||P instanceof HTMLSelectElement||P instanceof HTMLElement&&P.isContentEditable,YP=async()=>{JP();let P=h(void 0),G=new Map,R=(K,Z)=>{let Y=G.get(K)??new Set;return Y.add(Z),G.set(K,Y),()=>{Y.delete(Z)}},J,X=!1,Q=await f.connect({init:async(K)=>{try{m(K.theme,K.themeVariables),KP(K.styles),P.set(K.props);let Z=QP(),Y=await import(K.moduleUrl),B=Y.default??(Y.mount?Y:void 0);if(!B?.mount)throw Error(\\\"Extension module does not export a default view (defineExtensionView).\\\");let O=c(($)=>Q.remote.call($),R),q=await B.mount(Z,O,P);if(J=typeof q===\\\"function\\\"?q:void 0,!X)X=!0,document.addEventListener(\\\"keydown\\\",($)=>{if(!$.ctrlKey&&!$.metaKey&&!$.altKey)return;if(XP($.target)&&!$.shiftKey)return;Q.remote.call({method:\\\"host.dispatchKeyboardEvent\\\",params:{key:$.key,code:$.code,ctrlKey:$.ctrlKey,metaKey:$.metaKey,altKey:$.altKey,shiftKey:$.shiftKey,repeat:$.repeat}}).catch(()=>{})},!0)}catch(Z){let Y=k(Z);throw Q.remote.runtimeError(Y),Z instanceof Error?Z:Error(Y.message)}},themeUpdate:(K)=>{m(K.theme,K.variables)},propsUpdate:(K)=>{P.set(K.props)},hostEvent:(K)=>{for(let Z of G.get(K.scope)??[])Z(K.payload)}});Q.remote.ready({}),window.addEventListener(\\\"beforeunload\\\",()=>{J?.()})};YP();\\n\"","const MOUNT_ID = \"pstdio-extension-mount\";\n\nconst escapeAttribute = (value: string) =>\n value.replaceAll(\"&\", \"&\").replaceAll('\"', \""\").replaceAll(\"<\", \"<\");\n\nconst escapeScriptContent = (value: string) => value.replaceAll(\"</script\", \"<\\\\/script\").replaceAll(\"<!--\", \"<\\\\!--\");\n\nconst renderRuntimeHostDocument = (scriptTag: string) => `<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <style>\n html, body {\n height: 100%;\n margin: 0;\n background: transparent;\n }\n body {\n overflow-x: hidden !important;\n overflow-y: auto !important;\n }\n #${MOUNT_ID} {\n height: 100%;\n width: 100%;\n display: block;\n min-height: 0;\n }\n </style>\n </head>\n <body>\n <div id=\"${MOUNT_ID}\"></div>\n ${scriptTag}\n </body>\n</html>\n`;\n\nexport const getExtensionRuntimeScriptUrl = () => new URL(\"./runtime.bundle.js\", import.meta.url).href;\n\nexport const renderExtensionRuntimeHtml = (scriptUrl: string) =>\n renderRuntimeHostDocument(`<script src=\"${escapeAttribute(scriptUrl)}\"></script>`);\n\nexport const renderInlineExtensionRuntimeHtml = (runtimeScript: string) =>\n renderRuntimeHostDocument(`<script>${escapeScriptContent(runtimeScript)}</script>`);\n","import runtimeScript from \"pstdio-extensions/bridge/webview-runtime.bundle.js?raw\";\n\nexport {\n renderExtensionRuntimeHtml,\n renderInlineExtensionRuntimeHtml,\n} from \"pstdio-extensions/bridge/webview-runtime-html\";\n\n// The guest runtime bundle is inlined here so a host app can serve it without\n// depending on the private pstdio-extensions package.\nexport const getExtensionRuntimeScript = () => runtimeScript;\n"],"names":["runtimeScript","MOUNT_ID","escapeAttribute","value","replaceAll","escapeScriptContent","renderRuntimeHostDocument","scriptTag","renderExtensionRuntimeHtml","scriptUrl","renderInlineExtensionRuntimeHtml","getExtensionRuntimeScript"],"mappings":"AAAA,MAAAA,IAAe,q/QCATC,IAAW,0BAEXC,IAAkBA,CAACC,MACvBA,EAAMC,WAAW,KAAK,OAAO,EAAEA,WAAW,KAAK,QAAQ,EAAEA,WAAW,KAAK,MAAM,GAE3EC,IAAsBA,CAACF,MAAkBA,EAAMC,WAAW,aAAY,YAAY,EAAEA,WAAW,QAAQ,QAAQ,GAE/GE,IAA4BA,CAACC,MAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAehDN,CAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eASFA,CAAQ;AAAA,MACjBM,CAAS;AAAA;AAAA;AAAA,GAOFC,IAA6BA,CAACC,MACzCH,EAA0B,gBAAgBJ,EAAgBO,CAAS,CAAC,cAAa,GAEtEC,IAAmCA,CAACV,MAC/CM,EAA0B,WAAWD,EAAoBL,CAAa,CAAC,YAAW,GClCvEW,IAA4BA,MAAMX;"}
|
|
1
|
+
{"version":3,"file":"webview-runtime.js","sources":["../../pstdio-extensions/src/bridge/webview-runtime/runtime.bundle.js?raw","../../pstdio-extensions/src/bridge/webview-runtime/runtime-html.ts","../src/webview-runtime/index.ts"],"sourcesContent":["export default \"// Generated by packages/pstdio-extensions/scripts/build-runtime.ts\\nfunction d(){let P=globalThis;if(P.window!==void 0&&P.document!==void 0)return\\\"browser\\\";if(P.WorkerGlobalScope!==void 0&&P.self!==void 0&&P.self instanceof P.WorkerGlobalScope||P.window===void 0&&P.self!==void 0&&typeof P.importScripts==\\\"function\\\")return\\\"worker\\\";let G=P.process;if(G&&typeof G==\\\"object\\\"){let R=G.versions??{},J=G.release?.name;if(R.bun||J===\\\"bun\\\"||P.Bun!==void 0)return\\\"bun\\\";if(R.node&&J===\\\"node\\\")return\\\"node\\\"}return P.Bun===void 0?\\\"browser\\\":\\\"bun\\\"}function V(){return d()}function b(){return V()===\\\"worker\\\"}function x(){let P=V();return P===\\\"node\\\"||P===\\\"bun\\\"}function u(){return window.self!==window.top}function p(P){let G={};return function R(J,X=\\\"\\\"){Object.keys(J).forEach((Q)=>{let K=X?`${X}.${Q}`:Q;J[Q]===Object(J[Q])&&R(J[Q],K),typeof J[Q]==\\\"function\\\"&&(G[K]=J[Q],delete J[Q])})}(P),G}function i(P){return!P||P===\\\"null\\\"?\\\"*\\\":P}function l(P,G,R){if(!P||typeof P!=\\\"object\\\")return P;let J=Array.isArray(G)?G:G.split(\\\".\\\").map((Q)=>Q.match(/^\\\\d+$/)?Number(Q):Q),X=P;for(let Q=0;Q<J.length;Q++){let K=J[Q];Q===J.length-1?X[K]=R:((!X[K]||typeof X[K]!=\\\"object\\\")&&(X[K]=typeof J[Q+1]==\\\"number\\\"?[]:{}),X=X[K])}return P}function r(P=10){let G=\\\"\\\";for(let R=0;R<P;R++)G+=\\\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\\\".charAt(Math.floor(Math.random()*62));return G}var E=V(),_=null;if(E===\\\"node\\\"||E===\\\"bun\\\")try{let P=globalThis.require;_=P?.(\\\"node:worker_threads\\\")?.parentPort??null}catch{}function s(){if(x())return _;if(b())return self;if(u())return window.parent;throw Error(\\\"No valid target found for postMessage\\\")}function D(P,G,R,J){if(!P)throw Error(\\\"Rimless Error: No target specified for postMessage\\\");if(x()&&P===_){P.postMessage(G,{transfer:J});return}if(b()){P.postMessage(G,{transfer:J});return}if(P.postMessage){P.postMessage(G,{targetOrigin:i(R),transfer:J});return}throw Error(\\\"Rimless Error: Invalid target for postMessage\\\")}function S(P){return _!==null&&P===_}function j(P,G,R){S(P)?P.on(G,R):(\\\"addEventListener\\\"in P)&&P.addEventListener(G,R)}function H(P,G,R){S(P)?P.off(G,R):(\\\"removeEventListener\\\"in P)&&P.removeEventListener(G,R)}function w(P){return P.data||P}var L=function(P){return P.MESSAGE=\\\"message\\\",P}({}),M=function(P){return P.HANDSHAKE_REQUEST=\\\"RIMLESS/HANDSHAKE_REQUEST\\\",P.HANDSHAKE_REPLY=\\\"RIMLESS/HANDSHAKE_REPLY\\\",P.RPC_REQUEST=\\\"RIMLESS/RPC_REQUEST\\\",P.RPC_RESOLVE=\\\"RIMLESS/RPC_RESOLVE\\\",P.RPC_REJECT=\\\"RIMLESS/RPC_REJECT\\\",P}({}),A=Symbol();function o(P={},G,R,J,X){let Q=[];for(let[K,Z]of Object.entries(P)){async function Y(B){let{action:N,callID:q,connectionID:$,callName:O,args:U=[]}=w(B);if(N!==M.RPC_REQUEST||!q||!O||O!==K||$!==G)return;let F={action:M.RPC_RESOLVE,callID:q,callName:O,connectionID:$,error:null,result:null},T;try{F.result=await Z(...U,X),F.result?.[A]&&(T=F.result[A]??[],delete F.result[A])}catch(C){F.action=M.RPC_REJECT,F.error=JSON.parse(JSON.stringify(C,Object.getOwnPropertyNames(C)))}D(J,F,B?.origin,T)}j(R,L.MESSAGE,Y),Q.push(()=>H(R,L.MESSAGE,Y))}return()=>Q.forEach((K)=>K())}function t(P,G,R,J=[],X,Q){return(...K)=>new Promise((Z,Y)=>{let B=r();function N(O){let{callID:U,connectionID:F,callName:T,result:C,error:v,action:I}=w(O);if(!(!U||!T)&&T===P&&U===B&&F===G){if(I===M.RPC_RESOLVE)return Z(C);if(I===M.RPC_REJECT)return Y(v)}}let q={action:M.RPC_REQUEST,args:K,callID:B,callName:P,connectionID:G},$=K.reduce((O,U)=>U[A]?.length?O.concat(U[A]):O,K[A]??[]);j(X,L.MESSAGE,N),J.push(()=>H(X,L.MESSAGE,N)),D(Q,q,R?.origin,$)})}function a(P={},G=[],R,J,X,Q){let K={...P},Z=[];for(let Y of G)l(K,Y,t(Y,R,J,Z,X,Q));return{remote:K,unregisterRemote:()=>Z.forEach((Y)=>Y())}}function n(P={},G){return new Promise(async(R)=>{let J=p(P),X=s(),Q=self||window;async function K(Z){let Y=w(Z);if(Y?.action!==M.HANDSHAKE_REPLY)return;let{remote:B,unregisterRemote:N}=a(Y.schema,Y.methodNames,Y.connectionID,Z,Q,X),q=o(J,Y.connectionID,Q,X,B);return await G?.onConnectionSetup?.(B),D(X,{action:M.HANDSHAKE_REPLY,connectionID:Y.connectionID},Z?.origin),R({remote:B,close:()=>{H(Q,L.MESSAGE,K),N(),q()},id:Y.connectionID})}j(Q,L.MESSAGE,K),D(X,{action:M.HANDSHAKE_REQUEST,methodNames:Object.keys(J),schema:P})})}var f={connect:n};var e=(P)=>typeof P===\\\"object\\\"&&P!==null,y=(P)=>{try{let G=JSON.stringify(P);if(typeof G===\\\"string\\\"&&G.length>0)return G}catch{}try{return String(P)}catch{return\\\"Unknown error\\\"}},k=(P)=>{if(P instanceof Error)return{message:P.message,stack:P.stack};if(typeof P===\\\"string\\\")return{message:P};if(e(P)){let G=typeof P.message===\\\"string\\\"?P.message:null,R=typeof P.stack===\\\"string\\\"?P.stack:void 0;if(G)return R?{message:G,stack:R}:{message:G};return{message:y(P)}}if(P===null||P===void 0)return{message:\\\"Unknown error\\\"};return{message:y(P)}};var z=(P)=>({id:P}),W=(P,G)=>({id:P,kind:G.kind,label:G.label,description:G.description,metadata:G.metadata}),zP={sidenav:W(\\\"project.sidenav\\\",{kind:\\\"panel\\\"}),headerPrimary:W(\\\"project.headerPrimary\\\",{kind:\\\"menu\\\"}),headerOverflow:W(\\\"project.headerOverflow\\\",{kind:\\\"menu\\\"}),settingsPanels:W(\\\"project.settingsPanels\\\",{kind:\\\"settings\\\"})},BP={headerPrimary:W(\\\"session.headerPrimary\\\",{kind:\\\"menu\\\"}),headerOverflow:W(\\\"session.headerOverflow\\\",{kind:\\\"menu\\\"}),transcriptActions:W(\\\"session.transcriptActions\\\",{kind:\\\"menu\\\"})},WP={headerPrimary:W(\\\"workspace.headerPrimary\\\",{kind:\\\"menu\\\"}),headerOverflow:W(\\\"workspace.headerOverflow\\\",{kind:\\\"menu\\\"}),sidenav:W(\\\"workspace.sidenav\\\",{kind:\\\"panel\\\"})},qP={opened:z(\\\"project.opened\\\")},FP={started:z(\\\"session.started\\\"),resumed:z(\\\"session.resumed\\\"),awaitingInput:z(\\\"session.awaitingInput\\\"),succeeded:z(\\\"session.succeeded\\\"),failed:z(\\\"session.failed\\\"),completed:z(\\\"session.completed\\\")},MP={created:z(\\\"workspace.created\\\"),provision:z(\\\"workspace.provision\\\"),ready:z(\\\"workspace.ready\\\"),archived:z(\\\"workspace.archived\\\"),deleted:z(\\\"workspace.deleted\\\")},NP={removed:z(\\\"worktree.removed\\\")},OP={committed:z(\\\"git.committed\\\"),rebased:z(\\\"git.rebased\\\"),merged:z(\\\"git.merged\\\"),conflicted:z(\\\"git.conflicted\\\")};var PP=[\\\"commands.execute\\\",\\\"resource.open\\\",\\\"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\\\"],GP=[\\\"host.dispatchKeyboardEvent\\\"],UP=[...PP,...GP];var c=(P,G)=>({call:async(R,J)=>await P({method:R,params:J}),onEvent:G}),g=(P)=>{let G=P,R=new Set;return{get:()=>G,subscribe:(J)=>{return R.add(J),()=>R.delete(J)},set:(J)=>{G=J;for(let X of R)X(G)}}};var h=\\\"pstdio-extension-mount\\\",RP=()=>{let P=new Map;return{get length(){return P.size},clear:()=>P.clear(),getItem:(G)=>P.get(G)??null,key:(G)=>Array.from(P.keys())[G]??null,removeItem:(G)=>P.delete(G),setItem:(G,R)=>P.set(G,R)}},JP=()=>{for(let P of[\\\"localStorage\\\",\\\"sessionStorage\\\"])try{window[P]}catch{Object.defineProperty(window,P,{configurable:!0,value:RP()})}},m=(P,G)=>{let R=document.documentElement,J=P===\\\"dark\\\"?\\\"light\\\":\\\"dark\\\";R.classList.remove(J),R.classList.add(P),R.setAttribute(\\\"data-theme\\\",P),R.style.colorScheme=P;for(let[X,Q]of Object.entries(G))if(X.startsWith(\\\"--\\\"))R.style.setProperty(X,Q)},KP=(P)=>{for(let G of P){let R=document.createElement(\\\"link\\\");R.rel=\\\"stylesheet\\\",R.href=G,document.head.appendChild(R)}},QP=()=>{let P=document.getElementById(h);if(!P)P=document.createElement(\\\"div\\\"),P.id=h,P.style.height=\\\"100%\\\",P.style.width=\\\"100%\\\",document.body.appendChild(P);return P},XP=(P)=>P instanceof HTMLInputElement||P instanceof HTMLTextAreaElement||P instanceof HTMLSelectElement||P instanceof HTMLElement&&P.isContentEditable,YP=async()=>{JP();let P=g(void 0),G=new Map,R=(K,Z)=>{let Y=G.get(K)??new Set;return Y.add(Z),G.set(K,Y),()=>{Y.delete(Z)}},J,X=!1,Q=await f.connect({init:async(K)=>{try{m(K.theme,K.themeVariables),KP(K.styles),P.set(K.props);let Z=QP(),Y=await import(K.moduleUrl),B=Y.default??(Y.mount?Y:void 0);if(!B?.mount)throw Error(\\\"Extension module does not export a default view (defineExtensionView).\\\");let N=c(($)=>Q.remote.call($),R),q=await B.mount(Z,N,P);if(J=typeof q===\\\"function\\\"?q:void 0,!X)X=!0,document.addEventListener(\\\"keydown\\\",($)=>{if(!$.ctrlKey&&!$.metaKey&&!$.altKey)return;if(XP($.target)&&!$.shiftKey)return;Q.remote.call({method:\\\"host.dispatchKeyboardEvent\\\",params:{key:$.key,code:$.code,ctrlKey:$.ctrlKey,metaKey:$.metaKey,altKey:$.altKey,shiftKey:$.shiftKey,repeat:$.repeat}}).catch(()=>{})},!0)}catch(Z){let Y=k(Z);throw Q.remote.runtimeError(Y),Z instanceof Error?Z:Error(Y.message)}},themeUpdate:(K)=>{m(K.theme,K.variables)},propsUpdate:(K)=>{P.set(K.props)},hostEvent:(K)=>{for(let Z of G.get(K.scope)??[])Z(K.payload)}});Q.remote.ready({}),window.addEventListener(\\\"beforeunload\\\",()=>{J?.()})};YP();\\n\"","const MOUNT_ID = \"pstdio-extension-mount\";\n\nconst escapeAttribute = (value: string) =>\n value.replaceAll(\"&\", \"&\").replaceAll('\"', \""\").replaceAll(\"<\", \"<\");\n\nconst escapeScriptContent = (value: string) => value.replaceAll(\"</script\", \"<\\\\/script\").replaceAll(\"<!--\", \"<\\\\!--\");\n\nconst renderRuntimeHostDocument = (scriptTag: string) => `<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <style>\n html, body {\n height: 100%;\n margin: 0;\n background: transparent;\n }\n body {\n overflow-x: hidden !important;\n overflow-y: auto !important;\n }\n #${MOUNT_ID} {\n height: 100%;\n width: 100%;\n display: block;\n min-height: 0;\n }\n </style>\n </head>\n <body>\n <div id=\"${MOUNT_ID}\"></div>\n ${scriptTag}\n </body>\n</html>\n`;\n\nexport const getExtensionRuntimeScriptUrl = () => new URL(\"./runtime.bundle.js\", import.meta.url).href;\n\nexport const renderExtensionRuntimeHtml = (scriptUrl: string) =>\n renderRuntimeHostDocument(`<script src=\"${escapeAttribute(scriptUrl)}\"></script>`);\n\nexport const renderInlineExtensionRuntimeHtml = (runtimeScript: string) =>\n renderRuntimeHostDocument(`<script>${escapeScriptContent(runtimeScript)}</script>`);\n","import runtimeScript from \"pstdio-extensions/bridge/webview-runtime.bundle.js?raw\";\n\nexport {\n renderExtensionRuntimeHtml,\n renderInlineExtensionRuntimeHtml,\n} from \"pstdio-extensions/bridge/webview-runtime-html\";\n\n// The guest runtime bundle is inlined here so a host app can serve it without\n// depending on the private pstdio-extensions package.\nexport const getExtensionRuntimeScript = () => runtimeScript;\n"],"names":["runtimeScript","MOUNT_ID","escapeAttribute","value","replaceAll","escapeScriptContent","renderRuntimeHostDocument","scriptTag","renderExtensionRuntimeHtml","scriptUrl","renderInlineExtensionRuntimeHtml","getExtensionRuntimeScript"],"mappings":"AAAA,MAAAA,IAAe,q/QCATC,IAAW,0BAEXC,IAAkBA,CAACC,MACvBA,EAAMC,WAAW,KAAK,OAAO,EAAEA,WAAW,KAAK,QAAQ,EAAEA,WAAW,KAAK,MAAM,GAE3EC,IAAsBA,CAACF,MAAkBA,EAAMC,WAAW,aAAY,YAAY,EAAEA,WAAW,QAAQ,QAAQ,GAE/GE,IAA4BA,CAACC,MAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAehDN,CAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eASFA,CAAQ;AAAA,MACjBM,CAAS;AAAA;AAAA;AAAA,GAOFC,IAA6BA,CAACC,MACzCH,EAA0B,gBAAgBJ,EAAgBO,CAAS,CAAC,cAAa,GAEtEC,IAAmCA,CAACV,MAC/CM,EAA0B,WAAWD,EAAoBL,CAAa,CAAC,YAAW,GClCvEW,IAA4BA,MAAMX;"}
|