@lunora/studio 0.0.0 → 1.0.0-alpha.1

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 (81) hide show
  1. package/LICENSE.md +105 -0
  2. package/README.md +123 -9
  3. package/__assets__/package-og.svg +14 -0
  4. package/dist/index.d.ts +1402 -0
  5. package/dist/index.js +41 -0
  6. package/dist/mount.d.ts +21 -0
  7. package/dist/mount.js +26 -0
  8. package/dist/packem_shared/ADMIN_FUNCTION_PREFIX-DmBqMZ-z.js +45 -0
  9. package/dist/packem_shared/ApiDocsPanel-DpRjJhG5.js +842 -0
  10. package/dist/packem_shared/ApiReferencePanel-DMIUp-kK.js +229 -0
  11. package/dist/packem_shared/ApiTab-DURGU15e.js +251 -0
  12. package/dist/packem_shared/AuditPanel-BC59Nhst.js +212 -0
  13. package/dist/packem_shared/CommandPalette-Dx_CoB9i.js +373 -0
  14. package/dist/packem_shared/ConfirmButton-WQVUoGFb.js +59 -0
  15. package/dist/packem_shared/ConnectionBadge-Bxagrip8.js +111 -0
  16. package/dist/packem_shared/DEFAULT_AUTO_REFRESH_MS-Vxwaxx51.js +50 -0
  17. package/dist/packem_shared/DEFAULT_INSIGHT_THRESHOLDS-DjF0h-gA.js +89 -0
  18. package/dist/packem_shared/DataBrowser-Coz6jJE6.js +4542 -0
  19. package/dist/packem_shared/DataFilters-FNquMaiu.js +249 -0
  20. package/dist/packem_shared/ErrorBoundary-BzAApI7J.js +66 -0
  21. package/dist/packem_shared/ExportImportPanel-WO34fJxy.js +193 -0
  22. package/dist/packem_shared/FileBrowser-Zcr-Qgxo.js +2932 -0
  23. package/dist/packem_shared/FunctionRunner-j0Rd5m9t.js +343 -0
  24. package/dist/packem_shared/FunctionStatsPanel-DboBl-XL.js +432 -0
  25. package/dist/packem_shared/GlobalDataBrowser-9MhPEfgN.js +318 -0
  26. package/dist/packem_shared/HealthPanel-DOIgbUtx.js +640 -0
  27. package/dist/packem_shared/HomePanel-bdOCNA-p.js +1273 -0
  28. package/dist/packem_shared/InsightsPanel-DaZPnSgt.js +423 -0
  29. package/dist/packem_shared/LogsPanel-CWdqAGpQ.js +839 -0
  30. package/dist/packem_shared/MailPanel-D_EGtDnS.js +447 -0
  31. package/dist/packem_shared/MetricsPanel-E4Gv6wTO.js +1625 -0
  32. package/dist/packem_shared/MigrationsPanel-DQdPY9io.js +246 -0
  33. package/dist/packem_shared/OpenRpcReferencePanel-j2p3HB0s.js +191 -0
  34. package/dist/packem_shared/PitrPanel-BbBkQR6t.js +252 -0
  35. package/dist/packem_shared/STUDIO_ROOT_CLASS-D12gX2dV.js +3 -0
  36. package/dist/packem_shared/ScheduledJobs-Ok1CYYwI.js +159 -0
  37. package/dist/packem_shared/SchemaViewer-D8XGnp-X.js +2512 -0
  38. package/dist/packem_shared/SecurityAdvisorPanel-Cdm2IxLW.js +79 -0
  39. package/dist/packem_shared/SettingsPanel-D3WF2mBU.js +176 -0
  40. package/dist/packem_shared/ShardInput-DNCsT1KW.js +107 -0
  41. package/dist/packem_shared/SqlEditorPanel-BuQ7f2Hs.js +13 -0
  42. package/dist/packem_shared/Studio-D36od9Oz.js +33 -0
  43. package/dist/packem_shared/StudioApp-dvywkJ8I.js +383 -0
  44. package/dist/packem_shared/StudioI18nProvider-Dcajsznk.js +48 -0
  45. package/dist/packem_shared/TableEditor-DIVDk3vT.js +371 -0
  46. package/dist/packem_shared/advisor-view-DBlzJi6C.js +159 -0
  47. package/dist/packem_shared/aggregateMetrics-D4nUHEKU.js +108 -0
  48. package/dist/packem_shared/app.d-CCmwDEVs.d.ts +300 -0
  49. package/dist/packem_shared/badge-B2PKA1-5.js +49 -0
  50. package/dist/packem_shared/bar-chart-CzJAgqkp.js +3245 -0
  51. package/dist/packem_shared/button-BhsN2uZH.js +49 -0
  52. package/dist/packem_shared/card-DURq3ElK.js +175 -0
  53. package/dist/packem_shared/cf-links-BZfRdxSE.js +8 -0
  54. package/dist/packem_shared/checkbox-UNkzAxl-.js +63 -0
  55. package/dist/packem_shared/createStudioI18n-CgvlmDkN.js +27 -0
  56. package/dist/packem_shared/data-grid-CCh2Couo.js +183 -0
  57. package/dist/packem_shared/dropdown-menu-WY4B_eJO.js +280 -0
  58. package/dist/packem_shared/empty-state-DY_oe0k6.js +98 -0
  59. package/dist/packem_shared/grid-features-DTjG6Sex.js +840 -0
  60. package/dist/packem_shared/input-XH4r1Pt1.js +53 -0
  61. package/dist/packem_shared/internal-BBZYexre.js +68 -0
  62. package/dist/packem_shared/label-D8ykjn5J.js +46 -0
  63. package/dist/packem_shared/live-status-bPff1O7Y.js +44 -0
  64. package/dist/packem_shared/reference-view-BCKIoai7.js +2180 -0
  65. package/dist/packem_shared/shard-history-DyebH1R5.js +38 -0
  66. package/dist/packem_shared/sparkline-10dG-_f0.js +93 -0
  67. package/dist/packem_shared/sql-editor-panel-CW2y2x9h.js +2562 -0
  68. package/dist/packem_shared/storage-tier-CL98eOvn.js +85 -0
  69. package/dist/packem_shared/studio-BDVd7rIV.js +10303 -0
  70. package/dist/packem_shared/table-_RzNvy3R.js +246 -0
  71. package/dist/packem_shared/table-list-sidebar-aZHLq70w.js +832 -0
  72. package/dist/packem_shared/textarea-D3gaCU_-.js +46 -0
  73. package/dist/packem_shared/use-live-admin-D1h1Fzsd.js +73 -0
  74. package/dist/packem_shared/use-live-shard-seed-B74RYcOy.js +76 -0
  75. package/dist/packem_shared/useDebounced-Dxncpg6z.js +32 -0
  76. package/dist/packem_shared/utils-B05Dmz_H.js +8 -0
  77. package/dist/packem_shared/virtual-rect-CVMUskSm.js +10 -0
  78. package/dist/standalone/studio.js +356 -0
  79. package/dist/styles.css +2 -0
  80. package/package.json +77 -17
  81. package/src/theme.css +59 -0
