@matdata/yasgui 5.10.0 → 5.11.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.
Files changed (133) hide show
  1. package/README.md +6 -2
  2. package/build/ts/src/PersistentConfig.d.ts +10 -0
  3. package/build/ts/src/PersistentConfig.js +40 -0
  4. package/build/ts/src/PersistentConfig.js.map +1 -1
  5. package/build/ts/src/Tab.d.ts +17 -0
  6. package/build/ts/src/Tab.js +372 -15
  7. package/build/ts/src/Tab.js.map +1 -1
  8. package/build/ts/src/TabContextMenu.d.ts +1 -0
  9. package/build/ts/src/TabContextMenu.js +17 -0
  10. package/build/ts/src/TabContextMenu.js.map +1 -1
  11. package/build/ts/src/TabElements.d.ts +3 -0
  12. package/build/ts/src/TabElements.js +97 -28
  13. package/build/ts/src/TabElements.js.map +1 -1
  14. package/build/ts/src/TabSettingsModal.d.ts +2 -0
  15. package/build/ts/src/TabSettingsModal.js +44 -19
  16. package/build/ts/src/TabSettingsModal.js.map +1 -1
  17. package/build/ts/src/index.d.ts +3 -0
  18. package/build/ts/src/index.js +4 -0
  19. package/build/ts/src/index.js.map +1 -1
  20. package/build/ts/src/queryManagement/QueryBrowser.d.ts +64 -0
  21. package/build/ts/src/queryManagement/QueryBrowser.js +914 -0
  22. package/build/ts/src/queryManagement/QueryBrowser.js.map +1 -0
  23. package/build/ts/src/queryManagement/SaveManagedQueryModal.d.ts +55 -0
  24. package/build/ts/src/queryManagement/SaveManagedQueryModal.js +451 -0
  25. package/build/ts/src/queryManagement/SaveManagedQueryModal.js.map +1 -0
  26. package/build/ts/src/queryManagement/WorkspaceSettingsForm.d.ts +16 -0
  27. package/build/ts/src/queryManagement/WorkspaceSettingsForm.js +452 -0
  28. package/build/ts/src/queryManagement/WorkspaceSettingsForm.js.map +1 -0
  29. package/build/ts/src/queryManagement/backends/BaseGitProviderClient.d.ts +19 -0
  30. package/build/ts/src/queryManagement/backends/BaseGitProviderClient.js +77 -0
  31. package/build/ts/src/queryManagement/backends/BaseGitProviderClient.js.map +1 -0
  32. package/build/ts/src/queryManagement/backends/BitbucketProviderClient.d.ts +16 -0
  33. package/build/ts/src/queryManagement/backends/BitbucketProviderClient.js +269 -0
  34. package/build/ts/src/queryManagement/backends/BitbucketProviderClient.js.map +1 -0
  35. package/build/ts/src/queryManagement/backends/GitWorkspaceBackend.d.ts +26 -0
  36. package/build/ts/src/queryManagement/backends/GitWorkspaceBackend.js +93 -0
  37. package/build/ts/src/queryManagement/backends/GitWorkspaceBackend.js.map +1 -0
  38. package/build/ts/src/queryManagement/backends/GiteaProviderClient.d.ts +14 -0
  39. package/build/ts/src/queryManagement/backends/GiteaProviderClient.js +244 -0
  40. package/build/ts/src/queryManagement/backends/GiteaProviderClient.js.map +1 -0
  41. package/build/ts/src/queryManagement/backends/GithubProviderClient.d.ts +14 -0
  42. package/build/ts/src/queryManagement/backends/GithubProviderClient.js +252 -0
  43. package/build/ts/src/queryManagement/backends/GithubProviderClient.js.map +1 -0
  44. package/build/ts/src/queryManagement/backends/GitlabProviderClient.d.ts +16 -0
  45. package/build/ts/src/queryManagement/backends/GitlabProviderClient.js +246 -0
  46. package/build/ts/src/queryManagement/backends/GitlabProviderClient.js.map +1 -0
  47. package/build/ts/src/queryManagement/backends/InMemoryWorkspaceBackend.d.ts +21 -0
  48. package/build/ts/src/queryManagement/backends/InMemoryWorkspaceBackend.js +175 -0
  49. package/build/ts/src/queryManagement/backends/InMemoryWorkspaceBackend.js.map +1 -0
  50. package/build/ts/src/queryManagement/backends/SparqlWorkspaceBackend.d.ts +28 -0
  51. package/build/ts/src/queryManagement/backends/SparqlWorkspaceBackend.js +687 -0
  52. package/build/ts/src/queryManagement/backends/SparqlWorkspaceBackend.js.map +1 -0
  53. package/build/ts/src/queryManagement/backends/WorkspaceBackend.d.ts +15 -0
  54. package/build/ts/src/queryManagement/backends/WorkspaceBackend.js +2 -0
  55. package/build/ts/src/queryManagement/backends/WorkspaceBackend.js.map +1 -0
  56. package/build/ts/src/queryManagement/backends/errors.d.ts +7 -0
  57. package/build/ts/src/queryManagement/backends/errors.js +18 -0
  58. package/build/ts/src/queryManagement/backends/errors.js.map +1 -0
  59. package/build/ts/src/queryManagement/backends/getWorkspaceBackend.d.ts +8 -0
  60. package/build/ts/src/queryManagement/backends/getWorkspaceBackend.js +114 -0
  61. package/build/ts/src/queryManagement/backends/getWorkspaceBackend.js.map +1 -0
  62. package/build/ts/src/queryManagement/backends/gitRemote.d.ts +5 -0
  63. package/build/ts/src/queryManagement/backends/gitRemote.js +40 -0
  64. package/build/ts/src/queryManagement/backends/gitRemote.js.map +1 -0
  65. package/build/ts/src/queryManagement/browserFilter.d.ts +2 -0
  66. package/build/ts/src/queryManagement/browserFilter.js +7 -0
  67. package/build/ts/src/queryManagement/browserFilter.js.map +1 -0
  68. package/build/ts/src/queryManagement/index.d.ts +13 -0
  69. package/build/ts/src/queryManagement/index.js +14 -0
  70. package/build/ts/src/queryManagement/index.js.map +1 -0
  71. package/build/ts/src/queryManagement/normalizeQueryFilename.d.ts +1 -0
  72. package/build/ts/src/queryManagement/normalizeQueryFilename.js +10 -0
  73. package/build/ts/src/queryManagement/normalizeQueryFilename.js.map +1 -0
  74. package/build/ts/src/queryManagement/openManagedQuery.d.ts +15 -0
  75. package/build/ts/src/queryManagement/openManagedQuery.js +27 -0
  76. package/build/ts/src/queryManagement/openManagedQuery.js.map +1 -0
  77. package/build/ts/src/queryManagement/saveManagedQuery.d.ts +20 -0
  78. package/build/ts/src/queryManagement/saveManagedQuery.js +109 -0
  79. package/build/ts/src/queryManagement/saveManagedQuery.js.map +1 -0
  80. package/build/ts/src/queryManagement/textHash.d.ts +2 -0
  81. package/build/ts/src/queryManagement/textHash.js +13 -0
  82. package/build/ts/src/queryManagement/textHash.js.map +1 -0
  83. package/build/ts/src/queryManagement/types.d.ts +76 -0
  84. package/build/ts/src/queryManagement/types.js +2 -0
  85. package/build/ts/src/queryManagement/types.js.map +1 -0
  86. package/build/ts/src/queryManagement/validateWorkspaceConfig.d.ts +6 -0
  87. package/build/ts/src/queryManagement/validateWorkspaceConfig.js +33 -0
  88. package/build/ts/src/queryManagement/validateWorkspaceConfig.js.map +1 -0
  89. package/build/ts/src/version.d.ts +1 -1
  90. package/build/ts/src/version.js +1 -1
  91. package/build/yasgui.min.css +10 -1
  92. package/build/yasgui.min.css.map +3 -3
  93. package/build/yasgui.min.js +398 -172
  94. package/build/yasgui.min.js.map +4 -4
  95. package/package.json +1 -1
  96. package/src/PersistentConfig.ts +61 -0
  97. package/src/Tab.ts +431 -20
  98. package/src/TabContextMenu.ts +10 -0
  99. package/src/TabElements.scss +46 -7
  100. package/src/TabElements.ts +95 -27
  101. package/src/TabSettingsModal.scss +102 -5
  102. package/src/TabSettingsModal.ts +48 -25
  103. package/src/endpointSelect.scss +2 -3
  104. package/src/index.scss +4 -0
  105. package/src/index.ts +7 -0
  106. package/src/queryManagement/QueryBrowser.scss +418 -0
  107. package/src/queryManagement/QueryBrowser.ts +1079 -0
  108. package/src/queryManagement/SaveManagedQueryModal.scss +245 -0
  109. package/src/queryManagement/SaveManagedQueryModal.ts +554 -0
  110. package/src/queryManagement/WorkspaceSettingsForm.ts +546 -0
  111. package/src/queryManagement/backends/BaseGitProviderClient.ts +124 -0
  112. package/src/queryManagement/backends/BitbucketProviderClient.ts +403 -0
  113. package/src/queryManagement/backends/GitWorkspaceBackend.ts +96 -0
  114. package/src/queryManagement/backends/GiteaProviderClient.ts +316 -0
  115. package/src/queryManagement/backends/GithubProviderClient.ts +319 -0
  116. package/src/queryManagement/backends/GitlabProviderClient.ts +327 -0
  117. package/src/queryManagement/backends/InMemoryWorkspaceBackend.ts +175 -0
  118. package/src/queryManagement/backends/SparqlWorkspaceBackend.ts +729 -0
  119. package/src/queryManagement/backends/WorkspaceBackend.ts +41 -0
  120. package/src/queryManagement/backends/errors.ts +28 -0
  121. package/src/queryManagement/backends/getWorkspaceBackend.ts +132 -0
  122. package/src/queryManagement/backends/gitRemote.ts +54 -0
  123. package/src/queryManagement/browserFilter.ts +8 -0
  124. package/src/queryManagement/index.ts +15 -0
  125. package/src/queryManagement/normalizeQueryFilename.ts +8 -0
  126. package/src/queryManagement/openManagedQuery.ts +31 -0
  127. package/src/queryManagement/saveManagedQuery.ts +135 -0
  128. package/src/queryManagement/textHash.ts +15 -0
  129. package/src/queryManagement/types.ts +85 -0
  130. package/src/queryManagement/validateWorkspaceConfig.ts +40 -0
  131. package/src/tab.scss +4 -14
  132. package/src/themes.scss +14 -23
  133. package/src/version.ts +1 -1
