@pstdio/workbench 0.8.0 → 0.9.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 +39 -317
- package/dist/extensions.d.ts +1283 -774
- package/dist/extensions.js +1454 -1924
- package/dist/extensions.js.map +1 -1
- package/dist/file-renderer-view-kfJRY3yR.js +515 -0
- package/dist/file-renderer-view-kfJRY3yR.js.map +1 -0
- package/dist/index.d.ts +589 -644
- package/dist/index.js +5011 -2644
- package/dist/index.js.map +1 -1
- package/dist/react.d.ts +540 -585
- package/dist/react.js +3583 -3424
- package/dist/react.js.map +1 -1
- package/dist/storage.d.ts +118 -157
- package/dist/storage.js +135 -149
- package/dist/storage.js.map +1 -1
- package/dist/webview-runtime.d.ts +2 -5
- package/dist/webview-runtime.js +3 -3
- package/dist/webview-runtime.js.map +1 -1
- package/dist/workbench-menu-paths-B_QJzcNU.js +12 -0
- package/dist/workbench-menu-paths-B_QJzcNU.js.map +1 -0
- package/dist/workbench-renderers-DmsrBGC7.js +960 -0
- package/dist/workbench-renderers-DmsrBGC7.js.map +1 -0
- package/dist/workspaces-DJwFj8uq.js +1872 -0
- package/dist/workspaces-DJwFj8uq.js.map +1 -0
- package/package.json +6 -41
- package/dist/composition-resolver-types-CWykPyEK.js +0 -241
- package/dist/composition-resolver-types-CWykPyEK.js.map +0 -1
- package/dist/file-renderer-view-B6_iR4EN.js +0 -496
- package/dist/file-renderer-view-B6_iR4EN.js.map +0 -1
- package/dist/file-section-navigation-CfYqVObc.js +0 -30
- package/dist/file-section-navigation-CfYqVObc.js.map +0 -1
- package/dist/layout-types-DMoZz38-.js +0 -100
- package/dist/layout-types-DMoZz38-.js.map +0 -1
- package/dist/surface-map-C1pOTUmF.js +0 -52
- package/dist/surface-map-C1pOTUmF.js.map +0 -1
- package/dist/testing.d.ts +0 -2443
- package/dist/testing.js +0 -58
- package/dist/testing.js.map +0 -1
- package/dist/workbench-built-ins-BCJ6-fIM.js +0 -1173
- package/dist/workbench-built-ins-BCJ6-fIM.js.map +0 -1
- package/dist/workbench-menu-paths-D-e7iscN.js +0 -43
- package/dist/workbench-menu-paths-D-e7iscN.js.map +0 -1
- package/dist/workflow-status-settings-DLiu9FZ0.js +0 -144
- package/dist/workflow-status-settings-DLiu9FZ0.js.map +0 -1
|
@@ -1,241 +0,0 @@
|
|
|
1
|
-
const v = (e) => [.../* @__PURE__ */ new Set([e.region, ...e.allowedRegions ?? []])], _ = (e) => e.show ? Array.isArray(e.show) ? e.show : [e.show] : [], q = (e, o, s, n) => {
|
|
2
|
-
if (!o || s.resourceKind !== o.id) return !1;
|
|
3
|
-
const l = o.slots[s.slot];
|
|
4
|
-
return l ? s.extensionId !== o.extensionId && (!l.external || s.slot === "primary") ? (n.push({
|
|
5
|
-
code: "extension_resource_slot_closed",
|
|
6
|
-
message: `Slot "${s.slot}" is closed to external panels`,
|
|
7
|
-
panelId: s.panel,
|
|
8
|
-
slot: s.slot
|
|
9
|
-
}), !1) : e.composition.panels.some((r) => r.id === s.panel) ? !0 : (n.push({
|
|
10
|
-
code: "extension_panel_missing",
|
|
11
|
-
message: `Resource panel "${s.id}" names unknown panel "${s.panel}"`,
|
|
12
|
-
panelId: s.panel,
|
|
13
|
-
slot: s.slot
|
|
14
|
-
}), !1) : (n.push({
|
|
15
|
-
code: "extension_resource_slot_missing",
|
|
16
|
-
message: `Resource panel "${s.id}" names unknown slot "${s.slot}"`,
|
|
17
|
-
panelId: s.panel,
|
|
18
|
-
slot: s.slot
|
|
19
|
-
}), !1);
|
|
20
|
-
}, w = (e) => {
|
|
21
|
-
const o = e.kind?.slots[e.slotName];
|
|
22
|
-
if (!o)
|
|
23
|
-
return e.diagnostics.push({
|
|
24
|
-
code: "extension_resource_slot_missing",
|
|
25
|
-
message: `Mode "${e.input.mode.id}" places unknown slot "${e.slotName}"`,
|
|
26
|
-
slot: e.slotName
|
|
27
|
-
}), [];
|
|
28
|
-
const s = e.policy.required === !0;
|
|
29
|
-
return s && o.cardinality === "many" && e.diagnostics.push({
|
|
30
|
-
code: "extension_placement_required_invalid",
|
|
31
|
-
message: `Required slot "${e.slotName}" has cardinality many; name a specific panel instead`,
|
|
32
|
-
slot: e.slotName
|
|
33
|
-
}), e.validEdges.filter((n) => n.slot === e.slotName && !e.overriddenPanels.has(n.panel)).filter((n) => n.extensionId === e.kind?.extensionId).map((n) => ({
|
|
34
|
-
panelId: n.panel,
|
|
35
|
-
slot: e.slotName,
|
|
36
|
-
policy: e.policy,
|
|
37
|
-
required: s && o.cardinality === "one"
|
|
38
|
-
}));
|
|
39
|
-
}, P = (e, o) => {
|
|
40
|
-
const s = e.composition.resourceKinds.find((r) => r.id === e.context.resourceKind), n = _(o), l = n.find((r) => r.resourceKind === e.context.resourceKind);
|
|
41
|
-
if (l && o.extensionId === s?.extensionId) return l;
|
|
42
|
-
if (o.extensionId === e.mode.extensionId)
|
|
43
|
-
return n.find((r) => r.resourceKind === void 0);
|
|
44
|
-
}, b = (e, o, s) => {
|
|
45
|
-
const n = e.composition.resourceKinds.find((t) => t.id === e.context.resourceKind), l = [], r = e.composition.resourcePanels.filter((t) => q(e, n, t, s)), a = {
|
|
46
|
-
...o?.panels ?? {},
|
|
47
|
-
...e.mode.modePanels ?? {}
|
|
48
|
-
}, i = new Set(Object.keys(a));
|
|
49
|
-
for (const [t, c] of Object.entries(o?.slots ?? {}))
|
|
50
|
-
l.push(...w({
|
|
51
|
-
diagnostics: s,
|
|
52
|
-
kind: n,
|
|
53
|
-
input: e,
|
|
54
|
-
overriddenPanels: i,
|
|
55
|
-
policy: c,
|
|
56
|
-
slotName: t,
|
|
57
|
-
validEdges: r
|
|
58
|
-
}));
|
|
59
|
-
for (const t of e.composition.panels) {
|
|
60
|
-
const c = P(e, t);
|
|
61
|
-
if (!c) continue;
|
|
62
|
-
const p = a[t.id] ?? c;
|
|
63
|
-
l.push({
|
|
64
|
-
panelId: t.id,
|
|
65
|
-
policy: p,
|
|
66
|
-
base: c,
|
|
67
|
-
required: p.required ?? c.required ?? !1
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
const u = new Set(l.map((t) => t.panelId));
|
|
71
|
-
for (const [t, c] of Object.entries(a)) {
|
|
72
|
-
if (u.has(t)) continue;
|
|
73
|
-
const p = r.find((d) => d.panel === t);
|
|
74
|
-
if (!e.composition.panels.find((d) => d.id === t) || o?.panels?.[t] && !p) {
|
|
75
|
-
s.push({
|
|
76
|
-
code: "extension_panel_missing",
|
|
77
|
-
message: `Mode "${e.mode.id}" places panel "${t}" that is not registered for the resource`,
|
|
78
|
-
panelId: t
|
|
79
|
-
});
|
|
80
|
-
continue;
|
|
81
|
-
}
|
|
82
|
-
l.push({
|
|
83
|
-
panelId: t,
|
|
84
|
-
slot: p?.slot,
|
|
85
|
-
policy: c,
|
|
86
|
-
required: c.required === !0
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
return {
|
|
90
|
-
candidates: l,
|
|
91
|
-
validEdges: r
|
|
92
|
-
};
|
|
93
|
-
}, h = (e) => {
|
|
94
|
-
const o = e.base ? v(e.base) : v(e.policy);
|
|
95
|
-
return !e.base || !e.policy.allowedRegions ? o : v(e.policy).filter((s) => o.includes(s));
|
|
96
|
-
}, y = (e, o, s) => {
|
|
97
|
-
if (!e.composition.panels.find((r) => r.id === o.panelId)) return;
|
|
98
|
-
const l = h(o);
|
|
99
|
-
if (!l.includes(o.policy.region)) {
|
|
100
|
-
s.push({
|
|
101
|
-
code: "extension_panel_placement_unresolvable",
|
|
102
|
-
message: `Panel "${o.panelId}" cannot be placed in region "${o.policy.region}"`,
|
|
103
|
-
panelId: o.panelId
|
|
104
|
-
});
|
|
105
|
-
return;
|
|
106
|
-
}
|
|
107
|
-
return {
|
|
108
|
-
panelId: o.panelId,
|
|
109
|
-
region: o.policy.region,
|
|
110
|
-
slot: o.slot,
|
|
111
|
-
required: o.required,
|
|
112
|
-
defaultOpen: o.required || o.policy.defaultOpen !== !1,
|
|
113
|
-
pinned: o.policy.pinned,
|
|
114
|
-
allowedRegions: l,
|
|
115
|
-
origin: o.required ? "required" : "default"
|
|
116
|
-
};
|
|
117
|
-
}, g = (e, o, s) => {
|
|
118
|
-
const n = /* @__PURE__ */ new Map();
|
|
119
|
-
let l;
|
|
120
|
-
for (const r of o) {
|
|
121
|
-
const a = y(e, r, s);
|
|
122
|
-
if (a) {
|
|
123
|
-
n.has(a.panelId) || n.set(a.panelId, a);
|
|
124
|
-
continue;
|
|
125
|
-
}
|
|
126
|
-
r.required && h(r).includes("main") && (l = {
|
|
127
|
-
panelId: r.panelId
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
return {
|
|
131
|
-
requiredFallback: l,
|
|
132
|
-
resolvedByPanel: n
|
|
133
|
-
};
|
|
134
|
-
}, R = (e) => Object.entries(e.regions).filter((o) => !!o[1]), $ = (e) => {
|
|
135
|
-
for (const [o, s] of R(e.persisted)) {
|
|
136
|
-
for (const n of s.order) {
|
|
137
|
-
const l = e.resolvedByPanel.get(n);
|
|
138
|
-
l && e.place({
|
|
139
|
-
...l,
|
|
140
|
-
origin: "persisted"
|
|
141
|
-
}, l.allowedRegions.includes(o) ? o : l.region);
|
|
142
|
-
}
|
|
143
|
-
s.activePanelId && e.placed.has(s.activePanelId) && (e.activePanelIds[o] = s.activePanelId);
|
|
144
|
-
}
|
|
145
|
-
}, K = (e, o) => {
|
|
146
|
-
const s = [], n = {}, l = {}, r = /* @__PURE__ */ new Set(), a = (i, u) => {
|
|
147
|
-
r.has(i.panelId) || (r.add(i.panelId), s.push({
|
|
148
|
-
...i,
|
|
149
|
-
region: u
|
|
150
|
-
}), n[u] = [...n[u] ?? [], i.panelId]);
|
|
151
|
-
};
|
|
152
|
-
if (!e.persisted) {
|
|
153
|
-
for (const i of o.values()) i.defaultOpen && a(i, i.region);
|
|
154
|
-
return {
|
|
155
|
-
activePanelIds: l,
|
|
156
|
-
placed: r,
|
|
157
|
-
placements: s,
|
|
158
|
-
regionOrder: n
|
|
159
|
-
};
|
|
160
|
-
}
|
|
161
|
-
$({
|
|
162
|
-
activePanelIds: l,
|
|
163
|
-
persisted: e.persisted,
|
|
164
|
-
place: a,
|
|
165
|
-
placed: r,
|
|
166
|
-
resolvedByPanel: o
|
|
167
|
-
});
|
|
168
|
-
for (const i of o.values())
|
|
169
|
-
i.required && !r.has(i.panelId) && a(i, i.region);
|
|
170
|
-
return {
|
|
171
|
-
activePanelIds: l,
|
|
172
|
-
placed: r,
|
|
173
|
-
placements: s,
|
|
174
|
-
regionOrder: n
|
|
175
|
-
};
|
|
176
|
-
}, k = (e) => {
|
|
177
|
-
const o = [], s = e.context.resourceKind ? e.mode.resources?.[e.context.resourceKind] : void 0;
|
|
178
|
-
if (e.context.resourceKind && !s)
|
|
179
|
-
return o.push({
|
|
180
|
-
code: "extension_mode_resource_unsupported",
|
|
181
|
-
message: `Mode "${e.mode.id}" does not accept resource kind "${e.context.resourceKind}"`
|
|
182
|
-
}), {
|
|
183
|
-
placements: [],
|
|
184
|
-
regionOrder: {},
|
|
185
|
-
activePanelIds: {},
|
|
186
|
-
addablePanels: [],
|
|
187
|
-
diagnostics: o
|
|
188
|
-
};
|
|
189
|
-
const {
|
|
190
|
-
candidates: n,
|
|
191
|
-
validEdges: l
|
|
192
|
-
} = b(e, s, o), {
|
|
193
|
-
requiredFallback: r,
|
|
194
|
-
resolvedByPanel: a
|
|
195
|
-
} = g(e, n, o), {
|
|
196
|
-
activePanelIds: i,
|
|
197
|
-
placed: u,
|
|
198
|
-
placements: t,
|
|
199
|
-
regionOrder: c
|
|
200
|
-
} = K(e, a), p = Array.from(a.values()).filter((d) => !d.required && !u.has(d.panelId)).map(({
|
|
201
|
-
panelId: d,
|
|
202
|
-
region: m,
|
|
203
|
-
allowedRegions: f,
|
|
204
|
-
pinned: x
|
|
205
|
-
}) => ({
|
|
206
|
-
panelId: d,
|
|
207
|
-
region: m,
|
|
208
|
-
allowedRegions: f,
|
|
209
|
-
pinned: x
|
|
210
|
-
})), I = new Set(p.map((d) => d.panelId));
|
|
211
|
-
for (const d of l) {
|
|
212
|
-
if (u.has(d.panel) || I.has(d.panel)) continue;
|
|
213
|
-
const m = s?.panels?.[d.panel] ?? s?.slots?.[d.slot];
|
|
214
|
-
if (!m) continue;
|
|
215
|
-
const f = y(e, {
|
|
216
|
-
panelId: d.panel,
|
|
217
|
-
slot: d.slot,
|
|
218
|
-
policy: m,
|
|
219
|
-
required: !1
|
|
220
|
-
}, o);
|
|
221
|
-
f && (p.push({
|
|
222
|
-
panelId: f.panelId,
|
|
223
|
-
region: f.region,
|
|
224
|
-
allowedRegions: f.allowedRegions,
|
|
225
|
-
pinned: f.pinned
|
|
226
|
-
}), I.add(f.panelId));
|
|
227
|
-
}
|
|
228
|
-
return {
|
|
229
|
-
placements: t,
|
|
230
|
-
regionOrder: c,
|
|
231
|
-
activePanelIds: i,
|
|
232
|
-
addablePanels: p,
|
|
233
|
-
diagnostics: o,
|
|
234
|
-
requiredFallback: r
|
|
235
|
-
};
|
|
236
|
-
}, O = ["sidenav", "main", "secondary", "side"];
|
|
237
|
-
export {
|
|
238
|
-
O as d,
|
|
239
|
-
k as r
|
|
240
|
-
};
|
|
241
|
-
//# sourceMappingURL=composition-resolver-types-CWykPyEK.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"composition-resolver-types-CWykPyEK.js","sources":["../src/core/registries/layout/composition-resolver.ts","../src/core/registries/layout/composition-resolver-types.ts"],"sourcesContent":["import type {\n CompositionDiagnostic,\n CompositionModeRecipe,\n CompositionPanelPlacement,\n CompositionPlacementPolicy,\n CompositionResourceKindDefinition,\n DockedCompositionRegion,\n ResolveCompositionInput,\n ResolvedComposition,\n ResolvedCompositionPlacement,\n} from \"./composition-resolver-types\";\n\ninterface PlacementCandidate {\n panelId: string;\n slot?: string;\n policy: CompositionPlacementPolicy;\n base?: CompositionPanelPlacement;\n required: boolean;\n}\n\nconst policyRegions = (policy: CompositionPlacementPolicy) => [\n ...new Set([policy.region, ...(policy.allowedRegions ?? [])]),\n];\n\nconst panelPlacements = (panel: ResolveCompositionInput[\"composition\"][\"panels\"][number]) => {\n if (!panel.show) return [];\n return Array.isArray(panel.show) ? panel.show : [panel.show];\n};\n\nconst isUsableEdge = (\n input: ResolveCompositionInput,\n kind: CompositionResourceKindDefinition | undefined,\n edge: ResolveCompositionInput[\"composition\"][\"resourcePanels\"][number],\n diagnostics: CompositionDiagnostic[],\n) => {\n if (!kind || edge.resourceKind !== kind.id) return false;\n const slot = kind.slots[edge.slot];\n if (!slot) {\n diagnostics.push({\n code: \"extension_resource_slot_missing\",\n message: `Resource panel \"${edge.id}\" names unknown slot \"${edge.slot}\"`,\n panelId: edge.panel,\n slot: edge.slot,\n });\n return false;\n }\n if (edge.extensionId !== kind.extensionId && (!slot.external || edge.slot === \"primary\")) {\n diagnostics.push({\n code: \"extension_resource_slot_closed\",\n message: `Slot \"${edge.slot}\" is closed to external panels`,\n panelId: edge.panel,\n slot: edge.slot,\n });\n return false;\n }\n if (!input.composition.panels.some((panel) => panel.id === edge.panel)) {\n diagnostics.push({\n code: \"extension_panel_missing\",\n message: `Resource panel \"${edge.id}\" names unknown panel \"${edge.panel}\"`,\n panelId: edge.panel,\n slot: edge.slot,\n });\n return false;\n }\n return true;\n};\n\nconst slotCandidates = (args: {\n diagnostics: CompositionDiagnostic[];\n kind: CompositionResourceKindDefinition | undefined;\n input: ResolveCompositionInput;\n overriddenPanels: ReadonlySet<string>;\n policy: CompositionPlacementPolicy;\n slotName: string;\n validEdges: ResolveCompositionInput[\"composition\"][\"resourcePanels\"];\n}): PlacementCandidate[] => {\n const slot = args.kind?.slots[args.slotName];\n if (!slot) {\n args.diagnostics.push({\n code: \"extension_resource_slot_missing\",\n message: `Mode \"${args.input.mode.id}\" places unknown slot \"${args.slotName}\"`,\n slot: args.slotName,\n });\n return [];\n }\n const required = args.policy.required === true;\n if (required && slot.cardinality === \"many\") {\n args.diagnostics.push({\n code: \"extension_placement_required_invalid\",\n message: `Required slot \"${args.slotName}\" has cardinality many; name a specific panel instead`,\n slot: args.slotName,\n });\n }\n return args.validEdges\n .filter((edge) => edge.slot === args.slotName && !args.overriddenPanels.has(edge.panel))\n .filter((edge) => edge.extensionId === args.kind?.extensionId)\n .map((edge) => ({\n panelId: edge.panel,\n slot: args.slotName,\n policy: args.policy,\n required: required && slot.cardinality === \"one\",\n }));\n};\n\nconst panelPlacementFor = (\n input: ResolveCompositionInput,\n panel: ResolveCompositionInput[\"composition\"][\"panels\"][number],\n) => {\n const kind = input.composition.resourceKinds.find((candidate) => candidate.id === input.context.resourceKind);\n const placements = panelPlacements(panel);\n const resourcePlacement = placements.find((placement) => placement.resourceKind === input.context.resourceKind);\n if (resourcePlacement && panel.extensionId === kind?.extensionId) return resourcePlacement;\n if (panel.extensionId !== input.mode.extensionId) return undefined;\n return placements.find((placement) => placement.resourceKind === undefined);\n};\n\nconst collectCandidates = (\n input: ResolveCompositionInput,\n recipe: CompositionModeRecipe | undefined,\n diagnostics: CompositionDiagnostic[],\n) => {\n const kind = input.composition.resourceKinds.find((candidate) => candidate.id === input.context.resourceKind);\n const candidates: PlacementCandidate[] = [];\n const validEdges = input.composition.resourcePanels.filter((edge) => isUsableEdge(input, kind, edge, diagnostics));\n const overrides = { ...(recipe?.panels ?? {}), ...(input.mode.modePanels ?? {}) };\n const overriddenPanels = new Set(Object.keys(overrides));\n\n for (const [slotName, policy] of Object.entries(recipe?.slots ?? {})) {\n candidates.push(...slotCandidates({ diagnostics, kind, input, overriddenPanels, policy, slotName, validEdges }));\n }\n\n for (const panel of input.composition.panels) {\n const base = panelPlacementFor(input, panel);\n if (!base) continue;\n const policy = overrides[panel.id] ?? base;\n candidates.push({\n panelId: panel.id,\n policy,\n base,\n required: policy.required ?? base.required ?? false,\n });\n }\n\n const known = new Set(candidates.map((candidate) => candidate.panelId));\n for (const [panelId, policy] of Object.entries(overrides)) {\n if (known.has(panelId)) continue;\n const edge = validEdges.find((candidate) => candidate.panel === panelId);\n const panel = input.composition.panels.find((candidate) => candidate.id === panelId);\n if (!panel || (recipe?.panels?.[panelId] && !edge)) {\n diagnostics.push({\n code: \"extension_panel_missing\",\n message: `Mode \"${input.mode.id}\" places panel \"${panelId}\" that is not registered for the resource`,\n panelId,\n });\n continue;\n }\n candidates.push({ panelId, slot: edge?.slot, policy, required: policy.required === true });\n }\n\n return { candidates, validEdges };\n};\n\nconst allowedRegionsFor = (candidate: PlacementCandidate) => {\n const baseRegions = candidate.base ? policyRegions(candidate.base) : policyRegions(candidate.policy);\n if (!candidate.base || !candidate.policy.allowedRegions) return baseRegions;\n return policyRegions(candidate.policy).filter((region) => baseRegions.includes(region));\n};\n\nconst resolveCandidate = (\n input: ResolveCompositionInput,\n candidate: PlacementCandidate,\n diagnostics: CompositionDiagnostic[],\n): ResolvedCompositionPlacement | undefined => {\n const panel = input.composition.panels.find((definition) => definition.id === candidate.panelId);\n if (!panel) return undefined;\n const allowedRegions = allowedRegionsFor(candidate);\n if (!allowedRegions.includes(candidate.policy.region)) {\n diagnostics.push({\n code: \"extension_panel_placement_unresolvable\",\n message: `Panel \"${candidate.panelId}\" cannot be placed in region \"${candidate.policy.region}\"`,\n panelId: candidate.panelId,\n });\n return undefined;\n }\n return {\n panelId: candidate.panelId,\n region: candidate.policy.region,\n slot: candidate.slot,\n required: candidate.required,\n defaultOpen: candidate.required || candidate.policy.defaultOpen !== false,\n pinned: candidate.policy.pinned,\n allowedRegions,\n origin: candidate.required ? \"required\" : \"default\",\n };\n};\n\nconst resolveCandidates = (\n input: ResolveCompositionInput,\n candidates: readonly PlacementCandidate[],\n diagnostics: CompositionDiagnostic[],\n) => {\n const resolvedByPanel = new Map<string, ResolvedCompositionPlacement>();\n let requiredFallback: { panelId: string } | undefined;\n\n for (const candidate of candidates) {\n const resolved = resolveCandidate(input, candidate, diagnostics);\n if (resolved) {\n if (!resolvedByPanel.has(resolved.panelId)) resolvedByPanel.set(resolved.panelId, resolved);\n continue;\n }\n if (candidate.required && allowedRegionsFor(candidate).includes(\"main\")) {\n requiredFallback = { panelId: candidate.panelId };\n }\n }\n\n return { requiredFallback, resolvedByPanel };\n};\n\ntype PersistedRegionState = { order: readonly string[]; activePanelId?: string };\ntype PlaceResolvedPanel = (placement: ResolvedCompositionPlacement, region: DockedCompositionRegion) => void;\n\nconst persistedRegions = (persisted: NonNullable<ResolveCompositionInput[\"persisted\"]>) =>\n Object.entries(persisted.regions).filter((entry): entry is [DockedCompositionRegion, PersistedRegionState] =>\n Boolean(entry[1]),\n );\n\nconst placePersistedRegions = (input: {\n activePanelIds: Partial<Record<DockedCompositionRegion, string>>;\n persisted: NonNullable<ResolveCompositionInput[\"persisted\"]>;\n place: PlaceResolvedPanel;\n placed: ReadonlySet<string>;\n resolvedByPanel: ReadonlyMap<string, ResolvedCompositionPlacement>;\n}) => {\n for (const [region, state] of persistedRegions(input.persisted)) {\n for (const panelId of state.order) {\n const resolved = input.resolvedByPanel.get(panelId);\n if (resolved) {\n input.place(\n { ...resolved, origin: \"persisted\" },\n resolved.allowedRegions.includes(region) ? region : resolved.region,\n );\n }\n }\n if (state.activePanelId && input.placed.has(state.activePanelId)) {\n input.activePanelIds[region] = state.activePanelId;\n }\n }\n};\n\nconst placeResolved = (\n input: ResolveCompositionInput,\n resolvedByPanel: ReadonlyMap<string, ResolvedCompositionPlacement>,\n) => {\n const placements: ResolvedCompositionPlacement[] = [];\n const regionOrder: Partial<Record<DockedCompositionRegion, string[]>> = {};\n const activePanelIds: Partial<Record<DockedCompositionRegion, string>> = {};\n const placed = new Set<string>();\n const place = (placement: ResolvedCompositionPlacement, region: DockedCompositionRegion) => {\n if (placed.has(placement.panelId)) return;\n placed.add(placement.panelId);\n placements.push({ ...placement, region });\n regionOrder[region] = [...(regionOrder[region] ?? []), placement.panelId];\n };\n\n if (!input.persisted) {\n for (const resolved of resolvedByPanel.values()) if (resolved.defaultOpen) place(resolved, resolved.region);\n return { activePanelIds, placed, placements, regionOrder };\n }\n placePersistedRegions({ activePanelIds, persisted: input.persisted, place, placed, resolvedByPanel });\n for (const resolved of resolvedByPanel.values()) {\n if (resolved.required && !placed.has(resolved.panelId)) place(resolved, resolved.region);\n }\n return { activePanelIds, placed, placements, regionOrder };\n};\n\nexport const resolveComposition = (input: ResolveCompositionInput): ResolvedComposition => {\n const diagnostics: CompositionDiagnostic[] = [];\n const recipe = input.context.resourceKind ? input.mode.resources?.[input.context.resourceKind] : undefined;\n if (input.context.resourceKind && !recipe) {\n diagnostics.push({\n code: \"extension_mode_resource_unsupported\",\n message: `Mode \"${input.mode.id}\" does not accept resource kind \"${input.context.resourceKind}\"`,\n });\n return { placements: [], regionOrder: {}, activePanelIds: {}, addablePanels: [], diagnostics };\n }\n\n const { candidates, validEdges } = collectCandidates(input, recipe, diagnostics);\n const { requiredFallback, resolvedByPanel } = resolveCandidates(input, candidates, diagnostics);\n const { activePanelIds, placed, placements, regionOrder } = placeResolved(input, resolvedByPanel);\n const addablePanels = Array.from(resolvedByPanel.values())\n .filter((panel) => !panel.required && !placed.has(panel.panelId))\n .map(({ panelId, region, allowedRegions, pinned }) => ({ panelId, region, allowedRegions, pinned }));\n const addablePanelIds = new Set(addablePanels.map((panel) => panel.panelId));\n\n for (const edge of validEdges) {\n if (placed.has(edge.panel) || addablePanelIds.has(edge.panel)) continue;\n const policy = recipe?.panels?.[edge.panel] ?? recipe?.slots?.[edge.slot];\n if (!policy) continue;\n const resolved = resolveCandidate(\n input,\n { panelId: edge.panel, slot: edge.slot, policy, required: false },\n diagnostics,\n );\n if (!resolved) continue;\n addablePanels.push({\n panelId: resolved.panelId,\n region: resolved.region,\n allowedRegions: resolved.allowedRegions,\n pinned: resolved.pinned,\n });\n addablePanelIds.add(resolved.panelId);\n }\n\n return { placements, regionOrder, activePanelIds, addablePanels, diagnostics, requiredFallback };\n};\n","export const dockedCompositionRegions = [\"sidenav\", \"main\", \"secondary\", \"side\"] as const;\nexport type DockedCompositionRegion = (typeof dockedCompositionRegions)[number];\n\nexport interface CompositionSlotDefinition {\n cardinality: \"one\" | \"many\";\n external: boolean;\n}\n\nexport interface CompositionResourceKindDefinition {\n id: string;\n extensionId: string;\n surface: \"primary\" | \"secondary\" | \"attached\";\n slots: Record<string, CompositionSlotDefinition>;\n}\n\nexport interface CompositionPanelDefinition {\n id: string;\n extensionId: string;\n title: string;\n icon?: string;\n show?: CompositionPanelPlacement | readonly CompositionPanelPlacement[];\n}\n\nexport interface CompositionPanelPlacement extends CompositionPlacementPolicy {\n resourceKind?: string;\n}\n\nexport interface CompositionResourcePanelEdge {\n id: string;\n extensionId: string;\n resourceKind: string;\n panel: string;\n slot: string;\n}\n\nexport interface CompositionPlacementPolicy {\n region: DockedCompositionRegion;\n allowedRegions?: readonly DockedCompositionRegion[];\n required?: boolean;\n defaultOpen?: boolean;\n pinned?: boolean;\n}\n\nexport interface CompositionModeRecipe {\n slots?: Record<string, CompositionPlacementPolicy>;\n panels?: Record<string, CompositionPlacementPolicy>;\n}\n\nexport interface CompositionModeDefinition {\n id: string;\n extensionId?: string;\n resources?: Record<string, CompositionModeRecipe>;\n modePanels?: Record<string, CompositionPlacementPolicy>;\n}\n\nexport interface WorkbenchComposition {\n resourceKinds: readonly CompositionResourceKindDefinition[];\n panels: readonly CompositionPanelDefinition[];\n resourcePanels: readonly CompositionResourcePanelEdge[];\n}\n\nexport interface PersistedCompositionRegionState {\n order: readonly string[];\n activePanelId?: string;\n}\n\n// The user-owned half of resolution: which panels are open in which region, in which\n// tab order. A panel absent from every region was closed by the user. `undefined`\n// persisted layout means the scope is new and defaults may seed.\nexport interface PersistedCompositionLayout {\n regions: Partial<Record<DockedCompositionRegion, PersistedCompositionRegionState>>;\n}\n\nexport interface CompositionResolutionContext {\n modeId: string;\n resourceKind?: string;\n}\n\nexport interface ResolveCompositionInput {\n context: CompositionResolutionContext;\n mode: CompositionModeDefinition;\n composition: WorkbenchComposition;\n persisted?: PersistedCompositionLayout;\n}\n\nexport interface ResolvedCompositionPlacement {\n panelId: string;\n region: DockedCompositionRegion;\n slot?: string;\n required: boolean;\n defaultOpen: boolean;\n pinned?: boolean;\n allowedRegions: readonly DockedCompositionRegion[];\n origin: \"persisted\" | \"required\" | \"default\";\n}\n\nexport interface ResolvedCompositionAddablePanel {\n panelId: string;\n region: DockedCompositionRegion;\n allowedRegions: readonly DockedCompositionRegion[];\n pinned?: boolean;\n}\n\nexport interface CompositionDiagnostic {\n code:\n | \"extension_resource_kind_missing\"\n | \"extension_resource_slot_missing\"\n | \"extension_resource_slot_closed\"\n | \"extension_panel_missing\"\n | \"extension_panel_placement_unresolvable\"\n | \"extension_mode_resource_unsupported\"\n | \"extension_placement_required_invalid\"\n | \"extension_resource_primary_invalid\";\n message: string;\n panelId?: string;\n slot?: string;\n}\n\nexport interface ResolvedComposition {\n placements: readonly ResolvedCompositionPlacement[];\n regionOrder: Partial<Record<DockedCompositionRegion, readonly string[]>>;\n activePanelIds: Partial<Record<DockedCompositionRegion, string>>;\n addablePanels: readonly ResolvedCompositionAddablePanel[];\n diagnostics: readonly CompositionDiagnostic[];\n // The safest main placement when a required placement cannot be resolved.\n requiredFallback?: { panelId: string };\n}\n"],"names":["policyRegions","policy","Set","region","allowedRegions","panelPlacements","panel","show","Array","isArray","isUsableEdge","input","kind","edge","diagnostics","resourceKind","id","slot","slots","extensionId","external","push","code","message","panelId","composition","panels","some","slotCandidates","args","slotName","mode","required","cardinality","validEdges","filter","overriddenPanels","has","map","panelPlacementFor","resourceKinds","find","candidate","context","placements","resourcePlacement","placement","undefined","collectCandidates","recipe","candidates","resourcePanels","overrides","modePanels","Object","keys","entries","base","known","allowedRegionsFor","baseRegions","includes","resolveCandidate","definition","defaultOpen","pinned","origin","resolveCandidates","resolvedByPanel","Map","requiredFallback","resolved","set","persistedRegions","persisted","regions","entry","Boolean","placePersistedRegions","state","order","get","place","activePanelId","placed","activePanelIds","placeResolved","regionOrder","add","values","resolveComposition","resources","addablePanels","from","addablePanelIds","dockedCompositionRegions"],"mappings":"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"}
|