@pstdio/workbench 0.12.0 → 0.36.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 +1133 -3590
- package/dist/extensions.js +2053 -2405
- package/dist/extensions.js.map +1 -1
- package/dist/file-renderer-view-DKu2l8bT.js +637 -0
- package/dist/file-renderer-view-DKu2l8bT.js.map +1 -0
- package/dist/index-DSsmgN2a.d.ts +2385 -0
- package/dist/index.d.ts +3 -2624
- package/dist/index.js +5272 -6143
- package/dist/index.js.map +1 -1
- package/dist/kanban-presentation-BWhkLbw3.d.ts +14 -0
- package/dist/navigation-tree-registry-CTidmvVs.js +91 -0
- package/dist/navigation-tree-registry-CTidmvVs.js.map +1 -0
- package/dist/react-BxrTklvM.js +8523 -0
- package/dist/react-BxrTklvM.js.map +1 -0
- package/dist/react.d.ts +398 -2849
- package/dist/react.js +2 -54
- package/dist/storage.d.ts +48 -282
- package/dist/storage.js +218 -225
- package/dist/storage.js.map +1 -1
- package/dist/webview-runtime.d.ts +8 -7
- package/dist/webview-runtime.js +10 -11
- package/dist/webview-runtime.js.map +1 -1
- package/dist/workbench-renderers-RPeMVtTc.js +908 -0
- package/dist/workbench-renderers-RPeMVtTc.js.map +1 -0
- package/package.json +3 -3
- package/dist/file-renderer-view-BJ3LX04R.js +0 -545
- package/dist/file-renderer-view-BJ3LX04R.js.map +0 -1
- package/dist/index-DwNKY4fO.js +0 -5286
- package/dist/index-DwNKY4fO.js.map +0 -1
- package/dist/react.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/workbench-renderers-BAPxtfpZ.js +0 -877
- package/dist/workbench-renderers-BAPxtfpZ.js.map +0 -1
- package/dist/workspaces-DdUPyzkL.js +0 -1886
- package/dist/workspaces-DdUPyzkL.js.map +0 -1
package/dist/storage.js
CHANGED
|
@@ -1,226 +1,219 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
1
|
+
//#region src/storage/local-storage-persistence-helpers.ts
|
|
2
|
+
var e = (e, t, n) => `${e}:${t}:${n ?? "global"}`, t = () => {
|
|
3
|
+
let e = /* @__PURE__ */ new Map();
|
|
4
|
+
return {
|
|
5
|
+
get length() {
|
|
6
|
+
return e.size;
|
|
7
|
+
},
|
|
8
|
+
getItem: (t) => e.get(t) ?? null,
|
|
9
|
+
key: (t) => [...e.keys()][t] ?? null,
|
|
10
|
+
setItem: (t, n) => {
|
|
11
|
+
e.set(t, n);
|
|
12
|
+
},
|
|
13
|
+
removeItem: (t) => {
|
|
14
|
+
e.delete(t);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
}, n = (e) => e || (typeof localStorage < "u" ? localStorage : t()), r = (e, t) => {
|
|
18
|
+
let n = e.getItem(t);
|
|
19
|
+
if (n) try {
|
|
20
|
+
return JSON.parse(n);
|
|
21
|
+
} catch {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
}, i = 4, a = 1, o = 50, s = (t) => {
|
|
25
|
+
let s = n(t.storage), c = /* @__PURE__ */ new Map(), l = t.debounceMs ?? 250, u = t.eventTarget ?? (typeof window < "u" ? {
|
|
26
|
+
addEventListener: (e, t) => window.addEventListener(e, t),
|
|
27
|
+
removeEventListener: (e, t) => window.removeEventListener(e, t)
|
|
28
|
+
} : void 0), d, f = e(t.namespace, "layout-generation", void 0), p = () => {
|
|
29
|
+
let e = r(s, f);
|
|
30
|
+
return typeof e == "object" && e && "version" in e && e.version === 1 && "generation" in e && typeof e.generation == "number" ? e.generation : 0;
|
|
31
|
+
}, m = () => {
|
|
32
|
+
let e = p() + 1, t = {
|
|
33
|
+
version: 1,
|
|
34
|
+
generation: e
|
|
35
|
+
};
|
|
36
|
+
return s.setItem(f, JSON.stringify(t)), e;
|
|
37
|
+
}, h = (e) => e?.match(/^project\/([^/]+)\/mode\/[^/]+\/resource\//)?.[1], g = (e) => e?.match(/^project\/([^/]+)/)?.[1], _ = (e) => {
|
|
38
|
+
if (!s.key) return [];
|
|
39
|
+
let n = `${t.namespace}:layout:`, r = [];
|
|
40
|
+
for (let t = 0; t < (s.length ?? 0); t += 1) {
|
|
41
|
+
let i = s.key(t);
|
|
42
|
+
if (!i?.startsWith(n)) continue;
|
|
43
|
+
let a = i.slice(n.length);
|
|
44
|
+
g(a) === e && r.push(a);
|
|
45
|
+
}
|
|
46
|
+
return r;
|
|
47
|
+
}, v = (n, i) => {
|
|
48
|
+
let o = r(s, e(t.namespace, n, i));
|
|
49
|
+
return typeof o == "object" && o && "version" in o && o.version === a && "scopes" in o && Array.isArray(o.scopes) ? o.scopes.filter((n) => typeof n == "string" && s.getItem(e(t.namespace, "layout", n)) !== null) : [];
|
|
50
|
+
}, y = (n, r, i) => {
|
|
51
|
+
let o = {
|
|
52
|
+
version: a,
|
|
53
|
+
scopes: i
|
|
54
|
+
};
|
|
55
|
+
s.setItem(e(t.namespace, n, r), JSON.stringify(o));
|
|
56
|
+
}, b = (e) => {
|
|
57
|
+
let t = g(e);
|
|
58
|
+
if (!t || !e) return;
|
|
59
|
+
let n = v("layout-scope-index", t).filter((t) => t !== e);
|
|
60
|
+
n.push(e), y("layout-scope-index", t, n);
|
|
61
|
+
}, x = (n) => {
|
|
62
|
+
let r = h(n);
|
|
63
|
+
if (!r || !n) return;
|
|
64
|
+
let i = v("layout-resource-index", r).filter((e) => e !== n);
|
|
65
|
+
i.push(n);
|
|
66
|
+
for (let n of i.splice(0, Math.max(0, i.length - o))) s.removeItem?.(e(t.namespace, "layout", n)), s.removeItem?.(e(t.namespace, "panel-menus", n));
|
|
67
|
+
y("layout-resource-index", r, i);
|
|
68
|
+
}, S = () => {
|
|
69
|
+
d && clearTimeout(d), d = void 0;
|
|
70
|
+
let n = [...c.values()];
|
|
71
|
+
c.clear();
|
|
72
|
+
let r = p();
|
|
73
|
+
for (let i of n) i.generation === r && (s.setItem(e(t.namespace, "layout", i.scope), i.raw), b(i.scope), x(i.scope));
|
|
74
|
+
}, C = () => {
|
|
75
|
+
d && clearTimeout(d), d = setTimeout(S, l);
|
|
76
|
+
};
|
|
77
|
+
return u?.addEventListener("pagehide", S), {
|
|
78
|
+
getLayout: (n) => {
|
|
79
|
+
let a = e(t.namespace, "layout", n), o = c.get(a), l = o && o.generation === p() ? JSON.parse(o.raw) : r(s, a);
|
|
80
|
+
if (l?.version === i) return l.layout;
|
|
81
|
+
},
|
|
82
|
+
setLayout: (n, r) => {
|
|
83
|
+
let a = {
|
|
84
|
+
version: i,
|
|
85
|
+
layout: n
|
|
86
|
+
}, o = e(t.namespace, "layout", r);
|
|
87
|
+
c.delete(o), c.set(o, {
|
|
88
|
+
generation: p(),
|
|
89
|
+
raw: JSON.stringify(a),
|
|
90
|
+
scope: r
|
|
91
|
+
}), C();
|
|
92
|
+
},
|
|
93
|
+
flush: S,
|
|
94
|
+
listScopes(e) {
|
|
95
|
+
return [.../* @__PURE__ */ new Set([
|
|
96
|
+
...v("layout-scope-index", e),
|
|
97
|
+
...v("layout-resource-index", e),
|
|
98
|
+
..._(e)
|
|
99
|
+
])];
|
|
100
|
+
},
|
|
101
|
+
transformLayouts(n, a) {
|
|
102
|
+
S(), m();
|
|
103
|
+
for (let o of this.listScopes?.(n) ?? []) {
|
|
104
|
+
let n = e(t.namespace, "layout", o), c = r(s, n);
|
|
105
|
+
if (c?.version !== i) continue;
|
|
106
|
+
let l = a(c.layout, o);
|
|
107
|
+
if (!l) {
|
|
108
|
+
s.removeItem?.(n);
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
s.setItem(n, JSON.stringify({
|
|
112
|
+
version: i,
|
|
113
|
+
layout: l
|
|
114
|
+
}));
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
getCompatibilityMarker: (n) => r(s, e(t.namespace, "layout-compatibility", n)),
|
|
118
|
+
setCompatibilityMarker: (n, r) => {
|
|
119
|
+
m(), s.setItem(e(t.namespace, "layout-compatibility", n), JSON.stringify(r));
|
|
120
|
+
},
|
|
121
|
+
advanceWriteGeneration: m,
|
|
122
|
+
dispose() {
|
|
123
|
+
S(), u?.removeEventListener("pagehide", S);
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
}, c = 1, l = (t) => {
|
|
127
|
+
let i = n(t.storage);
|
|
128
|
+
return {
|
|
129
|
+
load: (n) => {
|
|
130
|
+
let a = r(i, e(t.namespace, "page-location", n));
|
|
131
|
+
return a?.version === c ? a.location : void 0;
|
|
132
|
+
},
|
|
133
|
+
save: (n, r) => {
|
|
134
|
+
let a = {
|
|
135
|
+
version: c,
|
|
136
|
+
location: r
|
|
137
|
+
};
|
|
138
|
+
i.setItem(e(t.namespace, "page-location", n), JSON.stringify(a));
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
}, u = (t) => {
|
|
142
|
+
let i = n(t.storage);
|
|
143
|
+
return {
|
|
144
|
+
getMenuStates: (n) => r(i, e(t.namespace, "panel-menus", n ?? t.scope)),
|
|
145
|
+
setMenuStates: (n, r) => {
|
|
146
|
+
let a = e(t.namespace, "panel-menus", r ?? t.scope);
|
|
147
|
+
i.setItem(a, JSON.stringify(n));
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
}, d = (t) => {
|
|
151
|
+
let i = n(t.storage), a = e(t.namespace, "tree", t.scope);
|
|
152
|
+
return {
|
|
153
|
+
getTreeStates: () => r(i, a),
|
|
154
|
+
setTreeStates: (e) => {
|
|
155
|
+
i.setItem(a, JSON.stringify(e));
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
}, f = 1, p = [
|
|
159
|
+
"attached",
|
|
160
|
+
"closed",
|
|
161
|
+
"floating"
|
|
162
|
+
], m = (t) => {
|
|
163
|
+
let i = n(t.storage), a = e(t.namespace, "side-panel", t.scope);
|
|
164
|
+
return {
|
|
165
|
+
getMode: () => {
|
|
166
|
+
let e = r(i, a);
|
|
167
|
+
if (e?.version === f) return p.includes(e.mode) ? e.mode : void 0;
|
|
168
|
+
},
|
|
169
|
+
setMode: (e) => {
|
|
170
|
+
let t = {
|
|
171
|
+
version: f,
|
|
172
|
+
mode: e
|
|
173
|
+
};
|
|
174
|
+
i.setItem(a, JSON.stringify(t));
|
|
175
|
+
}
|
|
176
|
+
};
|
|
177
|
+
}, h = (e) => {
|
|
178
|
+
let t = n(e.storage), r = s({
|
|
179
|
+
debounceMs: e.debounceMs,
|
|
180
|
+
eventTarget: e.eventTarget,
|
|
181
|
+
namespace: e.namespace,
|
|
182
|
+
storage: t
|
|
183
|
+
});
|
|
184
|
+
return {
|
|
185
|
+
snapshotPersistence: {
|
|
186
|
+
getSnapshot: (e) => {
|
|
187
|
+
let t = r.getLayout(e);
|
|
188
|
+
return t ? { layout: t } : void 0;
|
|
189
|
+
},
|
|
190
|
+
setSnapshot: (e, t) => r.setLayout(e.layout, t),
|
|
191
|
+
flush: r.flush,
|
|
192
|
+
dispose: r.dispose
|
|
193
|
+
},
|
|
194
|
+
layoutPersistence: r,
|
|
195
|
+
panelMenuStatePersistence: u({
|
|
196
|
+
namespace: e.namespace,
|
|
197
|
+
scope: e.scope ?? "global",
|
|
198
|
+
storage: t
|
|
199
|
+
}),
|
|
200
|
+
pageLocationPersistence: l({
|
|
201
|
+
namespace: e.namespace,
|
|
202
|
+
storage: t
|
|
203
|
+
}),
|
|
204
|
+
treePersistence: d({
|
|
205
|
+
namespace: e.namespace,
|
|
206
|
+
scope: e.scope,
|
|
207
|
+
storage: t
|
|
208
|
+
}),
|
|
209
|
+
sidePanelPersistence: m({
|
|
210
|
+
namespace: e.namespace,
|
|
211
|
+
scope: e.scope,
|
|
212
|
+
storage: t
|
|
213
|
+
})
|
|
214
|
+
};
|
|
24
215
|
};
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
} : void 0);
|
|
30
|
-
let d;
|
|
31
|
-
const N = c(e.namespace, "layout-generation", void 0), O = () => {
|
|
32
|
-
const t = g(s, N);
|
|
33
|
-
return typeof t == "object" && t !== null && "version" in t && t.version === 1 && "generation" in t && typeof t.generation == "number" ? t.generation : 0;
|
|
34
|
-
}, E = () => {
|
|
35
|
-
const t = O() + 1, r = {
|
|
36
|
-
version: 1,
|
|
37
|
-
generation: t
|
|
38
|
-
};
|
|
39
|
-
return s.setItem(N, JSON.stringify(r)), t;
|
|
40
|
-
}, I = (t) => t?.match(/^project\/([^/]+)\/mode\/[^/]+\/resource\//)?.[1], f = (t) => t?.match(/^project\/([^/]+)/)?.[1], _ = (t) => {
|
|
41
|
-
if (!s.key) return [];
|
|
42
|
-
const r = `${e.namespace}:layout:`, o = [];
|
|
43
|
-
for (let a = 0; a < (s.length ?? 0); a += 1) {
|
|
44
|
-
const u = s.key(a);
|
|
45
|
-
if (!u?.startsWith(r)) continue;
|
|
46
|
-
const y = u.slice(r.length);
|
|
47
|
-
f(y) === t && o.push(y);
|
|
48
|
-
}
|
|
49
|
-
return o;
|
|
50
|
-
}, S = (t, r) => {
|
|
51
|
-
const o = g(s, c(e.namespace, t, r));
|
|
52
|
-
return typeof o == "object" && o !== null && "version" in o && o.version === 1 && "scopes" in o && Array.isArray(o.scopes) ? o.scopes.filter((a) => typeof a == "string" && s.getItem(c(e.namespace, "layout", a)) !== null) : [];
|
|
53
|
-
}, v = (t, r, o) => {
|
|
54
|
-
const a = {
|
|
55
|
-
version: 1,
|
|
56
|
-
scopes: o
|
|
57
|
-
};
|
|
58
|
-
s.setItem(c(e.namespace, t, r), JSON.stringify(a));
|
|
59
|
-
}, L = (t) => {
|
|
60
|
-
const r = f(t);
|
|
61
|
-
if (!r || !t) return;
|
|
62
|
-
const o = S("layout-scope-index", r).filter((a) => a !== t);
|
|
63
|
-
o.push(t), v("layout-scope-index", r, o);
|
|
64
|
-
}, R = (t) => {
|
|
65
|
-
const r = I(t);
|
|
66
|
-
if (!r || !t) return;
|
|
67
|
-
const o = S("layout-resource-index", r).filter((a) => a !== t);
|
|
68
|
-
o.push(t);
|
|
69
|
-
for (const a of o.splice(0, Math.max(0, o.length - 50)))
|
|
70
|
-
s.removeItem?.(c(e.namespace, "layout", a)), s.removeItem?.(c(e.namespace, "panel-menus", a));
|
|
71
|
-
v("layout-resource-index", r, o);
|
|
72
|
-
}, m = () => {
|
|
73
|
-
d && clearTimeout(d), d = void 0;
|
|
74
|
-
const t = [...n.values()];
|
|
75
|
-
n.clear();
|
|
76
|
-
const r = O();
|
|
77
|
-
for (const o of t)
|
|
78
|
-
o.generation === r && (s.setItem(c(e.namespace, "layout", o.scope), o.raw), L(o.scope), R(o.scope));
|
|
79
|
-
}, h = () => {
|
|
80
|
-
d && clearTimeout(d), d = setTimeout(m, i);
|
|
81
|
-
};
|
|
82
|
-
return l?.addEventListener("pagehide", m), {
|
|
83
|
-
getLayout: (t) => {
|
|
84
|
-
const r = c(e.namespace, "layout", t), o = n.get(r), a = o && o.generation === O() ? JSON.parse(o.raw) : g(s, r);
|
|
85
|
-
if (a?.version === 4) return a.layout;
|
|
86
|
-
},
|
|
87
|
-
setLayout: (t, r) => {
|
|
88
|
-
const o = {
|
|
89
|
-
version: 4,
|
|
90
|
-
layout: t
|
|
91
|
-
}, a = c(e.namespace, "layout", r);
|
|
92
|
-
n.delete(a), n.set(a, {
|
|
93
|
-
generation: O(),
|
|
94
|
-
raw: JSON.stringify(o),
|
|
95
|
-
scope: r
|
|
96
|
-
}), h();
|
|
97
|
-
},
|
|
98
|
-
flush: m,
|
|
99
|
-
listScopes(t) {
|
|
100
|
-
return [.../* @__PURE__ */ new Set([...S("layout-scope-index", t), ...S("layout-resource-index", t), ..._(t)])];
|
|
101
|
-
},
|
|
102
|
-
transformLayouts(t, r) {
|
|
103
|
-
m(), E();
|
|
104
|
-
for (const o of this.listScopes?.(t) ?? []) {
|
|
105
|
-
const a = c(e.namespace, "layout", o), u = g(s, a);
|
|
106
|
-
if (u?.version !== 4) continue;
|
|
107
|
-
const y = r(u.layout, o);
|
|
108
|
-
if (!y) {
|
|
109
|
-
s.removeItem?.(a);
|
|
110
|
-
continue;
|
|
111
|
-
}
|
|
112
|
-
s.setItem(a, JSON.stringify({
|
|
113
|
-
version: 4,
|
|
114
|
-
layout: y
|
|
115
|
-
}));
|
|
116
|
-
}
|
|
117
|
-
},
|
|
118
|
-
getCompatibilityMarker: (t) => g(s, c(e.namespace, "layout-compatibility", t)),
|
|
119
|
-
setCompatibilityMarker: (t, r) => {
|
|
120
|
-
E(), s.setItem(c(e.namespace, "layout-compatibility", t), JSON.stringify(r));
|
|
121
|
-
},
|
|
122
|
-
advanceWriteGeneration: E,
|
|
123
|
-
dispose() {
|
|
124
|
-
m(), l?.removeEventListener("pagehide", m);
|
|
125
|
-
}
|
|
126
|
-
};
|
|
127
|
-
};
|
|
128
|
-
const C = (e) => {
|
|
129
|
-
const s = p(e.storage);
|
|
130
|
-
return {
|
|
131
|
-
load: (n) => {
|
|
132
|
-
const i = g(s, c(e.namespace, "page-location", n));
|
|
133
|
-
return i?.version === 1 ? i.location : void 0;
|
|
134
|
-
},
|
|
135
|
-
save: (n, i) => {
|
|
136
|
-
const l = {
|
|
137
|
-
version: 1,
|
|
138
|
-
location: i
|
|
139
|
-
};
|
|
140
|
-
s.setItem(c(e.namespace, "page-location", n), JSON.stringify(l));
|
|
141
|
-
}
|
|
142
|
-
};
|
|
143
|
-
}, A = (e) => {
|
|
144
|
-
const s = p(e.storage);
|
|
145
|
-
return {
|
|
146
|
-
getMenuStates: (n) => g(s, c(e.namespace, "panel-menus", n ?? e.scope)),
|
|
147
|
-
setMenuStates: (n, i) => {
|
|
148
|
-
const l = c(e.namespace, "panel-menus", i ?? e.scope);
|
|
149
|
-
s.setItem(l, JSON.stringify(n));
|
|
150
|
-
}
|
|
151
|
-
};
|
|
152
|
-
}, W = (e) => {
|
|
153
|
-
const s = p(e.storage), n = c(e.namespace, "tree", e.scope);
|
|
154
|
-
return {
|
|
155
|
-
getTreeStates: () => g(s, n),
|
|
156
|
-
setTreeStates: (i) => {
|
|
157
|
-
s.setItem(n, JSON.stringify(i));
|
|
158
|
-
}
|
|
159
|
-
};
|
|
160
|
-
};
|
|
161
|
-
const M = ["attached", "closed", "floating"], K = (e) => {
|
|
162
|
-
const s = p(e.storage), n = c(e.namespace, "side-panel", e.scope);
|
|
163
|
-
return {
|
|
164
|
-
getMode: () => {
|
|
165
|
-
const i = g(s, n);
|
|
166
|
-
if (i?.version === 1)
|
|
167
|
-
return M.includes(i.mode) ? i.mode : void 0;
|
|
168
|
-
},
|
|
169
|
-
setMode: (i) => {
|
|
170
|
-
const l = {
|
|
171
|
-
version: 1,
|
|
172
|
-
mode: i
|
|
173
|
-
};
|
|
174
|
-
s.setItem(n, JSON.stringify(l));
|
|
175
|
-
}
|
|
176
|
-
};
|
|
177
|
-
}, w = (e) => {
|
|
178
|
-
const s = p(e.storage), n = T({
|
|
179
|
-
debounceMs: e.debounceMs,
|
|
180
|
-
eventTarget: e.eventTarget,
|
|
181
|
-
namespace: e.namespace,
|
|
182
|
-
storage: s
|
|
183
|
-
});
|
|
184
|
-
return {
|
|
185
|
-
snapshotPersistence: {
|
|
186
|
-
getSnapshot: (l) => {
|
|
187
|
-
const d = n.getLayout(l);
|
|
188
|
-
return d ? {
|
|
189
|
-
layout: d
|
|
190
|
-
} : void 0;
|
|
191
|
-
},
|
|
192
|
-
setSnapshot: (l, d) => n.setLayout(l.layout, d),
|
|
193
|
-
flush: n.flush,
|
|
194
|
-
dispose: n.dispose
|
|
195
|
-
},
|
|
196
|
-
layoutPersistence: n,
|
|
197
|
-
panelMenuStatePersistence: A({
|
|
198
|
-
namespace: e.namespace,
|
|
199
|
-
scope: e.scope ?? "global",
|
|
200
|
-
storage: s
|
|
201
|
-
}),
|
|
202
|
-
pageLocationPersistence: C({
|
|
203
|
-
namespace: e.namespace,
|
|
204
|
-
storage: s
|
|
205
|
-
}),
|
|
206
|
-
treePersistence: W({
|
|
207
|
-
namespace: e.namespace,
|
|
208
|
-
scope: e.scope,
|
|
209
|
-
storage: s
|
|
210
|
-
}),
|
|
211
|
-
sidePanelPersistence: K({
|
|
212
|
-
namespace: e.namespace,
|
|
213
|
-
scope: e.scope,
|
|
214
|
-
storage: s
|
|
215
|
-
})
|
|
216
|
-
};
|
|
217
|
-
};
|
|
218
|
-
export {
|
|
219
|
-
T as createLocalStorageLayoutPersistence,
|
|
220
|
-
C as createLocalStoragePageLocationPersistence,
|
|
221
|
-
A as createLocalStoragePanelMenuStatePersistence,
|
|
222
|
-
W as createLocalStorageTreePersistence,
|
|
223
|
-
w as createLocalStorageWorkbenchPersistence,
|
|
224
|
-
c as workbenchStoragePersistenceKey
|
|
225
|
-
};
|
|
226
|
-
//# sourceMappingURL=storage.js.map
|
|
216
|
+
//#endregion
|
|
217
|
+
export { s as createLocalStorageLayoutPersistence, l as createLocalStoragePageLocationPersistence, u as createLocalStoragePanelMenuStatePersistence, d as createLocalStorageTreePersistence, h as createLocalStorageWorkbenchPersistence, e as workbenchStoragePersistenceKey };
|
|
218
|
+
|
|
219
|
+
//# sourceMappingURL=storage.js.map
|
package/dist/storage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","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 | \"side-panel\"\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 PersistedWorkbenchLayoutV4 {\n version: 4;\n layout: WorkbenchLayout;\n}\n\ntype PersistedWorkbenchLayout = PersistedWorkbenchLayoutV4;\n\n// Version 4 stores ResourceRef identity keys and page Main collections. Only the\n// layout cache changes; routed locations and independent preferences stay valid.\nconst WORKBENCH_LAYOUT_VERSION = 4 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 (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: PersistedWorkbenchLayoutV4 = { 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 PersistedWorkbenchLayoutV4),\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 { PageLocation } from \"@pstdio/sdk/extensions\";\nimport type {\n PersistedTreeRendererStates,\n PersistedWorkbenchPanelMenuState,\n TreeRendererPersistenceAdapter,\n WorkbenchPageLocationPersistence,\n WorkbenchPanelMenuStatePersistenceAdapter,\n WorkbenchPersistenceAdapter,\n WorkbenchSidePanelMode,\n WorkbenchSidePanelPersistenceAdapter,\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\ninterface PersistedWorkbenchPageLocation {\n version: 1;\n location: PageLocation;\n}\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 persisted = readJson<PersistedWorkbenchPageLocation>(\n storage,\n workbenchStoragePersistenceKey(input.namespace, \"page-location\", projectId),\n );\n return persisted?.version === WORKBENCH_PAGE_LOCATION_VERSION ? persisted.location : undefined;\n },\n save: (projectId, location) => {\n const persisted: PersistedWorkbenchPageLocation = {\n version: WORKBENCH_PAGE_LOCATION_VERSION,\n location,\n };\n storage.setItem(\n workbenchStoragePersistenceKey(input.namespace, \"page-location\", projectId),\n JSON.stringify(persisted),\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\ninterface PersistedWorkbenchSidePanel {\n version: 1;\n mode: WorkbenchSidePanelMode;\n}\n\nconst WORKBENCH_SIDE_PANEL_VERSION = 1 as const;\nconst sidePanelModes: readonly WorkbenchSidePanelMode[] = [\"attached\", \"closed\", \"floating\"];\n\nexport interface CreateLocalStorageSidePanelPersistenceInput extends CreateWorkbenchStoragePersistenceInput {\n scope?: string;\n}\n\nexport const createLocalStorageSidePanelPersistence = (\n input: CreateLocalStorageSidePanelPersistenceInput,\n): WorkbenchSidePanelPersistenceAdapter => {\n const storage = resolveStorage(input.storage);\n const key = workbenchStoragePersistenceKey(input.namespace, \"side-panel\", input.scope);\n return {\n getMode: () => {\n const persisted = readJson<PersistedWorkbenchSidePanel>(storage, key);\n if (persisted?.version !== WORKBENCH_SIDE_PANEL_VERSION) return undefined;\n return sidePanelModes.includes(persisted.mode) ? persisted.mode : undefined;\n },\n setMode: (mode) => {\n const persisted: PersistedWorkbenchSidePanel = { version: WORKBENCH_SIDE_PANEL_VERSION, mode };\n storage.setItem(key, JSON.stringify(persisted));\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\n return {\n snapshotPersistence,\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 sidePanelPersistence: createLocalStorageSidePanelPersistence({\n namespace: input.namespace,\n scope: input.scope,\n storage,\n }),\n };\n};\n"],"names":["workbenchStoragePersistenceKey","namespace","kind","scope","createMemoryStorage","map","Map","length","size","getItem","key","get","index","keys","setItem","value","set","removeItem","delete","resolveStorage","storage","localStorage","readJson","raw","JSON","parse","createLocalStorageLayoutPersistence","input","pending","debounceMs","eventTarget","window","addEventListener","type","listener","removeEventListener","undefined","timer","generationKey","getGeneration","persisted","version","generation","advanceGeneration","stringify","resourceProjectId","match","scopeProjectId","storedProjectScopes","projectId","prefix","scopes","startsWith","slice","push","readScopes","WORKBENCH_LAYOUT_INDEX_VERSION","Array","isArray","filter","writeScopes","next","touchProjectScope","candidate","touchResourceScope","evictedScope","splice","Math","max","WORKBENCH_LAYOUT_RESOURCE_LIMIT","flush","writes","values","clear","write","scheduleFlush","setTimeout","getLayout","pendingWrite","WORKBENCH_LAYOUT_VERSION","layout","setLayout","listScopes","Set","transformLayouts","transform","getCompatibilityMarker","setCompatibilityMarker","advanceWriteGeneration","dispose","createLocalStoragePageLocationPersistence","load","WORKBENCH_PAGE_LOCATION_VERSION","location","save","createLocalStoragePanelMenuStatePersistence","getMenuStates","setMenuStates","state","createLocalStorageTreePersistence","getTreeStates","setTreeStates","sidePanelModes","createLocalStorageSidePanelPersistence","getMode","WORKBENCH_SIDE_PANEL_VERSION","includes","mode","setMode","createLocalStorageWorkbenchPersistence","layoutPersistence","snapshotPersistence","getSnapshot","setSnapshot","snapshot","panelMenuStatePersistence","pageLocationPersistence","treePersistence","sidePanelPersistence"],"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","CreateWorkbenchStoragePersistenceInput","readJson","resolveStorage","workbenchStoragePersistenceKey","PersistedWorkbenchLayoutV4","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","PageLocation","PersistedTreeRendererStates","PersistedWorkbenchPanelMenuState","TreeRendererPersistenceAdapter","WorkbenchPageLocationPersistence","WorkbenchPanelMenuStatePersistenceAdapter","WorkbenchPersistenceAdapter","WorkbenchSidePanelMode","WorkbenchSidePanelPersistenceAdapter","createLocalStorageLayoutPersistence","CreateWorkbenchStoragePersistenceInput","readJson","resolveStorage","workbenchStoragePersistenceKey","WorkbenchStorageLike","WorkbenchStoragePersistenceKind","CreateLocalStoragePanelMenuStatePersistenceInput","scope","CreateLocalStorageTreePersistenceInput","CreateLocalStorageWorkbenchPersistenceInput","PersistedWorkbenchPageLocation","version","location","WORKBENCH_PAGE_LOCATION_VERSION","const","createLocalStoragePageLocationPersistence","input","storage","load","projectId","persisted","namespace","undefined","save","setItem","JSON","stringify","createLocalStoragePanelMenuStatePersistence","getMenuStates","setMenuStates","state","key","createLocalStorageTreePersistence","getTreeStates","setTreeStates","PersistedWorkbenchSidePanel","mode","WORKBENCH_SIDE_PANEL_VERSION","sidePanelModes","CreateLocalStorageSidePanelPersistenceInput","createLocalStorageSidePanelPersistence","getMode","includes","setMode","createLocalStorageWorkbenchPersistence","layoutPersistence","debounceMs","eventTarget","snapshotPersistence","getSnapshot","layout","getLayout","setSnapshot","snapshot","setLayout","flush","dispose","panelMenuStatePersistence","pageLocationPersistence","treePersistence","sidePanelPersistence","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","createLocalStoragePanelMenuStatePersistence","state","createLocalStorageTreePersistence","WORKBENCH_SIDE_PANEL_VERSION","sidePanelModes","createLocalStorageSidePanelPersistence","createLocalStorageWorkbenchPersistence","layoutPersistence","snapshot"],"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 | \"side-panel\"\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 PersistedWorkbenchLayoutV4 {\n version: 4;\n layout: WorkbenchLayout;\n}\n\ntype PersistedWorkbenchLayout = PersistedWorkbenchLayoutV4;\n\n// Version 4 stores ResourceRef identity keys and page Main collections. Only the\n// layout cache changes; routed locations and independent preferences stay valid.\nconst WORKBENCH_LAYOUT_VERSION = 4 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 (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: PersistedWorkbenchLayoutV4 = { 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 PersistedWorkbenchLayoutV4),\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 { PageLocation } from \"@pstdio/sdk/extensions\";\nimport type {\n PersistedTreeRendererStates,\n PersistedWorkbenchPanelMenuState,\n TreeRendererPersistenceAdapter,\n WorkbenchPageLocationPersistence,\n WorkbenchPanelMenuStatePersistenceAdapter,\n WorkbenchPersistenceAdapter,\n WorkbenchSidePanelMode,\n WorkbenchSidePanelPersistenceAdapter,\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\ninterface PersistedWorkbenchPageLocation {\n version: 1;\n location: PageLocation;\n}\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 persisted = readJson<PersistedWorkbenchPageLocation>(\n storage,\n workbenchStoragePersistenceKey(input.namespace, \"page-location\", projectId),\n );\n return persisted?.version === WORKBENCH_PAGE_LOCATION_VERSION ? persisted.location : undefined;\n },\n save: (projectId, location) => {\n const persisted: PersistedWorkbenchPageLocation = {\n version: WORKBENCH_PAGE_LOCATION_VERSION,\n location,\n };\n storage.setItem(\n workbenchStoragePersistenceKey(input.namespace, \"page-location\", projectId),\n JSON.stringify(persisted),\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\ninterface PersistedWorkbenchSidePanel {\n version: 1;\n mode: WorkbenchSidePanelMode;\n}\n\nconst WORKBENCH_SIDE_PANEL_VERSION = 1 as const;\nconst sidePanelModes: readonly WorkbenchSidePanelMode[] = [\"attached\", \"closed\", \"floating\"];\n\nexport interface CreateLocalStorageSidePanelPersistenceInput extends CreateWorkbenchStoragePersistenceInput {\n scope?: string;\n}\n\nexport const createLocalStorageSidePanelPersistence = (\n input: CreateLocalStorageSidePanelPersistenceInput,\n): WorkbenchSidePanelPersistenceAdapter => {\n const storage = resolveStorage(input.storage);\n const key = workbenchStoragePersistenceKey(input.namespace, \"side-panel\", input.scope);\n return {\n getMode: () => {\n const persisted = readJson<PersistedWorkbenchSidePanel>(storage, key);\n if (persisted?.version !== WORKBENCH_SIDE_PANEL_VERSION) return undefined;\n return sidePanelModes.includes(persisted.mode) ? persisted.mode : undefined;\n },\n setMode: (mode) => {\n const persisted: PersistedWorkbenchSidePanel = { version: WORKBENCH_SIDE_PANEL_VERSION, mode };\n storage.setItem(key, JSON.stringify(persisted));\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\n return {\n snapshotPersistence,\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 sidePanelPersistence: createLocalStorageSidePanelPersistence({\n namespace: input.namespace,\n scope: input.scope,\n storage,\n }),\n };\n};\n"],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export declare const
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
//#region ../pstdio-extensions/src/bridge/webview-runtime/runtime-html.d.ts
|
|
2
|
+
export declare const renderExtensionRuntimeHtml: (scriptUrl: string) => string;
|
|
3
|
+
export declare const renderInlineExtensionRuntimeHtml: (runtimeScript: string) => string;
|
|
4
|
+
//#endregion
|
|
5
|
+
//#region src/webview-runtime/index.d.ts
|
|
6
|
+
export declare const getExtensionRuntimeScript: () => any;
|
|
7
|
+
//#endregion
|
|
8
|
+
export {};
|