@@ -0,0 +1,452 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { addClass } from "@matdata/yasgui-utils";
11
+ import { validateWorkspaceConfig } from "./validateWorkspaceConfig";
12
+ import { getWorkspaceBackend } from "./backends/getWorkspaceBackend";
13
+ import { asWorkspaceBackendError } from "./backends/errors";
14
+ function isNonEmpty(value) {
15
+ return !!value && value.trim().length > 0;
16
+ }
17
+ function newWorkspaceId() {
18
+ return `ws_${Date.now().toString(36)}_${Math.random().toString(16).slice(2)}`;
19
+ }
20
+ export class WorkspaceSettingsForm {
21
+ constructor(container, options) {
22
+ this.container = container;
23
+ this.options = options;
24
+ }
25
+ render() {
26
+ this.container.innerHTML = "";
27
+ const header = document.createElement("div");
28
+ addClass(header, "settingsSection");
29
+ const label = document.createElement("label");
30
+ label.textContent = "Workspaces";
31
+ addClass(label, "settingsLabel");
32
+ const help = document.createElement("div");
33
+ help.textContent =
34
+ "Configure managed-query workspaces (Git or SPARQL). Credentials are stored locally and are never shown again after entry.";
35
+ addClass(help, "settingsHelp");
36
+ header.appendChild(label);
37
+ header.appendChild(help);
38
+ const activeRow = document.createElement("div");
39
+ addClass(activeRow, "checkboxContainer");
40
+ const activeLabel = document.createElement("label");
41
+ activeLabel.textContent = "Default workspace";
42
+ activeLabel.style.marginRight = "10px";
43
+ const activeSelect = document.createElement("select");
44
+ activeSelect.setAttribute("aria-label", "Select default workspace");
45
+ addClass(activeSelect, "settingsSelect");
46
+ const workspaces = this.options.persistentConfig.getWorkspaces();
47
+ const persistedActive = this.options.persistentConfig.getActiveWorkspaceId();
48
+ const placeholder = document.createElement("option");
49
+ placeholder.value = "";
50
+ placeholder.textContent = workspaces.length ? "Select workspace" : "No workspaces";
51
+ activeSelect.appendChild(placeholder);
52
+ for (const w of workspaces) {
53
+ const opt = document.createElement("option");
54
+ opt.value = w.id;
55
+ opt.textContent = w.label;
56
+ activeSelect.appendChild(opt);
57
+ }
58
+ activeSelect.value = persistedActive || "";
59
+ activeSelect.onchange = () => {
60
+ const selected = activeSelect.value || undefined;
61
+ this.options.persistentConfig.setActiveWorkspaceId(selected);
62
+ };
63
+ activeRow.appendChild(activeLabel);
64
+ activeRow.appendChild(activeSelect);
65
+ header.appendChild(activeRow);
66
+ this.container.appendChild(header);
67
+ if (workspaces.length === 0) {
68
+ const empty = document.createElement("div");
69
+ addClass(empty, "settingsHelp");
70
+ empty.textContent = "No workspaces configured yet. Add one below.";
71
+ this.container.appendChild(empty);
72
+ }
73
+ this.renderWorkspaceList(workspaces);
74
+ this.renderAddWorkspaceButton();
75
+ }
76
+ renderWorkspaceList(workspaces) {
77
+ if (workspaces.length === 0)
78
+ return;
79
+ const section = document.createElement("div");
80
+ addClass(section, "settingsSection");
81
+ const label = document.createElement("label");
82
+ label.textContent = "Configured workspaces";
83
+ addClass(label, "settingsLabel");
84
+ section.appendChild(label);
85
+ const list = document.createElement("div");
86
+ addClass(list, "workspaceList");
87
+ for (const workspace of workspaces) {
88
+ const row = document.createElement("div");
89
+ addClass(row, "workspaceListRow");
90
+ const nameEl = document.createElement("div");
91
+ addClass(nameEl, "workspaceListLabel");
92
+ nameEl.textContent = workspace.label || workspace.id;
93
+ row.appendChild(nameEl);
94
+ const actions = document.createElement("div");
95
+ addClass(actions, "workspaceListActions");
96
+ const status = document.createElement("div");
97
+ addClass(status, "workspaceListStatus");
98
+ const editBtn = document.createElement("button");
99
+ editBtn.type = "button";
100
+ editBtn.textContent = "Edit";
101
+ addClass(editBtn, "secondaryButton");
102
+ editBtn.onclick = () => {
103
+ status.textContent = "";
104
+ this.openWorkspaceConfigModal({ mode: "edit", workspace });
105
+ };
106
+ const validateBtn = document.createElement("button");
107
+ validateBtn.type = "button";
108
+ validateBtn.textContent = "Validate";
109
+ addClass(validateBtn, "secondaryButton");
110
+ validateBtn.onclick = () => __awaiter(this, void 0, void 0, function* () {
111
+ try {
112
+ status.textContent = "Validating…";
113
+ const backend = getWorkspaceBackend(workspace, { persistentConfig: this.options.persistentConfig });
114
+ yield backend.validateAccess();
115
+ status.textContent = "✓ Access OK";
116
+ }
117
+ catch (e) {
118
+ const err = asWorkspaceBackendError(e);
119
+ status.textContent = err.message;
120
+ }
121
+ });
122
+ const removeBtn = document.createElement("button");
123
+ removeBtn.type = "button";
124
+ removeBtn.textContent = "Remove";
125
+ addClass(removeBtn, "dangerButton");
126
+ removeBtn.onclick = () => {
127
+ status.textContent = "";
128
+ this.options.onDeleteRequested(workspace.id);
129
+ };
130
+ actions.appendChild(editBtn);
131
+ actions.appendChild(validateBtn);
132
+ actions.appendChild(removeBtn);
133
+ row.appendChild(actions);
134
+ row.appendChild(status);
135
+ list.appendChild(row);
136
+ }
137
+ section.appendChild(list);
138
+ this.container.appendChild(section);
139
+ }
140
+ createEndpointSelect(currentValue) {
141
+ const select = document.createElement("select");
142
+ select.setAttribute("aria-label", "SPARQL endpoint");
143
+ addClass(select, "settingsSelect");
144
+ const configs = this.options.persistentConfig.getEndpointConfigs();
145
+ const endpoints = configs
146
+ .map((c) => { var _a; return ({ endpoint: c.endpoint, label: (_a = c.label) === null || _a === void 0 ? void 0 : _a.trim() }); })
147
+ .filter((c) => !!c.endpoint && c.endpoint.trim().length > 0);
148
+ endpoints.sort((a, b) => {
149
+ const aKey = (a.label || a.endpoint).toLowerCase();
150
+ const bKey = (b.label || b.endpoint).toLowerCase();
151
+ return aKey.localeCompare(bKey);
152
+ });
153
+ const placeholder = document.createElement("option");
154
+ placeholder.value = "";
155
+ placeholder.textContent = endpoints.length ? "Select SPARQL endpoint" : "No SPARQL endpoints configured";
156
+ select.appendChild(placeholder);
157
+ const trimmedCurrent = currentValue === null || currentValue === void 0 ? void 0 : currentValue.trim();
158
+ if (trimmedCurrent && !endpoints.some((e) => e.endpoint === trimmedCurrent)) {
159
+ const opt = document.createElement("option");
160
+ opt.value = trimmedCurrent;
161
+ opt.textContent = `${trimmedCurrent} (not in list)`;
162
+ select.appendChild(opt);
163
+ }
164
+ for (const e of endpoints) {
165
+ const opt = document.createElement("option");
166
+ opt.value = e.endpoint;
167
+ opt.textContent = e.label ? `${e.label} (${e.endpoint})` : e.endpoint;
168
+ select.appendChild(opt);
169
+ }
170
+ select.value = trimmedCurrent || "";
171
+ return select;
172
+ }
173
+ renderAddWorkspaceButton() {
174
+ const section = document.createElement("div");
175
+ addClass(section, "settingsSection");
176
+ const label = document.createElement("label");
177
+ label.textContent = "Add workspace";
178
+ addClass(label, "settingsLabel");
179
+ const help = document.createElement("div");
180
+ help.textContent = "Add a new workspace configuration.";
181
+ addClass(help, "settingsHelp");
182
+ const addBtn = document.createElement("button");
183
+ addBtn.type = "button";
184
+ addBtn.textContent = "+ Add new workspace";
185
+ addClass(addBtn, "primaryButton");
186
+ addBtn.onclick = () => this.openWorkspaceConfigModal({ mode: "add" });
187
+ section.appendChild(label);
188
+ section.appendChild(help);
189
+ section.appendChild(addBtn);
190
+ this.container.appendChild(section);
191
+ }
192
+ openWorkspaceConfigModal(input) {
193
+ const overlay = document.createElement("div");
194
+ addClass(overlay, "tabSettingsModalOverlay", "workspaceConfigModalOverlay", "open");
195
+ const modal = document.createElement("div");
196
+ addClass(modal, "workspaceConfigModal");
197
+ modal.onclick = (e) => e.stopPropagation();
198
+ const close = () => {
199
+ overlay.remove();
200
+ document.removeEventListener("keydown", onKeyDown);
201
+ };
202
+ const onKeyDown = (e) => {
203
+ if (e.key !== "Escape")
204
+ return;
205
+ e.preventDefault();
206
+ close();
207
+ };
208
+ document.addEventListener("keydown", onKeyDown);
209
+ overlay.onclick = () => close();
210
+ const header = document.createElement("div");
211
+ addClass(header, "modalHeader");
212
+ const title = document.createElement("h2");
213
+ title.textContent = input.mode === "add" ? "Add workspace" : "Edit workspace";
214
+ header.appendChild(title);
215
+ const closeBtn = document.createElement("button");
216
+ closeBtn.textContent = "×";
217
+ addClass(closeBtn, "closeButton");
218
+ closeBtn.onclick = () => close();
219
+ header.appendChild(closeBtn);
220
+ const body = document.createElement("div");
221
+ addClass(body, "workspaceConfigModalBody");
222
+ const status = document.createElement("div");
223
+ addClass(status, "settingsHelp");
224
+ status.style.fontStyle = "normal";
225
+ const mode = input.mode;
226
+ const existing = mode === "edit" ? input.workspace : undefined;
227
+ const typeSelect = document.createElement("select");
228
+ typeSelect.setAttribute("aria-label", "Workspace type");
229
+ addClass(typeSelect, "settingsSelect");
230
+ const optGit = document.createElement("option");
231
+ optGit.value = "git";
232
+ optGit.textContent = "Git";
233
+ const optSparql = document.createElement("option");
234
+ optSparql.value = "sparql";
235
+ optSparql.textContent = "SPARQL";
236
+ typeSelect.appendChild(optGit);
237
+ typeSelect.appendChild(optSparql);
238
+ if (existing) {
239
+ typeSelect.value = existing.type;
240
+ typeSelect.disabled = true;
241
+ }
242
+ const labelInput = document.createElement("input");
243
+ labelInput.type = "text";
244
+ labelInput.placeholder = "Workspace label";
245
+ labelInput.value = (existing === null || existing === void 0 ? void 0 : existing.label) || "";
246
+ addClass(labelInput, "settingsInput");
247
+ const descriptionInput = document.createElement("input");
248
+ descriptionInput.type = "text";
249
+ descriptionInput.placeholder = "Optional description";
250
+ descriptionInput.value = (existing === null || existing === void 0 ? void 0 : existing.description) || "";
251
+ addClass(descriptionInput, "settingsInput");
252
+ const dynamic = document.createElement("div");
253
+ const renderDynamic = () => {
254
+ var _a;
255
+ dynamic.innerHTML = "";
256
+ status.textContent = "";
257
+ const typeValue = (_a = existing === null || existing === void 0 ? void 0 : existing.type) !== null && _a !== void 0 ? _a : typeSelect.value;
258
+ if (typeValue === "git") {
259
+ const gitHelp = document.createElement("div");
260
+ addClass(gitHelp, "settingsHelp");
261
+ gitHelp.textContent =
262
+ "Supported Git providers: GitHub, GitLab, Bitbucket Cloud, Gitea. Note: ssh:// and SCP-style remotes are only parsed to identify the repository; YASGUI uses provider HTTPS APIs (not SSH) to read/write files.";
263
+ const remoteUrlInput = document.createElement("input");
264
+ remoteUrlInput.type = "url";
265
+ remoteUrlInput.placeholder = "Git remote URL (https://..., ssh://..., or git@host:org/repo.git)";
266
+ remoteUrlInput.value = existing && existing.type === "git" ? existing.remoteUrl : "";
267
+ addClass(remoteUrlInput, "settingsInput");
268
+ const branchInput = document.createElement("input");
269
+ branchInput.type = "text";
270
+ branchInput.placeholder = "Branch (optional; e.g., main)";
271
+ branchInput.value = existing && existing.type === "git" ? existing.branch : "";
272
+ addClass(branchInput, "settingsInput");
273
+ const rootPathInput = document.createElement("input");
274
+ rootPathInput.type = "text";
275
+ rootPathInput.placeholder = "Root path in repo (optional)";
276
+ rootPathInput.value = existing && existing.type === "git" ? existing.rootPath : "";
277
+ addClass(rootPathInput, "settingsInput");
278
+ const usernameInput = document.createElement("input");
279
+ usernameInput.type = "text";
280
+ usernameInput.placeholder = "Username (optional)";
281
+ usernameInput.value = existing && existing.type === "git" ? existing.auth.username || "" : "";
282
+ addClass(usernameInput, "settingsInput");
283
+ const providerSelect = document.createElement("select");
284
+ providerSelect.setAttribute("aria-label", "Git provider");
285
+ addClass(providerSelect, "settingsSelect");
286
+ const providerOptions = [
287
+ { value: "auto", label: "Auto-detect" },
288
+ { value: "github", label: "GitHub" },
289
+ { value: "gitlab", label: "GitLab" },
290
+ { value: "bitbucket", label: "Bitbucket Cloud" },
291
+ { value: "gitea", label: "Gitea" },
292
+ ];
293
+ for (const opt of providerOptions) {
294
+ const option = document.createElement("option");
295
+ option.value = opt.value;
296
+ option.textContent = opt.label;
297
+ providerSelect.appendChild(option);
298
+ }
299
+ providerSelect.value = (existing && existing.type === "git" && existing.provider) || "auto";
300
+ const apiBaseUrlInput = document.createElement("input");
301
+ apiBaseUrlInput.type = "url";
302
+ apiBaseUrlInput.placeholder = "API base URL (optional; for self-hosted/enterprise)";
303
+ apiBaseUrlInput.value = existing && existing.type === "git" ? existing.apiBaseUrl || "" : "";
304
+ addClass(apiBaseUrlInput, "settingsInput");
305
+ const tokenInput = document.createElement("input");
306
+ tokenInput.type = "password";
307
+ tokenInput.value = "";
308
+ tokenInput.placeholder =
309
+ existing && existing.type === "git" && existing.auth.token
310
+ ? "Token configured (enter to replace)"
311
+ : "Personal access token";
312
+ tokenInput.autocomplete = "new-password";
313
+ addClass(tokenInput, "settingsInput");
314
+ const advancedToggle = document.createElement("button");
315
+ advancedToggle.type = "button";
316
+ addClass(advancedToggle, "secondaryButton");
317
+ const advancedContainer = document.createElement("div");
318
+ let isAdvancedOpen = false;
319
+ const syncAdvanced = () => {
320
+ advancedToggle.textContent = isAdvancedOpen ? "Hide advanced" : "Show advanced";
321
+ advancedContainer.style.display = isAdvancedOpen ? "" : "none";
322
+ };
323
+ advancedToggle.onclick = () => {
324
+ isAdvancedOpen = !isAdvancedOpen;
325
+ syncAdvanced();
326
+ };
327
+ syncAdvanced();
328
+ advancedContainer.appendChild(this.wrapField("Provider", providerSelect));
329
+ advancedContainer.appendChild(this.wrapField("API base URL", apiBaseUrlInput));
330
+ advancedContainer.appendChild(this.wrapField("Branch", branchInput));
331
+ advancedContainer.appendChild(this.wrapField("Root path", rootPathInput));
332
+ advancedContainer.appendChild(this.wrapField("Username", usernameInput));
333
+ dynamic.appendChild(gitHelp);
334
+ dynamic.appendChild(this.wrapField("Remote URL", remoteUrlInput));
335
+ dynamic.appendChild(this.wrapField("Token", tokenInput));
336
+ dynamic.appendChild(this.wrapField("Advanced", advancedToggle));
337
+ dynamic.appendChild(advancedContainer);
338
+ dynamic.__getConfig = () => {
339
+ const token = tokenInput.value.trim();
340
+ const previousToken = existing && existing.type === "git" ? existing.auth.token : undefined;
341
+ const provider = providerSelect.value;
342
+ return {
343
+ id: (existing === null || existing === void 0 ? void 0 : existing.id) || newWorkspaceId(),
344
+ type: "git",
345
+ label: labelInput.value.trim(),
346
+ description: descriptionInput.value.trim() || undefined,
347
+ remoteUrl: remoteUrlInput.value.trim(),
348
+ branch: branchInput.value.trim(),
349
+ rootPath: rootPathInput.value.trim(),
350
+ auth: {
351
+ type: "pat",
352
+ username: usernameInput.value.trim() || undefined,
353
+ token: isNonEmpty(token) ? token : previousToken || "",
354
+ },
355
+ provider: provider === "auto" ? undefined : provider,
356
+ apiBaseUrl: apiBaseUrlInput.value.trim() || undefined,
357
+ };
358
+ };
359
+ return;
360
+ }
361
+ const endpointSelect = this.createEndpointSelect(existing && existing.type === "sparql" ? existing.endpoint : undefined);
362
+ const sparqlHelp = document.createElement("div");
363
+ addClass(sparqlHelp, "settingsHelp");
364
+ sparqlHelp.textContent =
365
+ "Tip: you can reuse an existing Workspace IRI to point to an already-populated workspace, or choose a new IRI to start a fresh workspace.";
366
+ const workspaceIriInput = document.createElement("input");
367
+ workspaceIriInput.type = "url";
368
+ workspaceIriInput.placeholder = "Workspace IRI";
369
+ workspaceIriInput.value = existing && existing.type === "sparql" ? existing.workspaceIri : "";
370
+ addClass(workspaceIriInput, "settingsInput");
371
+ const defaultGraphInput = document.createElement("input");
372
+ defaultGraphInput.type = "url";
373
+ defaultGraphInput.placeholder = "Default graph (optional)";
374
+ defaultGraphInput.value = existing && existing.type === "sparql" ? existing.defaultGraph || "" : "";
375
+ addClass(defaultGraphInput, "settingsInput");
376
+ dynamic.appendChild(this.wrapField("SPARQL endpoint", endpointSelect));
377
+ dynamic.appendChild(sparqlHelp);
378
+ dynamic.appendChild(this.wrapField("Workspace IRI", workspaceIriInput));
379
+ dynamic.appendChild(this.wrapField("Default graph", defaultGraphInput));
380
+ dynamic.__getConfig = () => {
381
+ return {
382
+ id: (existing === null || existing === void 0 ? void 0 : existing.id) || newWorkspaceId(),
383
+ type: "sparql",
384
+ label: labelInput.value.trim(),
385
+ description: descriptionInput.value.trim() || undefined,
386
+ endpoint: endpointSelect.value.trim(),
387
+ workspaceIri: workspaceIriInput.value.trim(),
388
+ defaultGraph: defaultGraphInput.value.trim() || undefined,
389
+ };
390
+ };
391
+ };
392
+ typeSelect.onchange = () => renderDynamic();
393
+ renderDynamic();
394
+ const footer = document.createElement("div");
395
+ addClass(footer, "workspaceConfigModalFooter");
396
+ const cancelBtn = document.createElement("button");
397
+ cancelBtn.type = "button";
398
+ cancelBtn.textContent = "Cancel";
399
+ addClass(cancelBtn, "secondaryButton");
400
+ cancelBtn.onclick = () => close();
401
+ const saveBtn = document.createElement("button");
402
+ saveBtn.type = "button";
403
+ saveBtn.textContent = "Save";
404
+ addClass(saveBtn, "primaryButton");
405
+ saveBtn.onclick = () => {
406
+ status.textContent = "";
407
+ const getConfig = dynamic.__getConfig;
408
+ if (!getConfig)
409
+ return;
410
+ const config = getConfig();
411
+ if (config.type === "git" && !isNonEmpty(config.auth.token)) {
412
+ status.textContent = "Git token is required.";
413
+ return;
414
+ }
415
+ const result = validateWorkspaceConfig(config);
416
+ if (!result.valid) {
417
+ status.textContent = result.errors.join("\n");
418
+ return;
419
+ }
420
+ this.options.persistentConfig.addOrUpdateWorkspace(config);
421
+ if (!this.options.persistentConfig.getActiveWorkspaceId()) {
422
+ this.options.persistentConfig.setActiveWorkspaceId(config.id);
423
+ }
424
+ close();
425
+ this.render();
426
+ };
427
+ footer.appendChild(cancelBtn);
428
+ footer.appendChild(saveBtn);
429
+ body.appendChild(this.wrapField("Type", typeSelect));
430
+ body.appendChild(this.wrapField("Label", labelInput));
431
+ body.appendChild(this.wrapField("Description", descriptionInput));
432
+ body.appendChild(dynamic);
433
+ body.appendChild(status);
434
+ modal.appendChild(header);
435
+ modal.appendChild(body);
436
+ modal.appendChild(footer);
437
+ overlay.appendChild(modal);
438
+ document.body.appendChild(overlay);
439
+ labelInput.focus();
440
+ }
441
+ wrapField(labelText, inputEl) {
442
+ const wrapper = document.createElement("div");
443
+ addClass(wrapper, "settingsField");
444
+ const label = document.createElement("div");
445
+ addClass(label, "settingsFieldLabel");
446
+ label.textContent = labelText;
447
+ wrapper.appendChild(label);
448
+ wrapper.appendChild(inputEl);
449
+ return wrapper;
450
+ }
451
+ }
452
+ //# sourceMappingURL=WorkspaceSettingsForm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkspaceSettingsForm.js","sourceRoot":"","sources":["../../../../../../packages/yasgui/src/queryManagement/WorkspaceSettingsForm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { GitWorkspaceConfig, WriteQueryOptions } from "../types";
2
+ import type { GitProviderClient } from "./GitWorkspaceBackend";
3
+ export declare abstract class BaseGitProviderClient implements GitProviderClient {
4
+ protected joinPath(...parts: Array<string | undefined>): string;
5
+ protected encodePath(path: string): string;
6
+ protected base64EncodeUtf8(value: string): string;
7
+ protected base64DecodeUtf8(value: string): string;
8
+ protected base64Encode(value: string): string;
9
+ protected ensureOk(status: number, message: string): void;
10
+ protected getCommitMessage(queryId: string, options: WriteQueryOptions | undefined, isNew: boolean): string;
11
+ protected getDeleteMessage(queryId: string): string;
12
+ abstract validateAccess(config: GitWorkspaceConfig): Promise<void>;
13
+ abstract listFolder(config: GitWorkspaceConfig, folderId?: string): Promise<import("../types").FolderEntry[]>;
14
+ abstract readQuery(config: GitWorkspaceConfig, queryId: string): Promise<import("../types").ReadResult>;
15
+ abstract writeQuery(config: GitWorkspaceConfig, queryId: string, queryText: string, options?: WriteQueryOptions): Promise<void>;
16
+ abstract listVersions(config: GitWorkspaceConfig, queryId: string): Promise<import("../types").VersionInfo[]>;
17
+ abstract readVersion(config: GitWorkspaceConfig, queryId: string, versionId: string): Promise<import("../types").ReadResult>;
18
+ abstract deleteQuery(config: GitWorkspaceConfig, queryId: string): Promise<void>;
19
+ }
@@ -0,0 +1,77 @@
1
+ import { WorkspaceBackendError } from "./errors";
2
+ export class BaseGitProviderClient {
3
+ joinPath(...parts) {
4
+ const cleaned = parts
5
+ .filter((p) => !!p)
6
+ .map((p) => p.replace(/^\/+|\/+$/g, ""))
7
+ .filter((p) => p.length > 0);
8
+ return cleaned.join("/");
9
+ }
10
+ encodePath(path) {
11
+ return path
12
+ .split("/")
13
+ .filter((p) => p.length > 0)
14
+ .map((p) => encodeURIComponent(p))
15
+ .join("/");
16
+ }
17
+ base64EncodeUtf8(value) {
18
+ if (typeof globalThis.btoa === "function") {
19
+ const bytes = new TextEncoder().encode(value);
20
+ let binary = "";
21
+ for (const b of bytes)
22
+ binary += String.fromCharCode(b);
23
+ return globalThis.btoa(binary);
24
+ }
25
+ const buf = globalThis.Buffer;
26
+ if (buf && typeof buf.from === "function")
27
+ return buf.from(value, "utf8").toString("base64");
28
+ throw new Error("Base64 encoding not available in this environment");
29
+ }
30
+ base64DecodeUtf8(value) {
31
+ const cleaned = value.replace(/\s+/g, "");
32
+ if (typeof globalThis.atob === "function") {
33
+ const binary = globalThis.atob(cleaned);
34
+ const bytes = new Uint8Array(binary.length);
35
+ for (let i = 0; i < binary.length; i++)
36
+ bytes[i] = binary.charCodeAt(i);
37
+ return new TextDecoder().decode(bytes);
38
+ }
39
+ const buf = globalThis.Buffer;
40
+ if (buf && typeof buf.from === "function")
41
+ return buf.from(cleaned, "base64").toString("utf8");
42
+ throw new Error("Base64 decoding not available in this environment");
43
+ }
44
+ base64Encode(value) {
45
+ if (typeof globalThis.btoa === "function")
46
+ return globalThis.btoa(value);
47
+ const buf = globalThis.Buffer;
48
+ if (buf && typeof buf.from === "function")
49
+ return buf.from(value, "utf8").toString("base64");
50
+ throw new Error("Base64 encoding not available in this environment");
51
+ }
52
+ ensureOk(status, message) {
53
+ if (status >= 200 && status < 300)
54
+ return;
55
+ if (status === 401)
56
+ throw new WorkspaceBackendError("AUTH_FAILED", message);
57
+ if (status === 403)
58
+ throw new WorkspaceBackendError("FORBIDDEN", message);
59
+ if (status === 404)
60
+ throw new WorkspaceBackendError("NOT_FOUND", message);
61
+ if (status === 409)
62
+ throw new WorkspaceBackendError("CONFLICT", message);
63
+ if (status === 429)
64
+ throw new WorkspaceBackendError("RATE_LIMITED", message);
65
+ throw new WorkspaceBackendError("UNKNOWN", message);
66
+ }
67
+ getCommitMessage(queryId, options, isNew) {
68
+ var _a;
69
+ if ((_a = options === null || options === void 0 ? void 0 : options.message) === null || _a === void 0 ? void 0 : _a.trim())
70
+ return options.message.trim();
71
+ return isNew ? `Add ${queryId}` : `Update ${queryId}`;
72
+ }
73
+ getDeleteMessage(queryId) {
74
+ return `Delete ${queryId}`;
75
+ }
76
+ }
77
+ //# sourceMappingURL=BaseGitProviderClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseGitProviderClient.js","sourceRoot":"","sources":["../../../../../../../packages/yasgui/src/queryManagement/backends/BaseGitProviderClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { GitWorkspaceConfig, FolderEntry, ReadResult, VersionInfo, WriteQueryOptions } from "../types";
2
+ import { BaseGitProviderClient } from "./BaseGitProviderClient";
3
+ export declare class BitbucketProviderClient extends BaseGitProviderClient {
4
+ static canHandle(config: GitWorkspaceConfig): boolean;
5
+ private requestJson;
6
+ private requestText;
7
+ validateAccess(config: GitWorkspaceConfig): Promise<void>;
8
+ private resolveBranch;
9
+ listFolder(config: GitWorkspaceConfig, folderId?: string): Promise<FolderEntry[]>;
10
+ private getLatestCommitHash;
11
+ readQuery(config: GitWorkspaceConfig, queryId: string): Promise<ReadResult>;
12
+ writeQuery(config: GitWorkspaceConfig, queryId: string, queryText: string, options?: WriteQueryOptions): Promise<void>;
13
+ listVersions(config: GitWorkspaceConfig, queryId: string): Promise<VersionInfo[]>;
14
+ readVersion(config: GitWorkspaceConfig, queryId: string, versionId: string): Promise<ReadResult>;
15
+ deleteQuery(config: GitWorkspaceConfig, queryId: string): Promise<void>;
16
+ }