@@ -0,0 +1,383 @@
1
+ import { c } from 'react/compiler-runtime';
2
+ import { LunoraClient } from '@lunora/client';
3
+ import { LunoraProvider } from '@lunora/react';
4
+ import { useState, useEffect } from 'react';
5
+ import { ErrorBoundary } from './ErrorBoundary-BzAApI7J.js';
6
+ import { T as ThemeProvider, u as useTheme, a as TooltipProvider, S as Studio } from './studio-BDVd7rIV.js';
7
+ import useDebounced from './useDebounced-Dxncpg6z.js';
8
+ import { createStudioI18n, useT } from './createStudioI18n-CgvlmDkN.js';
9
+ import { StudioI18nProvider } from './StudioI18nProvider-Dcajsznk.js';
10
+ import STUDIO_ROOT_CLASS from './STUDIO_ROOT_CLASS-D12gX2dV.js';
11
+ import { c as cn } from './utils-B05Dmz_H.js';
12
+ import { jsxDEV } from 'react/jsx-dev-runtime';
13
+
14
+ const STORAGE_KEY = "lunora-studio-admin-token";
15
+ const store = () => {
16
+ try {
17
+ return globalThis.sessionStorage;
18
+ } catch {
19
+ return void 0;
20
+ }
21
+ };
22
+ const loadToken = () => {
23
+ try {
24
+ return store()?.getItem(STORAGE_KEY) ?? "";
25
+ } catch {
26
+ return "";
27
+ }
28
+ };
29
+ const saveToken = (token) => {
30
+ const storage = store();
31
+ if (storage === void 0) {
32
+ return;
33
+ }
34
+ try {
35
+ if (token === "") {
36
+ storage.removeItem(STORAGE_KEY);
37
+ } else {
38
+ storage.setItem(STORAGE_KEY, token);
39
+ }
40
+ } catch {
41
+ }
42
+ };
43
+
44
+ const resolveBaseUrl = (explicit) => {
45
+ if (explicit !== void 0 && explicit !== "") {
46
+ return explicit;
47
+ }
48
+ const loc = globalThis.location;
49
+ if (loc?.origin !== void 0 && loc.origin !== "") {
50
+ return loc.origin;
51
+ }
52
+ return "http://localhost:5173";
53
+ };
54
+ const StudioAppBody = (t0) => {
55
+ const $ = c(23);
56
+ const {
57
+ basePath,
58
+ chrome,
59
+ studio
60
+ } = t0;
61
+ const t = useT();
62
+ let t1;
63
+ if ($[0] !== t) {
64
+ t1 = t("Studio failed");
65
+ $[0] = t;
66
+ $[1] = t1;
67
+ } else {
68
+ t1 = $[1];
69
+ }
70
+ let t2;
71
+ if ($[2] !== t) {
72
+ t2 = t("Studio");
73
+ $[2] = t;
74
+ $[3] = t2;
75
+ } else {
76
+ t2 = $[3];
77
+ }
78
+ let t3;
79
+ if ($[4] !== t) {
80
+ t3 = t("Try again");
81
+ $[4] = t;
82
+ $[5] = t3;
83
+ } else {
84
+ t3 = $[5];
85
+ }
86
+ const t4 = studio?.dataEditable;
87
+ const t5 = studio?.functions;
88
+ const t6 = studio?.initialShardKey;
89
+ const t7 = studio?.openApiSpec;
90
+ const t8 = studio?.openRpcSpec;
91
+ const t9 = studio?.runAsIdentity;
92
+ const t10 = studio?.scheduledCancel;
93
+ const t11 = studio?.scheduledLoad;
94
+ const t12 = studio?.schemaEditable;
95
+ let t13;
96
+ if ($[6] !== basePath || $[7] !== chrome || $[8] !== t10 || $[9] !== t11 || $[10] !== t12 || $[11] !== t4 || $[12] !== t5 || $[13] !== t6 || $[14] !== t7 || $[15] !== t8 || $[16] !== t9) {
97
+ t13 = /* @__PURE__ */ jsxDEV(Studio, {
98
+ basePath,
99
+ chrome,
100
+ dataEditable: t4,
101
+ functions: t5,
102
+ initialShardKey: t6,
103
+ openApiSpec: t7,
104
+ openRpcSpec: t8,
105
+ runAsIdentity: t9,
106
+ scheduledCancel: t10,
107
+ scheduledLoad: t11,
108
+ schemaEditable: t12
109
+ }, void 0, false);
110
+ $[6] = basePath;
111
+ $[7] = chrome;
112
+ $[8] = t10;
113
+ $[9] = t11;
114
+ $[10] = t12;
115
+ $[11] = t4;
116
+ $[12] = t5;
117
+ $[13] = t6;
118
+ $[14] = t7;
119
+ $[15] = t8;
120
+ $[16] = t9;
121
+ $[17] = t13;
122
+ } else {
123
+ t13 = $[17];
124
+ }
125
+ let t14;
126
+ if ($[18] !== t1 || $[19] !== t13 || $[20] !== t2 || $[21] !== t3) {
127
+ t14 = /* @__PURE__ */ jsxDEV(ErrorBoundary, {
128
+ fallbackTitle: t1,
129
+ label: t2,
130
+ retryLabel: t3,
131
+ children: t13
132
+ }, void 0, false);
133
+ $[18] = t1;
134
+ $[19] = t13;
135
+ $[20] = t2;
136
+ $[21] = t3;
137
+ $[22] = t14;
138
+ } else {
139
+ t14 = $[22];
140
+ }
141
+ return t14;
142
+ };
143
+ const StudioShell = (t0) => {
144
+ const $ = c(20);
145
+ const {
146
+ basePath,
147
+ clearToken,
148
+ client,
149
+ i18n,
150
+ onTokenChange,
151
+ rulesInstalled,
152
+ studio,
153
+ token
154
+ } = t0;
155
+ const {
156
+ resolvedTheme
157
+ } = useTheme();
158
+ let t1;
159
+ if ($[0] !== clearToken || $[1] !== onTokenChange || $[2] !== rulesInstalled || $[3] !== token) {
160
+ t1 = {
161
+ clearToken,
162
+ onTokenChange,
163
+ rulesInstalled,
164
+ token
165
+ };
166
+ $[0] = clearToken;
167
+ $[1] = onTokenChange;
168
+ $[2] = rulesInstalled;
169
+ $[3] = token;
170
+ $[4] = t1;
171
+ } else {
172
+ t1 = $[4];
173
+ }
174
+ const chrome = t1;
175
+ const t2 = resolvedTheme === "dark" && "dark";
176
+ let t3;
177
+ if ($[5] !== t2) {
178
+ t3 = cn(STUDIO_ROOT_CLASS, t2, "flex h-dvh flex-col overflow-hidden bg-sidebar text-sm text-foreground");
179
+ $[5] = t2;
180
+ $[6] = t3;
181
+ } else {
182
+ t3 = $[6];
183
+ }
184
+ let t4;
185
+ if ($[7] !== basePath || $[8] !== chrome || $[9] !== studio) {
186
+ t4 = /* @__PURE__ */ jsxDEV(TooltipProvider, {
187
+ children: /* @__PURE__ */ jsxDEV(StudioAppBody, {
188
+ basePath,
189
+ chrome,
190
+ studio
191
+ }, void 0, false)
192
+ }, void 0, false);
193
+ $[7] = basePath;
194
+ $[8] = chrome;
195
+ $[9] = studio;
196
+ $[10] = t4;
197
+ } else {
198
+ t4 = $[10];
199
+ }
200
+ let t5;
201
+ if ($[11] !== i18n || $[12] !== t4) {
202
+ t5 = /* @__PURE__ */ jsxDEV(StudioI18nProvider, {
203
+ i18n,
204
+ children: t4
205
+ }, void 0, false);
206
+ $[11] = i18n;
207
+ $[12] = t4;
208
+ $[13] = t5;
209
+ } else {
210
+ t5 = $[13];
211
+ }
212
+ let t6;
213
+ if ($[14] !== client || $[15] !== t5) {
214
+ t6 = /* @__PURE__ */ jsxDEV(LunoraProvider, {
215
+ client,
216
+ children: t5
217
+ }, void 0, false);
218
+ $[14] = client;
219
+ $[15] = t5;
220
+ $[16] = t6;
221
+ } else {
222
+ t6 = $[16];
223
+ }
224
+ let t7;
225
+ if ($[17] !== t3 || $[18] !== t6) {
226
+ t7 = /* @__PURE__ */ jsxDEV("div", {
227
+ className: t3,
228
+ "data-testid": "lunora-studio-app",
229
+ children: t6
230
+ }, void 0, false);
231
+ $[17] = t3;
232
+ $[18] = t6;
233
+ $[19] = t7;
234
+ } else {
235
+ t7 = $[19];
236
+ }
237
+ return t7;
238
+ };
239
+ const StudioApp = (t0) => {
240
+ const $ = c(25);
241
+ let t1;
242
+ if ($[0] !== t0) {
243
+ t1 = t0 === void 0 ? {} : t0;
244
+ $[0] = t0;
245
+ $[1] = t1;
246
+ } else {
247
+ t1 = $[1];
248
+ }
249
+ const {
250
+ adminToken,
251
+ basePath,
252
+ baseUrl,
253
+ client: injectedClient,
254
+ rulesInstalled,
255
+ studio,
256
+ locale
257
+ } = t1;
258
+ let t2;
259
+ if ($[2] !== adminToken) {
260
+ t2 = () => adminToken ?? loadToken();
261
+ $[2] = adminToken;
262
+ $[3] = t2;
263
+ } else {
264
+ t2 = $[3];
265
+ }
266
+ const [token, setToken] = useState(t2);
267
+ let t3;
268
+ let t4;
269
+ if ($[4] !== token) {
270
+ t3 = () => {
271
+ saveToken(token);
272
+ };
273
+ t4 = [token];
274
+ $[4] = token;
275
+ $[5] = t3;
276
+ $[6] = t4;
277
+ } else {
278
+ t3 = $[5];
279
+ t4 = $[6];
280
+ }
281
+ useEffect(t3, t4);
282
+ const debouncedToken = useDebounced(token, 300);
283
+ let t5;
284
+ bb0: {
285
+ if (injectedClient !== void 0) {
286
+ t5 = injectedClient;
287
+ break bb0;
288
+ }
289
+ let created;
290
+ if ($[7] !== baseUrl || $[8] !== debouncedToken) {
291
+ created = new LunoraClient({
292
+ url: resolveBaseUrl(baseUrl),
293
+ ...debouncedToken === "" ? {} : {
294
+ wsToken: debouncedToken
295
+ }
296
+ });
297
+ if (debouncedToken !== "") {
298
+ created.setAuthToken(debouncedToken);
299
+ }
300
+ $[7] = baseUrl;
301
+ $[8] = debouncedToken;
302
+ $[9] = created;
303
+ } else {
304
+ created = $[9];
305
+ }
306
+ t5 = created;
307
+ }
308
+ const client = t5;
309
+ let t6;
310
+ let t7;
311
+ if ($[10] !== client || $[11] !== injectedClient) {
312
+ t6 = () => () => {
313
+ if (injectedClient === void 0) {
314
+ client.close();
315
+ }
316
+ };
317
+ t7 = [client, injectedClient];
318
+ $[10] = client;
319
+ $[11] = injectedClient;
320
+ $[12] = t6;
321
+ $[13] = t7;
322
+ } else {
323
+ t6 = $[12];
324
+ t7 = $[13];
325
+ }
326
+ useEffect(t6, t7);
327
+ let t8;
328
+ if ($[14] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
329
+ t8 = (event) => {
330
+ setToken(event.target.value);
331
+ };
332
+ $[14] = t8;
333
+ } else {
334
+ t8 = $[14];
335
+ }
336
+ const onTokenChange = t8;
337
+ let t9;
338
+ if ($[15] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
339
+ t9 = () => {
340
+ setToken("");
341
+ };
342
+ $[15] = t9;
343
+ } else {
344
+ t9 = $[15];
345
+ }
346
+ const clearToken = t9;
347
+ let t10;
348
+ if ($[16] !== locale) {
349
+ t10 = createStudioI18n(locale);
350
+ $[16] = locale;
351
+ $[17] = t10;
352
+ } else {
353
+ t10 = $[17];
354
+ }
355
+ const i18n = t10;
356
+ let t11;
357
+ if ($[18] !== basePath || $[19] !== client || $[20] !== i18n || $[21] !== rulesInstalled || $[22] !== studio || $[23] !== token) {
358
+ t11 = /* @__PURE__ */ jsxDEV(ThemeProvider, {
359
+ children: /* @__PURE__ */ jsxDEV(StudioShell, {
360
+ basePath,
361
+ clearToken,
362
+ client,
363
+ i18n,
364
+ onTokenChange,
365
+ rulesInstalled,
366
+ studio,
367
+ token
368
+ }, void 0, false)
369
+ }, void 0, false);
370
+ $[18] = basePath;
371
+ $[19] = client;
372
+ $[20] = i18n;
373
+ $[21] = rulesInstalled;
374
+ $[22] = studio;
375
+ $[23] = token;
376
+ $[24] = t11;
377
+ } else {
378
+ t11 = $[24];
379
+ }
380
+ return t11;
381
+ };
382
+
383
+ export { StudioApp };
@@ -0,0 +1,48 @@
1
+ import { c } from 'react/compiler-runtime';
2
+ import { studioI18n, createStudioI18n, StudioI18nContext } from './createStudioI18n-CgvlmDkN.js';
3
+ import { jsxDEV } from 'react/jsx-dev-runtime';
4
+
5
+ const resolveInstance = (i18n, locale, catalogs) => {
6
+ if (i18n !== void 0) {
7
+ return i18n;
8
+ }
9
+ if (locale === void 0 && catalogs === void 0) {
10
+ return studioI18n;
11
+ }
12
+ return createStudioI18n(locale, catalogs);
13
+ };
14
+ const StudioI18nProvider = (t0) => {
15
+ const $ = c(7);
16
+ const {
17
+ catalogs,
18
+ children,
19
+ i18n,
20
+ locale
21
+ } = t0;
22
+ let t1;
23
+ if ($[0] !== catalogs || $[1] !== i18n || $[2] !== locale) {
24
+ t1 = resolveInstance(i18n, locale, catalogs);
25
+ $[0] = catalogs;
26
+ $[1] = i18n;
27
+ $[2] = locale;
28
+ $[3] = t1;
29
+ } else {
30
+ t1 = $[3];
31
+ }
32
+ const instance = t1;
33
+ let t2;
34
+ if ($[4] !== children || $[5] !== instance) {
35
+ t2 = /* @__PURE__ */ jsxDEV(StudioI18nContext, {
36
+ value: instance,
37
+ children
38
+ }, void 0, false);
39
+ $[4] = children;
40
+ $[5] = instance;
41
+ $[6] = t2;
42
+ } else {
43
+ t2 = $[6];
44
+ }
45
+ return t2;
46
+ };
47
+
48
+ export { StudioI18nProvider };